Version Description
- 2013-12-03 =
- fixed another rare case where image goes missing when dragging and dropping a WordPress' post into our visual editor
- fixed post updates taking too long when refreshing automatic newsletters with the "automated latest content" widget
- fixed rare case where image goes missing when dragging and dropping an uploaded image into our visual editor
- fixed birthday cake for our two years anniversary http://www.mailpoet.com/two-year-anniversary/
Download this release
Release Info
Developer | wysija |
Plugin | MailPoet Newsletters (Previous) |
Version | 2.5.9.3 |
Comparing to | |
See all releases |
Code changes from version 2.6.8 to 2.5.9.3
- add-ons/add-ons-list.php +0 -324
- add-ons/add-ons.php +0 -263
- classes/WJ_Analytics.php +260 -706
- classes/WJ_Export.php +192 -213
- classes/WJ_Field.php +0 -283
- classes/WJ_FieldHandler.php +0 -59
- classes/WJ_FieldRender.php +0 -249
- classes/WJ_FieldUser.php +0 -130
- classes/WJ_Import.php +197 -336
- classes/WJ_Migrator.php +0 -53
- classes/WJ_Option.php +0 -29
- classes/WJ_Settings.php +0 -30
- classes/WJ_Stats.php +0 -474
- classes/WJ_Upgrade.php +0 -390
- classes/WJ_Utils.php +0 -69
- controllers/ajax/campaigns.php +868 -999
- controllers/ajax/config.php +7 -143
- controllers/ajax/statistics.php +0 -95
- controllers/ajax/subscribers.php +6 -27
- controllers/ajax/tmce.php +139 -138
- controllers/back.php +47 -17
- controllers/back/campaigns.php +2639 -2719
- controllers/back/config.php +101 -101
- controllers/back/premium.php +0 -34
- controllers/back/statistics.php +0 -197
- controllers/back/subscribers.php +89 -191
- controllers/front/confirm.php +19 -55
- controllers/front/email.php +10 -18
- controllers/front/module.php +0 -38
- controllers/front/stats.php +274 -29
- core/base.php +1300 -1527
- core/controller.php +76 -81
- core/model.php +995 -1028
- core/module/module.php +0 -248
- core/module/statistics.php +0 -33
- core/module/statistics_model.php +0 -139
- core/module/statisticschart.php +0 -11
- core/module/statisticstable.php +0 -5
- core/view.php +12 -157
- css/add-ons.css +0 -1
- css/admin-campaigns-articles.css +1 -1
- css/admin-campaigns-autopost.css +1 -1
- css/admin-campaigns-bookmarks.css +1 -1
- css/admin-campaigns-dividers.css +1 -1
- css/admin-campaigns-editDetails.css +1 -1
- css/admin-campaigns-medias.css +1 -1
- css/admin-campaigns-themes.css +1 -1
- css/admin-campaigns-viewstats.css +0 -1
- css/admin-campaigns.css +1 -1
- css/admin-config-form_widget_settings.css +1 -1
- css/admin-config.css +1 -1
- css/admin-dashicons.css +0 -1
- css/admin-global.css +1 -1
- css/admin-premium.css +0 -1
- css/admin-statistics.css +0 -1
- css/admin-subscribers-addlist.css +0 -1
- css/admin-subscribers-edit.css +0 -1
- css/admin-subscribers-export.css +0 -1
- css/admin-subscribers-exportlist.css +0 -1
- css/admin-subscribers-importmatch.css +1 -1
- css/admin-subscribers.css +0 -1
- css/admin-widget.css +1 -1
- css/admin.css +1 -1
- css/adminPopup.css +1 -1
- css/jquery/ui/themes/base/images/animated-overlay.gif +0 -0
- css/jquery/ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- css/jquery/ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- css/jquery/ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- css/jquery/ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- css/jquery/ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- css/jquery/ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- css/jquery/ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- css/jquery/ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- css/jquery/ui/themes/base/images/ui-icons_222222_256x240.png +0 -0
- css/jquery/ui/themes/base/images/ui-icons_2e83ff_256x240.png +0 -0
- css/jquery/ui/themes/base/images/ui-icons_454545_256x240.png +0 -0
- css/jquery/ui/themes/base/images/ui-icons_888888_256x240.png +0 -0
- css/jquery/ui/themes/base/images/ui-icons_cd0a0a_256x240.png +0 -0
- css/jquery/ui/themes/base/jquery.ui.core.min.css +0 -5
- css/jquery/ui/themes/base/jquery.ui.datepicker.min.css +0 -5
- css/rtl.css +1 -1
- css/select2/select2.css +0 -615
- css/smoothness/jquery-ui-1.8.20.custom.css +1 -1
- css/tmce/editor.css +0 -2317
- css/validationEngine.jquery.css +1 -1
- css/vendor/bootstrap.tooltip.css +0 -101
- css/wysija-editor.css +1 -1
- css/wysija-form-editor.css +1 -1
- data/bookmarks/medium/03/credit.txt +1 -1
- data/bookmarks/medium/04/credit.txt +1 -1
- data/bookmarks/medium/06/credit.txt +1 -1
- data/bookmarks/medium/07/credit.txt +1 -1
- data/bookmarks/medium/08/credit.txt +1 -1
- data/bookmarks/medium/09/credit.txt +1 -1
- data/bookmarks/medium/11/credit.txt +1 -1
- data/bookmarks/medium/12/credit.txt +1 -1
- data/bookmarks/medium/13/credit.txt +1 -1
- data/bookmarks/small/03/credit.txt +1 -1
- data/bookmarks/small/04/credit.txt +1 -1
- docs/german-disclaimer.md +0 -4
- font/icon-email.eot +0 -0
- font/icon-email.svg +0 -11
- font/icon-email.ttf +0 -0
- font/icon-email.woff +0 -0
- helpers/articles.php +84 -247
- helpers/autonews.php +6 -33
- helpers/back.php +104 -128
add-ons/add-ons-list.php
DELETED
@@ -1,324 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* List of all add-ons available for MailPoet
|
4 |
-
*/
|
5 |
-
function add_ons_list(){
|
6 |
-
$available_add_ons = array(
|
7 |
-
array(
|
8 |
-
'name' => 'WooCommerce: Subscribe on Checkout',
|
9 |
-
'search' => 'MailPoet WooCommerce Add-on',
|
10 |
-
'thumbnail' => 'woocommerce.png',
|
11 |
-
'description' => __( 'Add a checkbox on checkout page for your customers to subscribe to your MailPoet newsletters.', WYSIJA ),
|
12 |
-
'plugin_url' => 'mailpoet-woocommerce-addon/mailpoet-woocommerce-addon.php',
|
13 |
-
'version' => '1.0.2',
|
14 |
-
'config_url' => 'admin.php?page=woocommerce_settings&tab=mailpoet',
|
15 |
-
'official' => true,
|
16 |
-
'on_wordpress.org' => true,
|
17 |
-
'free' => true,
|
18 |
-
'service' => false,
|
19 |
-
'requires' => 'woocommerce/woocommerce.php',
|
20 |
-
'requires_name' => 'WooCommerce',
|
21 |
-
),
|
22 |
-
|
23 |
-
array(
|
24 |
-
'name' => 'Autoresponders for WooCommerce Products',
|
25 |
-
'search' => 'Autoresponders for WooCommerce Products',
|
26 |
-
'thumbnail' => 'woocommerce.png',
|
27 |
-
'description' => __( 'Decide which emails a new customer gets automatically, based on the product he just purchased. This a Premium add-on for WooCommerce.', WYSIJA ),
|
28 |
-
'review' => '',
|
29 |
-
'plugin_url' => '',
|
30 |
-
'author_url' => 'http://clicky.me/woocommerce-autoresponder',
|
31 |
-
'purchase_url' => 'http://clicky.me/woocommerce-autoresponder',
|
32 |
-
'version' => '1.0.1',
|
33 |
-
'official' => true,
|
34 |
-
'on_wordpress.org' => false,
|
35 |
-
'free' => false,
|
36 |
-
'service' => false,
|
37 |
-
),
|
38 |
-
|
39 |
-
array(
|
40 |
-
'name' => 'Jigoshop: Subscribe on Checkout',
|
41 |
-
'search' => 'MailPoet Jigoshop Add-on',
|
42 |
-
'thumbnail' => 'jigoshop.png',
|
43 |
-
'description' => __( 'Add a checkbox on checkout page for your customers to subscribe to your MailPoet newsletters.', WYSIJA ),
|
44 |
-
'plugin_url' => 'mailpoet-jigoshop-addon/mailpoet-jigoshop-addon.php',
|
45 |
-
'version' => '1.0.3',
|
46 |
-
'config_url' => 'admin.php?page=jigoshop_settings&tab=mailpoet',
|
47 |
-
'official' => true,
|
48 |
-
'on_wordpress.org' => true,
|
49 |
-
'free' => true,
|
50 |
-
'service' => false,
|
51 |
-
'requires' => 'jigoshop/jigoshop.php',
|
52 |
-
'requires_name' => 'Jigoshop',
|
53 |
-
),
|
54 |
-
|
55 |
-
array(
|
56 |
-
'name' => 'Gravity Forms: Subscribe Add-on',
|
57 |
-
'search' => 'MailPoet Gravity Forms Add-on',
|
58 |
-
'thumbnail' => 'gravity-forms.png',
|
59 |
-
'description' => __( 'Add a new field to add to your forms so your visitors can subscriber to your MailPoet newsletters.', WYSIJA ),
|
60 |
-
'plugin_url' => 'mailpoet-gravity-forms-addon/mailpoet-gravity-forms-addon.php',
|
61 |
-
'version' => '1.0.0',
|
62 |
-
'official' => true,
|
63 |
-
'on_wordpress.org' => true,
|
64 |
-
'free' => true,
|
65 |
-
'service' => false,
|
66 |
-
'requires' => 'gravityforms/gravityforms.php',
|
67 |
-
'requires_name' => 'Gravity Forms',
|
68 |
-
),
|
69 |
-
|
70 |
-
array(
|
71 |
-
'name' => 'WP e-Commerce: Subscribe on Checkout',
|
72 |
-
'search' => 'MailPoet WP e-Commerce Add-on',
|
73 |
-
'thumbnail' => 'wp-e-commerce.png',
|
74 |
-
'description' => __( 'Add a checkbox on checkout page for your customers to subscribe to your MailPoet newsletters.', WYSIJA ),
|
75 |
-
'plugin_url' => 'mailpoet-wp-ecommerce-addon/mailpoet-wp-ecommerce-addon.php',
|
76 |
-
'version' => '1.0.0',
|
77 |
-
'config_url' => 'edit.php?post_type=wpsc-product&page=mailpoet',
|
78 |
-
'official' => true,
|
79 |
-
'on_wordpress.org' => true,
|
80 |
-
'free' => true,
|
81 |
-
'service' => false,
|
82 |
-
'requires' => 'wp-e-commerce/wp-shopping-cart.php',
|
83 |
-
'requires_name' => 'WP e-Commerce',
|
84 |
-
),
|
85 |
-
|
86 |
-
array(
|
87 |
-
'name' => 'Restrict Content Pro: Registration Add-on',
|
88 |
-
'search' => 'Restrict Content Pro Wysija',
|
89 |
-
'thumbnail' => 'pippins.png',
|
90 |
-
'description' => __( 'Add a checkbox on the registration form of this plugin so your new users join a list of your choice.', WYSIJA ),
|
91 |
-
'plugin_url' => 'restrict-content-pro-wysija/rcp-wysija.php',
|
92 |
-
'version' => '1.0',
|
93 |
-
'official' => true,
|
94 |
-
'on_wordpress.org' => true,
|
95 |
-
'free' => true,
|
96 |
-
'service' => false,
|
97 |
-
'requires' => 'restrict-content-pro/restrict-content-pro.php',
|
98 |
-
'requires_name' => 'Restrict Content Pro',
|
99 |
-
),
|
100 |
-
|
101 |
-
array(
|
102 |
-
'name' => 'Contact Form 7: MailPoet Add-on',
|
103 |
-
'search' => 'MailPoet Contact Form 7',
|
104 |
-
'thumbnail' => 'cf7.png',
|
105 |
-
'description' => __( 'Add a checkbox in your forms, and choose which lists the user gets added to.', WYSIJA ),
|
106 |
-
'plugin_url' => 'mailpoet-contact-form-7/mailpoet-contact-form-7.php',
|
107 |
-
'author_url' => '',
|
108 |
-
'version' => '1.0.0',
|
109 |
-
'official' => true,
|
110 |
-
'on_wordpress.org' => true,
|
111 |
-
'free' => true,
|
112 |
-
'service' => false,
|
113 |
-
'requires' => 'contact-form-7/wp-contact-form-7.php',
|
114 |
-
'requires_name' => 'Contact Form 7',
|
115 |
-
),
|
116 |
-
|
117 |
-
array(
|
118 |
-
'name' => 'WangGuard: MailPoet Connector',
|
119 |
-
'search' => 'WangGuard Wysija Newsletter Connector',
|
120 |
-
'thumbnail' => 'wangguard.png',
|
121 |
-
'description' => __( 'Stop fake signups by robots with WangGuard, a free white listing service, and plugin.', WYSIJA ),
|
122 |
-
'review' => __( 'If you have this problem, then this is your solution. Totally free too.', WYSIJA ),
|
123 |
-
'plugin_url' => 'wangguard-wysija-newsletter-connector/wangguard-wysija.php',
|
124 |
-
'author_url' => 'http://clicky.me/wangguard',
|
125 |
-
'version' => '1.0.0',
|
126 |
-
'official' => true,
|
127 |
-
'on_wordpress.org' => true,
|
128 |
-
'free' => true,
|
129 |
-
'service' => false,
|
130 |
-
'requires' => '',
|
131 |
-
),
|
132 |
-
|
133 |
-
array(
|
134 |
-
'name' => 'Leaky Paywall: MailPoet Add-on',
|
135 |
-
'search' => 'Leaky Paywall: MailPoet Add-on',
|
136 |
-
'thumbnail' => 'leakypw.png',
|
137 |
-
'description' => __( 'Leaky Paywall is a Premium plugin to put content behind a paywall. This add-on manages your customers\' customers subscriptions.', WYSIJA ),
|
138 |
-
'plugin_url' => 'leaky-paywall-mail-poet/issuem-leaky-paywall-mailpoet.php',
|
139 |
-
'author_url' => 'http://clicky.me/leakypw',
|
140 |
-
'version' => '1.0.0',
|
141 |
-
'official' => true,
|
142 |
-
'on_wordpress.org' => true,
|
143 |
-
'free' => true,
|
144 |
-
'service' => false,
|
145 |
-
),
|
146 |
-
|
147 |
-
array(
|
148 |
-
'name' => 'GetConversion: Bar and Box Forms Add-on',
|
149 |
-
'search' => 'GC MailPoet EX',
|
150 |
-
'thumbnail' => 'getconversion.png',
|
151 |
-
'description' => __( 'Put a form in a top or bottom bar of your site, or in a nice box within your posts with GetConversion\'s free plugins. Connect them to MailPoet with this add-on.<br/></br>Get 30% off the Premium version of their add-on by clicking <a href="http://getconversion.com/products/gc-mailpoet-ex-pro/?coupon=MAILPOET">here</a>.', WYSIJA ),
|
152 |
-
'review' => __( 'Try it yourself, we were impressed by the free versions.', WYSIJA ),
|
153 |
-
'plugin_url' => 'gc-message-bar/main.php',
|
154 |
-
'author_url' => 'http://clicky.me/GC-add-on',
|
155 |
-
'version' => '1.0.0',
|
156 |
-
'official' => true,
|
157 |
-
'on_wordpress.org' => true,
|
158 |
-
'free' => true,
|
159 |
-
'service' => false,
|
160 |
-
),
|
161 |
-
|
162 |
-
/* Below is the list of services that work with MailPoet */
|
163 |
-
|
164 |
-
array(
|
165 |
-
'name' => 'OptinMonster: Slick Forms',
|
166 |
-
'search' => 'OptinMonster: slick forms',
|
167 |
-
'thumbnail' => 'optinmonster.png',
|
168 |
-
'description' => __( 'Put a subscription form in a popup, footer bar or slide-in to add subscribers with this Premium plugin.', WYSIJA ),
|
169 |
-
'review' => __( 'The authors have done a pretty awesome job.', WYSIJA ),
|
170 |
-
'plugin_url' => '',
|
171 |
-
'author_url' => 'http://clicky.me/optinmonsteraddon',
|
172 |
-
'purchase_url' => '',
|
173 |
-
'version' => '',
|
174 |
-
'official' => false,
|
175 |
-
'on_wordpress.org' => false,
|
176 |
-
'free' => false,
|
177 |
-
'service' => true,
|
178 |
-
'premium_offer' => __( 'Premium users save 20% with this coupon: MP20', WYSIJA ),
|
179 |
-
),
|
180 |
-
|
181 |
-
array(
|
182 |
-
'name' => 'Pippity: Form in a Popup',
|
183 |
-
'search' => 'Pippity: form in a popup',
|
184 |
-
'thumbnail' => 'pippity.png',
|
185 |
-
'description' => __( 'This Premium plugin allows you to add a MailPoet form in a popup.', WYSIJA ),
|
186 |
-
'review' => __( 'You\'ll need to know CSS to design it to your taste.', WYSIJA ),
|
187 |
-
'plugin_url' => '',
|
188 |
-
'author_url' => 'http://clicky.me/pippity',
|
189 |
-
'purchase_url' => '',
|
190 |
-
'version' => '',
|
191 |
-
'official' => false,
|
192 |
-
'on_wordpress.org' => false,
|
193 |
-
'free' => false,
|
194 |
-
'service' => true,
|
195 |
-
'premium_offer' => __( 'Premium users save 25% with this coupon: mailpoet25', WYSIJA ),
|
196 |
-
),
|
197 |
-
|
198 |
-
|
199 |
-
array(
|
200 |
-
'name' => 'Hybrid Connect: Forms and Facebook',
|
201 |
-
'search' => 'Hybrid Connect: forms and Facebook',
|
202 |
-
'thumbnail' => 'hybrid-connect.png',
|
203 |
-
'description' => __( 'This Premium plugin allows you to add MailPoet\'s forms in many places, and in Facebook.', WYSIJA ),
|
204 |
-
'review' => __( 'Very powerful, if not a quirky user interface.', WYSIJA ),
|
205 |
-
'plugin_url' => '',
|
206 |
-
'author_url' => 'http://clicky.me/hybrid-connect',
|
207 |
-
'purchase_url' => '',
|
208 |
-
'version' => '',
|
209 |
-
'official' => false,
|
210 |
-
'on_wordpress.org' => false,
|
211 |
-
'free' => false,
|
212 |
-
'service' => true,
|
213 |
-
'premium_offer' => '',
|
214 |
-
),
|
215 |
-
|
216 |
-
array(
|
217 |
-
'name' => 'Magic Action Box: Pretty forms in post',
|
218 |
-
'search' => 'Magic Action Box: pretty forms in post',
|
219 |
-
'thumbnail' => 'magic-action-box.png',
|
220 |
-
'description' => __( 'This free plugin allows you to design and position a form at the beginning or bottom of a post.', WYSIJA ),
|
221 |
-
'review' => __( 'It\'s free, and has proven popular with our users.', WYSIJA ),
|
222 |
-
'plugin_url' => '',
|
223 |
-
'author_url' => 'http://clicky.me/magic-action-box',
|
224 |
-
'purchase_url' => '',
|
225 |
-
'version' => '',
|
226 |
-
'official' => false,
|
227 |
-
'on_wordpress.org' => false,
|
228 |
-
'free' => false,
|
229 |
-
'service' => true,
|
230 |
-
'premium_offer' => '',
|
231 |
-
),
|
232 |
-
|
233 |
-
array(
|
234 |
-
'name' => 'Optin Revolution: Popup form',
|
235 |
-
'search' => 'Optin Revolution: popup form',
|
236 |
-
'thumbnail' => 'optin-revolution.png',
|
237 |
-
'description' => __( 'This free plugin allows you to put a form in a popup, that\'s it.', WYSIJA ),
|
238 |
-
'review' => __( 'This is the free version of a more powerful Premium version.', WYSIJA ),
|
239 |
-
'plugin_url' => '',
|
240 |
-
'author_url' => 'http://clicky.me/optin-revolution',
|
241 |
-
'purchase_url' => '',
|
242 |
-
'version' => '',
|
243 |
-
'official' => false,
|
244 |
-
'on_wordpress.org' => false,
|
245 |
-
'free' => false,
|
246 |
-
'service' => true,
|
247 |
-
'premium_offer' => '',
|
248 |
-
),
|
249 |
-
|
250 |
-
array(
|
251 |
-
'name' => 'Ultimate Coming Soon Page',
|
252 |
-
'search' => 'Ultimate Coming Soon Page',
|
253 |
-
'thumbnail' => 'ultimate-coming-soon.png',
|
254 |
-
'description' => __( 'Your new site is not yet launched? Put a coming soon page with a form to capture emails with this Premium plugin.', WYSIJA ),
|
255 |
-
'review' => __( 'A well designed plugin for a simple idea.', WYSIJA ),
|
256 |
-
'plugin_url' => '',
|
257 |
-
'author_url' => 'http://clicky.me/coming-soon',
|
258 |
-
'purchase_url' => '',
|
259 |
-
'version' => '',
|
260 |
-
'official' => false,
|
261 |
-
'on_wordpress.org' => false,
|
262 |
-
'free' => false,
|
263 |
-
'service' => true,
|
264 |
-
'premium_offer' => __( 'Premium users save 20% with this coupon: MAILPOET20', WYSIJA ),
|
265 |
-
),
|
266 |
-
|
267 |
-
array(
|
268 |
-
'name' => 'Plugmatter: form below your header',
|
269 |
-
'search' => 'Plugmatter',
|
270 |
-
'thumbnail' => 'plugmatter.png',
|
271 |
-
'description' => __( 'This Premium plugin allows you to put a pretty form right below the header. Nothing more, nothing less.', WYSIJA ),
|
272 |
-
'review' => '',
|
273 |
-
'plugin_url' => '',
|
274 |
-
'author_url' => 'http://clicky.me/plugmatter',
|
275 |
-
'purchase_url' => '',
|
276 |
-
'version' => '',
|
277 |
-
'official' => false,
|
278 |
-
'on_wordpress.org' => false,
|
279 |
-
'free' => false,
|
280 |
-
'service' => true,
|
281 |
-
'premium_offer' => '',
|
282 |
-
),
|
283 |
-
|
284 |
-
array(
|
285 |
-
'name' => 'EDD: MailPoet: Subscribe on Checkout',
|
286 |
-
'search' => 'Easy Digital Downloads - MailPoet',
|
287 |
-
'thumbnail' => 'easy-digital-downloads.png',
|
288 |
-
'description' => __( 'A checkbox is added as option for your customers to signup for your newsletter while purchasing from your digital store.', WYSIJA ),
|
289 |
-
'review' => '',
|
290 |
-
'plugin_url' => '',
|
291 |
-
'author_url' => 'http://clicky.me/easy-digital-downloads',
|
292 |
-
'purchase_url' => 'http://clicky.me/easy-digital-downloads',
|
293 |
-
'version' => '1.1.2',
|
294 |
-
'official' => false,
|
295 |
-
'on_wordpress.org' => false,
|
296 |
-
'free' => false,
|
297 |
-
'service' => false,
|
298 |
-
'requires' => 'easy-digital-downloads/easy-digital-downloads.php',
|
299 |
-
'requires_name' => 'Easy Digital Downloads',
|
300 |
-
'premium_offer' => '',
|
301 |
-
),
|
302 |
-
|
303 |
-
array(
|
304 |
-
'name' => 'Ninja Forms: Subscribe Add-on',
|
305 |
-
'search' => 'Ninja Forms: Subscribe Add-on',
|
306 |
-
'thumbnail' => 'ninja-forms.png',
|
307 |
-
'description' => __( 'Quickly create newsletter signup forms for your MailPoet mailing lists using the power and flexibility that Ninja Forms provides.', WYSIJA ),
|
308 |
-
'review' => '',
|
309 |
-
'plugin_url' => 'ninja-forms-mailpoet/nf-mailpoet.php',
|
310 |
-
'author_url' => 'http://clicky.me/ninja-forms',
|
311 |
-
'purchase_url' => 'http://clicky.me/ninja-forms',
|
312 |
-
'version' => '1.0.1',
|
313 |
-
'official' => false,
|
314 |
-
'on_wordpress.org' => false,
|
315 |
-
'free' => true,
|
316 |
-
'service' => false,
|
317 |
-
'requires' => 'ninja-forms/ninja-forms.php',
|
318 |
-
'requires_name' => 'Ninja Forms',
|
319 |
-
'premium_offer' => '',
|
320 |
-
),
|
321 |
-
);
|
322 |
-
|
323 |
-
return $available_add_ons;
|
324 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
add-ons/add-ons.php
DELETED
@@ -1,263 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
if ( ! defined( 'ABSPATH' ) ){
|
3 |
-
exit; // Exit if accessed directly
|
4 |
-
}
|
5 |
-
|
6 |
-
class MailPoet_Add_ons {
|
7 |
-
/**
|
8 |
-
* Constructor
|
9 |
-
*/
|
10 |
-
public function __construct(){
|
11 |
-
$this->plugin_path = WYSIJA_DIR;
|
12 |
-
$this->wp_plugin_path = str_replace( 'wysija-newsletters', '', $this->plugin_path );
|
13 |
-
$this->plugin_url = WYSIJA_URL;
|
14 |
-
$this->image_url = 'http://ps.w.org/wysija-newsletters/assets/add-ons/';
|
15 |
-
|
16 |
-
$this->mailpoet_add_on_activated_notice();
|
17 |
-
$this->mailpoet_add_on_deactivated_notice();
|
18 |
-
}
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Runs when the plugin is initialized.
|
22 |
-
*/
|
23 |
-
public function init_mail_poet_add_ons(){
|
24 |
-
// Load JavaScript and stylesheets.
|
25 |
-
$this->register_scripts_and_styles();
|
26 |
-
}
|
27 |
-
|
28 |
-
/**
|
29 |
-
* Registers and enqueues stylesheets for the
|
30 |
-
* administration panel and the public facing site.
|
31 |
-
*/
|
32 |
-
public function register_scripts_and_styles(){
|
33 |
-
if ( is_admin() ) {
|
34 |
-
wp_register_style( 'mail_poet_add_ons', WYSIJA_URL . 'css/add-ons.css' );
|
35 |
-
wp_enqueue_style( 'mail_poet_add_ons' );
|
36 |
-
} // end if
|
37 |
-
} // end register_scripts_and_styles
|
38 |
-
|
39 |
-
/**
|
40 |
-
* This notifies the user that the add-on plugin
|
41 |
-
* is now activated and returns them back to the
|
42 |
-
* add-ons page.
|
43 |
-
*/
|
44 |
-
public function mailpoet_add_on_activated_notice(){
|
45 |
-
global $current_screen;
|
46 |
-
|
47 |
-
require_once(ABSPATH.'/wp-admin/includes/plugin.php');
|
48 |
-
|
49 |
-
if ( isset($_GET['action'] ) && $_GET['action'] == 'activate' && isset( $_GET['module'] ) ) {
|
50 |
-
|
51 |
-
$plugin = plugin_basename( $_GET['module'] );
|
52 |
-
$plugin_data = get_plugin_data( $this->wp_plugin_path . $plugin );
|
53 |
-
|
54 |
-
$plugin_name = esc_attr( str_replace( ' ', '_', $plugin_data['Name'] ) );
|
55 |
-
$plugin_name = esc_attr( str_replace( ''', '_', $plugin_name ) );
|
56 |
-
|
57 |
-
if ( isset( $_GET['requires'] ) ) {
|
58 |
-
if ( file_exists( $this->wp_plugin_path . plugin_basename( $_GET['requires'] ) ) ) {
|
59 |
-
if ( ! WYSIJA::is_plugin_active( $_GET['requires'] ) ) {
|
60 |
-
$location = admin_url( 'admin.php?page=wysija_config&status=not-activated&add-on=' . $plugin_name . '&requires=' . esc_attr( str_replace( ' ', '_', $_GET['requires_name'] ) ) . '#tab-add-ons' );
|
61 |
-
wp_safe_redirect( $location );
|
62 |
-
exit;
|
63 |
-
}
|
64 |
-
} else {
|
65 |
-
$location = admin_url( 'admin.php?page=wysija_config&status=not-installed&add-on=' . $plugin_name . '&requires=' . esc_attr( str_replace( ' ', '_', $_GET['requires_name'] ) ) . '#tab-add-ons' );
|
66 |
-
wp_safe_redirect( $location );
|
67 |
-
exit;
|
68 |
-
}
|
69 |
-
}
|
70 |
-
|
71 |
-
// Activate the add-on plugin.
|
72 |
-
activate_plugin( $plugin );
|
73 |
-
|
74 |
-
// Return back to add-on page.
|
75 |
-
$location = admin_url( 'admin.php?page=wysija_config&status=activated&add-on=' . $plugin_name . '#tab-add-ons' );
|
76 |
-
wp_safe_redirect( $location );
|
77 |
-
exit;
|
78 |
-
}
|
79 |
-
|
80 |
-
/**
|
81 |
-
* Display message if the plugin was not able to activate due
|
82 |
-
* to a required plugin is not active first.
|
83 |
-
*/
|
84 |
-
if ( $current_screen->parent_base == 'wysija_campaigns' && isset( $_GET['status'] ) && $_GET['status'] == 'not-activated' || isset( $_GET['status'] ) && $_GET['status'] == 'not-installed' ){
|
85 |
-
echo
|
86 |
-
'<div id="message" class="error fade" style="display:block !important;">' .
|
87 |
-
'<p>' .
|
88 |
-
'<strong>' . esc_attr( str_replace( '_', ' ', $_GET['add-on'] ) ) . '</strong> ' .
|
89 |
-
wp_kses( sprintf(
|
90 |
-
__( 'was not activated as it requires <strong><a href="%s">%s</a></strong> to be installed and active first.', WYSIJA ),
|
91 |
-
esc_url( admin_url( 'plugin-install.php?tab=search&type=term&s=' . esc_attr( strtolower( str_replace( ' ', '+', $_GET['requires'] ) ) ) ) ),
|
92 |
-
str_replace( '_', ' ', $_GET['requires'] )
|
93 |
-
), array( 'a' => array( 'href' => array() ), 'strong' => array(), 'b' => array(), 'em' => array() ) ) .
|
94 |
-
' <input type="button" class="button" value="' . esc_attr__( 'Hide this message', WYSIJA ) . '" onclick="document.location.href=\'' . esc_url( admin_url( 'admin.php?page=wysija_config#tab-add_ons' ) ) . '\';">' .
|
95 |
-
'</p>' .
|
96 |
-
'</div>';
|
97 |
-
}
|
98 |
-
|
99 |
-
// Display message once the add-on has been activated.
|
100 |
-
if ( $current_screen->parent_base == 'wysija_campaigns' && isset( $_GET['status'] ) && $_GET['status'] == 'activated' ){
|
101 |
-
echo '<div id="message" class="updated fade" style="display:block !important;"><p><strong>' . esc_attr( str_replace( '_', ' ', $_GET['add-on'] ) ) . '</strong> ' . esc_attr__( 'has been activated.', WYSIJA ) . '</p></div>';
|
102 |
-
}
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* This notifies the user that the add-on plugin
|
107 |
-
* is now deactivated and returns them back to the
|
108 |
-
* add-ons page.
|
109 |
-
*/
|
110 |
-
public function mailpoet_add_on_deactivated_notice(){
|
111 |
-
global $current_screen;
|
112 |
-
|
113 |
-
require_once ABSPATH . '/wp-admin/includes/plugin.php';
|
114 |
-
|
115 |
-
if ( isset( $_GET['action'] ) && $_GET['action'] == 'deactivate' && isset( $_GET['module'] ) ) {
|
116 |
-
$plugin = plugin_basename( $_GET['module'] );
|
117 |
-
$plugin_data = get_plugin_data( $this->wp_plugin_path . $plugin );
|
118 |
-
|
119 |
-
// Deactivate the add-on plugin.
|
120 |
-
deactivate_plugins( $plugin );
|
121 |
-
|
122 |
-
// Return back to add-on page.
|
123 |
-
$location = admin_url( 'admin.php?page=wysija_config&status=deactivated&add-on=' . esc_html( str_replace( ' ', '_', $plugin_data['Name'] ) ) . '#tab-add-ons' );
|
124 |
-
wp_safe_redirect( $location );
|
125 |
-
exit;
|
126 |
-
}
|
127 |
-
|
128 |
-
// Display message once the add-on has been deactivated.
|
129 |
-
if ( $current_screen->parent_base == 'wysija_campaigns' && isset( $_GET['status'] ) && $_GET['status'] == 'deactivated' ) {
|
130 |
-
echo '<div id="message" class="updated fade" style="display:block !important;"><p><strong>' . esc_attr( str_replace( '_', ' ', $_GET['add-on'] ) ) . '</strong> ' . esc_attr__( 'has been de-activated.', WYSIJA ) . '</p></div>';
|
131 |
-
}
|
132 |
-
|
133 |
-
}
|
134 |
-
|
135 |
-
/**
|
136 |
-
* Displays the add ons page and lists
|
137 |
-
* the plugins and services available.
|
138 |
-
*/
|
139 |
-
public function add_ons_page(){
|
140 |
-
require_once WYSIJA_DIR . '/add-ons/add-ons-list.php';
|
141 |
-
|
142 |
-
echo '<div class="module-container">';
|
143 |
-
foreach ( add_ons_list() as $plugin => $product ){
|
144 |
-
$status = ''; // Status class.
|
145 |
-
|
146 |
-
/**
|
147 |
-
* Queries if the plugin is installed,
|
148 |
-
* active and meets the requirements
|
149 |
-
* it requires if any.
|
150 |
-
*/
|
151 |
-
if ( file_exists( $this->wp_plugin_path . plugin_basename( $product['plugin_url'] ) ) ) {
|
152 |
-
$status .= ' installed';
|
153 |
-
} else {
|
154 |
-
$status .= ' not-installed';
|
155 |
-
}
|
156 |
-
|
157 |
-
if ( WYSIJA::is_plugin_active( $product['plugin_url'] ) ) {
|
158 |
-
$status .= ' active';
|
159 |
-
} else {
|
160 |
-
$status .= ' inactive';
|
161 |
-
}
|
162 |
-
|
163 |
-
if ( empty( $product['requires'] ) ) {
|
164 |
-
$status .= ' ready';
|
165 |
-
} elseif ( ! empty( $product['requires'] ) && file_exists( $this->wp_plugin_path . plugin_basename( $product['requires'] ) ) ) {
|
166 |
-
$status .= ' ready';
|
167 |
-
if ( WYSIJA::is_plugin_active( $product['requires'] ) ) {
|
168 |
-
$status .= ' ready';
|
169 |
-
} else {
|
170 |
-
$status .= ' not-ready';
|
171 |
-
}
|
172 |
-
} elseif ( ! empty( $product['requires'] ) && ! file_exists( $this->wp_plugin_path . plugin_basename( $product['requires'] ) ) ) {
|
173 |
-
$status .= ' not-ready';
|
174 |
-
}
|
175 |
-
|
176 |
-
if ( WYSIJA::is_plugin_active( 'wysija-newsletters-premium/index.php' ) ) {
|
177 |
-
$status .= ' premium-active';
|
178 |
-
}
|
179 |
-
|
180 |
-
echo
|
181 |
-
'<div class="mailpoet-module' . esc_attr( $status ) . '" id="product">' .
|
182 |
-
'<h3>' . esc_attr( $product['name'] ) . '</h3>';
|
183 |
-
|
184 |
-
if ( ! empty( $product['thumbnail'] ) ) {
|
185 |
-
echo '<div class="mailpoet-module-image"><img src="' . esc_url( $this->image_url . $product['thumbnail'] ) . '" width="100%" title="' . esc_attr( $product['name'] ) . '" alt=""></div>';
|
186 |
-
}
|
187 |
-
|
188 |
-
echo
|
189 |
-
'<div class="mailpoet-module-content">' .
|
190 |
-
'<div class="mailpoet-module-description">' .
|
191 |
-
'<p>' . wp_kses( $product['description'], array() ) . '</p>';
|
192 |
-
|
193 |
-
if ( ! empty( $product['review'] ) ) {
|
194 |
-
echo '<p><strong>' . esc_attr__( 'MailPoet says: ', WYSIJA ) . '<em>' . esc_attr( $product['review'] ) . '</em>' . '</strong></p>';
|
195 |
-
}
|
196 |
-
|
197 |
-
if ( WYSIJA::is_plugin_active( 'wysija-newsletters-premium/index.php' ) && ! empty( $product['premium_offer'] ) ) {
|
198 |
-
echo '<p><strong>' . esc_attr( $product['premium_offer'] ) . '</strong></p>';
|
199 |
-
}
|
200 |
-
echo
|
201 |
-
'</div>' .
|
202 |
-
'</div>' .
|
203 |
-
|
204 |
-
'<div class="mailpoet-module-actions">';
|
205 |
-
|
206 |
-
if ( ! empty( $product['author_url'] ) ) {
|
207 |
-
echo '<a href="' . esc_url( $product['author_url'] ) . '" target="_blank" rel="external" class="button-primary website">' . esc_attr__( 'Website', WYSIJA ) . '</a> ';
|
208 |
-
}
|
209 |
-
|
210 |
-
if ( $product['free'] == false && ! empty( $product['purchase_url'] ) ) {
|
211 |
-
if ( ! empty( $product['plugin_url'] ) && ! file_exists( $this->wp_plugin_path . plugin_basename( $product['plugin_url'] ) ) ) {
|
212 |
-
echo '<a href="' . esc_url( $product['purchase_url'] ) . '" target="_blank" rel="external" class="button-primary purchase">' . esc_attr__( 'Purchase', WYSIJA ) . '</a> ';
|
213 |
-
} // end if plugin is installed, don't show purchase button.
|
214 |
-
} // end if product is not free.
|
215 |
-
|
216 |
-
if ( $product['service'] == false ){
|
217 |
-
if ( $product['on_wordpress.org'] == true ){
|
218 |
-
if ( ! file_exists( $this->wp_plugin_path . plugin_basename( $product['plugin_url'] ) ) ) {
|
219 |
-
echo '<a href="' . esc_url( admin_url( 'plugin-install.php?tab=search&type=term&s=' . strtolower( str_replace( ' ', '+', $product['search'] ) ) ) ) . '" class="button-primary install">' . esc_attr__( 'Install from WordPress.org', WYSIJA ) . '</a> ';
|
220 |
-
}
|
221 |
-
} // end if $product['on_wordpress.org'];
|
222 |
-
|
223 |
-
if ( ! empty( $product['plugin_url'] ) && file_exists( $this->wp_plugin_path . plugin_basename( $product['plugin_url'] ) ) ) {
|
224 |
-
if ( ! WYSIJA::is_plugin_active( $product['plugin_url'] ) ) {
|
225 |
-
if ( ! empty( $product['requires'] ) ) {
|
226 |
-
$requires = '&requires=' . $product['requires'] . '&requires_name=' . $product['requires_name'];
|
227 |
-
} else {
|
228 |
-
$requires = '';
|
229 |
-
}
|
230 |
-
echo '<a href="' . esc_url( admin_url( 'admin.php?page=wysija_config&action=activate&module=' . $product['plugin_url'] . $requires ) ) . '" class="button-primary activate">' . esc_attr__( 'Activate', WYSIJA ) . '</a> ';
|
231 |
-
} else {
|
232 |
-
if ( ! empty( $product['config_url'] ) ) {
|
233 |
-
echo '<a href="' . esc_url( $product['config_url'] ) . '" class="mailpoet-configure-button button-secondary">' . esc_attr__( 'Configure', WYSIJA ) . '</a>';
|
234 |
-
}
|
235 |
-
}
|
236 |
-
}
|
237 |
-
}
|
238 |
-
|
239 |
-
echo
|
240 |
-
'</div>' .
|
241 |
-
'</div>';
|
242 |
-
} // end if local is yes.
|
243 |
-
|
244 |
-
echo
|
245 |
-
'<div class="submit-idea">' .
|
246 |
-
'<p>' . wp_kses( sprintf( __( 'Don\'t see the add-on you\'re looking for? <a href="%s">Submit it</a> in our contact form.', WYSIJA ), 'http://www.mailpoet.com/contact/" target="blank' ), array( 'a' => array( 'href' => array() ) ) ) . '</p>' .
|
247 |
-
'</div>' .
|
248 |
-
'</div>';
|
249 |
-
}
|
250 |
-
} // end class
|
251 |
-
|
252 |
-
/**
|
253 |
-
* This loads the add ons class and displays the page.
|
254 |
-
*
|
255 |
-
* @init_mail_poet_add_ons();
|
256 |
-
* @add_ons_page();
|
257 |
-
*/
|
258 |
-
function load_add_ons_manager(){
|
259 |
-
$mailpoet_add_ons = new MailPoet_Add_ons();
|
260 |
-
$mailpoet_add_ons->init_mail_poet_add_ons();
|
261 |
-
$mailpoet_add_ons->add_ons_page();
|
262 |
-
}
|
263 |
-
load_add_ons_manager();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_Analytics.php
CHANGED
@@ -1,793 +1,347 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
|
4 |
-
Class Analytics.
|
5 |
-
|
6 |
-
It
|
7 |
-
|
8 |
-
$analytics->generate_data();
|
9 |
-
$analytics->send();
|
10 |
*/
|
11 |
class WJ_Analytics {
|
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 |
-
'archive_page' => array(
|
88 |
-
'label' => 'Archive Page',
|
89 |
-
'value' => ''
|
90 |
-
),
|
91 |
-
'dkim_status' => array(
|
92 |
-
'label' => 'DKIM Active',
|
93 |
-
'value' => ''
|
94 |
-
),
|
95 |
-
'subscribe_in_comments' => array(
|
96 |
-
'label' => 'Subscribe in comments',
|
97 |
-
'value' => ''
|
98 |
-
),
|
99 |
-
'subscribe_on_register' => array(
|
100 |
-
'label' => 'Subscribe on registration',
|
101 |
-
'value' => ''
|
102 |
-
),
|
103 |
-
'browser_link' => array(
|
104 |
-
'label' => 'View in browser link',
|
105 |
-
'value' => ''
|
106 |
-
),
|
107 |
-
'profile_edit'=> array(
|
108 |
-
'label' => 'Subcsribers can edit profile',
|
109 |
-
'value' => ''
|
110 |
-
),
|
111 |
-
'html_edit' => array(
|
112 |
-
'label' => 'Allow HTML edit',
|
113 |
-
'value' => ''
|
114 |
-
),
|
115 |
-
'mailpoet_cron' => array(
|
116 |
-
'label' => 'MailPoet Cron Enabled',
|
117 |
-
'value' => ''
|
118 |
-
),
|
119 |
-
'forms_number' => array(
|
120 |
-
'label' => 'Total number of forms',
|
121 |
-
'value' => ''
|
122 |
-
),
|
123 |
-
'using_custom_fields' => array(
|
124 |
-
'label' => 'Using custom fields',
|
125 |
-
'value' => ''
|
126 |
-
),
|
127 |
-
'custom_fields_input' => array(
|
128 |
-
'label' => 'Custom Fields: Input field',
|
129 |
-
'value' => ''
|
130 |
-
),
|
131 |
-
'custom_fields_textarea' => array(
|
132 |
-
'label' => 'Custom Fields: Textarea',
|
133 |
-
'value' => ''
|
134 |
-
),
|
135 |
-
'custom_fields_select' => array(
|
136 |
-
'label' => 'Custom Fields: Select',
|
137 |
-
'value' => ''
|
138 |
-
),
|
139 |
-
'custom_fields_checkbox' => array(
|
140 |
-
'label' => 'Custom Fields: Checkbox',
|
141 |
-
'value' => ''
|
142 |
-
),
|
143 |
-
'custom_fields_radio' => array(
|
144 |
-
'label' => 'Custom Fields: Radio',
|
145 |
-
'value' => ''
|
146 |
-
),
|
147 |
-
'active_last_week' => array(
|
148 |
-
'label' => 'Active last week',
|
149 |
-
'value' => ''
|
150 |
-
),
|
151 |
-
'is_multisite' => array(
|
152 |
-
'label' => 'Using Multisite',
|
153 |
-
'value' => ''
|
154 |
-
)
|
155 |
-
);
|
156 |
-
|
157 |
-
function __construct() {
|
158 |
-
|
159 |
-
}
|
160 |
-
|
161 |
-
/**
|
162 |
-
* Send data to Mixpanel by enqueuing the analytics JS file.
|
163 |
-
* @return
|
164 |
-
*/
|
165 |
-
public function send() {
|
166 |
-
|
167 |
-
// Enqueue analytics Javascript.
|
168 |
-
wp_enqueue_script('analytics', WYSIJA_URL . 'js/analytics.js', array(), WYSIJA::get_version());
|
169 |
-
// Make analytics data available in JS.
|
170 |
-
wp_localize_script('analytics', 'analytics_data', $this->analytics_data);
|
171 |
-
}
|
172 |
-
|
173 |
-
/**
|
174 |
-
* Generate fresh data and store it in the $analytics_data Class property.
|
175 |
-
* @return
|
176 |
-
*/
|
177 |
-
public function generate_data() {
|
178 |
-
|
179 |
-
foreach ($this->analytics_data as $key => $data) {
|
180 |
-
$method = $key;
|
181 |
-
$this->analytics_data[$key]['value'] = $this->$method();
|
182 |
-
}
|
183 |
-
|
184 |
-
}
|
185 |
-
|
186 |
-
/**
|
187 |
-
* Calculate Emails sent in the last 30 days.
|
188 |
-
* @return Int
|
189 |
-
*/
|
190 |
-
private function monthly_emails_sent() {
|
191 |
-
|
192 |
-
$model_email_user_stat = WYSIJA::get('email_user_stat', 'model');
|
193 |
-
$query = 'SELECT COUNT(*) as total_emails
|
194 |
-
FROM ' . '[wysija]' . $model_email_user_stat->table_name . '
|
195 |
WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= sent_at';
|
196 |
-
|
197 |
-
|
198 |
-
$total_emails = $result[0]['total_emails'];
|
199 |
-
switch (true) {
|
200 |
-
case ($total_emails <= 1000):
|
201 |
-
$track = 'Less than 1000';
|
202 |
-
break;
|
203 |
-
case ((1001 <= $total_emails) && ($total_emails <= 2500)):
|
204 |
-
$track = '1001 to 2500';
|
205 |
-
break;
|
206 |
-
case ((2501 <= $total_emails) && ($total_emails <= 5000)):
|
207 |
-
$track = '2501 to 5000';
|
208 |
-
break;
|
209 |
-
case ((5001 <= $total_emails) && ($total_emails <= 10000)):
|
210 |
-
$track = '5001 to 10000';
|
211 |
-
break;
|
212 |
-
case ((10001 <= $total_emails) && ($total_emails <= 25000)):
|
213 |
-
$track = '10001 to 25000';
|
214 |
-
break;
|
215 |
-
case ((25001 <= $total_emails) && ($total_emails <= 50000)):
|
216 |
-
$track = '25001 to 50000';
|
217 |
-
break;
|
218 |
-
case ((50001 <= $total_emails) && ($total_emails <= 100000)):
|
219 |
-
$track = '50001 to 100000';
|
220 |
-
break;
|
221 |
-
case (100001 <= $total_emails):
|
222 |
-
$track = 'More than 100001';
|
223 |
-
break;
|
224 |
-
default:
|
225 |
-
$track = 'No emails sent';
|
226 |
-
break;
|
227 |
-
}
|
228 |
-
|
229 |
-
return $track;
|
230 |
-
|
231 |
-
}
|
232 |
-
|
233 |
-
/*
|
234 |
-
Pass through the WordPress version.
|
235 |
-
*/
|
236 |
-
private function wordpress_version() {
|
237 |
-
return get_bloginfo('version');
|
238 |
-
}
|
239 |
|
240 |
-
|
241 |
-
Pass through the WordPress language.
|
242 |
-
*/
|
243 |
-
private function wordpress_language() {
|
244 |
-
return get_bloginfo('language');
|
245 |
-
}
|
246 |
|
247 |
-
|
248 |
-
The plugin version.
|
249 |
-
*/
|
250 |
-
private function plugin_version() {
|
251 |
-
return WYSIJA::get_version();
|
252 |
-
}
|
253 |
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
|
260 |
-
|
261 |
-
|
262 |
-
FROM ' . '[wysija]' . $model_user_list->table_name
|
263 |
GROUP BY list_id
|
264 |
HAVING COUNT(*) >= 25';
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
return $lists_count;
|
269 |
-
}
|
270 |
|
271 |
-
|
272 |
-
* Calculate total subscribers.
|
273 |
-
* @return Int
|
274 |
-
*/
|
275 |
-
private function total_subcsribers() {
|
276 |
|
277 |
-
|
278 |
-
$query = 'SELECT COUNT(*) as total_subscribers
|
279 |
-
FROM ' . '[wysija]' . $model_user->table_name;
|
280 |
-
$result = $model_user->query('get_res', $query);
|
281 |
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
* @return Int
|
288 |
-
*/
|
289 |
-
private function confirmed_subscribers() {
|
290 |
|
291 |
-
|
292 |
-
|
293 |
-
FROM ' . '[wysija]' . $model_user->table_name
|
294 |
WHERE status = 1';
|
295 |
-
|
296 |
|
297 |
-
|
298 |
-
$total_subscribers = $this->total_subcsribers();
|
299 |
-
$confirmed_percentage = round(($confirmed_subscribers * 100) / $total_subscribers);
|
300 |
|
301 |
-
|
302 |
-
}
|
303 |
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
|
310 |
-
|
311 |
-
|
312 |
-
FROM ' . '[wysija]' . $model_user->table_name
|
313 |
WHERE status = 0';
|
314 |
-
|
315 |
|
316 |
-
|
317 |
-
}
|
318 |
|
319 |
-
|
320 |
-
* Calculate standard newsletters total.
|
321 |
-
* @return Int
|
322 |
-
*/
|
323 |
-
private function standard_newsletters() {
|
324 |
|
325 |
-
|
326 |
-
|
327 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
328 |
WHERE type = 1
|
329 |
AND status = 2';
|
330 |
-
|
331 |
|
332 |
-
|
333 |
-
}
|
334 |
|
335 |
-
|
336 |
-
* Calculate auto newsletters total.
|
337 |
-
* @return Int
|
338 |
-
*/
|
339 |
-
private function auto_newsletters() {
|
340 |
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
* @return String Free | Premium
|
353 |
-
*/
|
354 |
-
private function license_type() {
|
355 |
|
356 |
-
|
357 |
-
$is_premium = $model_config->getValue('premium_key');
|
358 |
|
359 |
-
|
360 |
-
$license_type = 'Premium';
|
361 |
-
} else {
|
362 |
-
$license_type = 'Free';
|
363 |
-
}
|
364 |
|
365 |
-
|
366 |
-
|
|
|
|
|
|
|
367 |
|
368 |
-
|
369 |
-
|
370 |
-
* @return String
|
371 |
-
*/
|
372 |
-
private function sending_method() {
|
373 |
|
374 |
-
|
375 |
-
|
|
|
|
|
376 |
}
|
377 |
|
378 |
-
|
379 |
-
* Get smtp hostname in use.
|
380 |
-
* @return String
|
381 |
-
*/
|
382 |
-
private function smtp_hostname() {
|
383 |
|
384 |
-
|
385 |
-
return $model_config->getValue('smtp_host');
|
386 |
-
}
|
387 |
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
|
394 |
-
|
395 |
-
|
396 |
|
397 |
-
|
398 |
-
$result = 'On';
|
399 |
-
} else {
|
400 |
-
$result = 'Off';
|
401 |
-
}
|
402 |
|
403 |
-
|
404 |
-
|
|
|
|
|
|
|
405 |
|
406 |
-
|
407 |
-
|
408 |
-
* @return String Yes | No
|
409 |
-
*/
|
410 |
-
private function dkim_status() {
|
411 |
-
$model_config = WYSIJA::get('config', 'model');
|
412 |
-
$dkim_status = $model_config->getValue('dkim_active');
|
413 |
-
if ($dkim_status === 1) {
|
414 |
-
$result = 'Yes';
|
415 |
-
} else {
|
416 |
-
$result = 'No';
|
417 |
-
}
|
418 |
-
return $result;
|
419 |
-
}
|
420 |
|
421 |
-
|
422 |
-
* Get subscribe in comments.
|
423 |
-
* @return String Yes | No
|
424 |
-
*/
|
425 |
-
private function subscribe_in_comments() {
|
426 |
-
$model_config = WYSIJA::get('config', 'model');
|
427 |
-
$subscribe_in_comments = $model_config->getValue('commentform');
|
428 |
-
if ($subscribe_in_comments == 1) {
|
429 |
-
$result = 'Yes';
|
430 |
-
} else {
|
431 |
-
$result = 'No';
|
432 |
-
}
|
433 |
-
return $result;
|
434 |
-
}
|
435 |
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
$model_config = WYSIJA::get('config', 'model');
|
442 |
-
$subscribe_on_register = $model_config->getValue('registerform');
|
443 |
-
if ($subscribe_on_register == 1) {
|
444 |
-
$result = 'Yes';
|
445 |
-
} else {
|
446 |
-
$result = 'No';
|
447 |
-
}
|
448 |
-
return $result;
|
449 |
-
}
|
450 |
|
451 |
-
|
452 |
-
|
453 |
-
* @return String Yes | No
|
454 |
-
*/
|
455 |
-
private function browser_link() {
|
456 |
-
$model_config = WYSIJA::get('config', 'model');
|
457 |
-
$browser_link = $model_config->getValue('viewinbrowser');
|
458 |
-
if ($browser_link == 1) {
|
459 |
-
$result = 'Yes';
|
460 |
-
} else {
|
461 |
-
$result = 'No';
|
462 |
-
}
|
463 |
-
return $result;
|
464 |
-
}
|
465 |
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
private function profile_edit() {
|
471 |
-
$model_config = WYSIJA::get('config', 'model');
|
472 |
-
$profile_edit = $model_config->getValue('manage_subscriptions');
|
473 |
-
if ($profile_edit == 1) {
|
474 |
-
$result = 'Yes';
|
475 |
-
} else {
|
476 |
-
$result = 'No';
|
477 |
-
}
|
478 |
-
return $result;
|
479 |
}
|
480 |
|
481 |
-
|
482 |
-
* Get html edit in newsletter option.
|
483 |
-
* @return String Yes | No
|
484 |
-
*/
|
485 |
-
private function html_edit() {
|
486 |
-
$model_config = WYSIJA::get('config', 'model');
|
487 |
-
$html_edit = $model_config->getValue('html_source');
|
488 |
-
if ($html_edit == 1) {
|
489 |
-
$result = 'Yes';
|
490 |
-
} else {
|
491 |
-
$result = 'No';
|
492 |
-
}
|
493 |
-
return $result;
|
494 |
-
}
|
495 |
|
496 |
-
|
497 |
-
* Get mailpoet cron option.
|
498 |
-
* @return String Yes | No
|
499 |
-
*/
|
500 |
-
private function mailpoet_cron() {
|
501 |
-
$model_config = WYSIJA::get('config', 'model');
|
502 |
-
$cron_option = $model_config->getValue('cron_manual');
|
503 |
-
if ($cron_option == 1) {
|
504 |
-
$result = 'Yes';
|
505 |
-
} else {
|
506 |
-
$result = 'No';
|
507 |
-
}
|
508 |
-
return $result;
|
509 |
-
}
|
510 |
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
|
517 |
-
|
518 |
-
|
519 |
-
FROM ' . '[wysija]' . $model_email_user_stat->table_name
|
520 |
WHERE status = 1';
|
521 |
-
|
522 |
-
|
523 |
-
$opened_emails = $result[0]['opened_emails'];
|
524 |
-
$total_emails = $this->total_emails_sent();
|
525 |
-
|
526 |
-
if ($total_emails == 0) {
|
527 |
-
$average_open_rate = 0;
|
528 |
-
} else {
|
529 |
-
$average_open_rate = round(($opened_emails * 100) / $total_emails);
|
530 |
-
}
|
531 |
-
|
532 |
-
return $average_open_rate;
|
533 |
-
}
|
534 |
-
|
535 |
-
/**
|
536 |
-
* Calculate average click rate.
|
537 |
-
* @return String opened/total
|
538 |
-
*/
|
539 |
-
private function average_click_rate() {
|
540 |
-
|
541 |
-
$model_email_user_stat = WYSIJA::get('email_user_stat', 'model');
|
542 |
-
$query = 'SELECT COUNT(*) as clicked_emails
|
543 |
-
FROM ' . '[wysija]' . $model_email_user_stat->table_name . '
|
544 |
-
WHERE status = 2';
|
545 |
-
$result = $model_email_user_stat->query('get_res', $query);
|
546 |
|
547 |
-
|
548 |
-
|
549 |
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
}
|
555 |
-
|
556 |
-
return $average_click_rate;
|
557 |
}
|
558 |
|
559 |
-
|
560 |
-
* Get all emails sent.
|
561 |
-
* @return Int
|
562 |
-
*/
|
563 |
-
private function total_emails_sent() {
|
564 |
-
|
565 |
-
$model_email_user_stat = WYSIJA::get('email_user_stat', 'model');
|
566 |
-
$query = 'SELECT COUNT(*) as all_emails
|
567 |
-
FROM ' . '[wysija]' . $model_email_user_stat->table_name . '';
|
568 |
-
$result = $model_email_user_stat->query('get_res', $query);
|
569 |
|
570 |
-
|
571 |
-
}
|
572 |
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
|
|
583 |
|
584 |
-
|
585 |
-
|
586 |
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
public function industry() {
|
592 |
-
$model_config = WYSIJA::get('config', 'model');
|
593 |
-
return $model_config->getValue('industry');
|
594 |
}
|
595 |
|
596 |
-
|
597 |
-
* Get if is using right to left language.
|
598 |
-
* @return String
|
599 |
-
*/
|
600 |
-
private function rtl() {
|
601 |
|
602 |
-
|
603 |
-
$is_rtl = 'Yes';
|
604 |
-
} else {
|
605 |
-
$is_rtl = 'No';
|
606 |
-
}
|
607 |
|
608 |
-
return $is_rtl;
|
609 |
-
}
|
610 |
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
}
|
622 |
|
623 |
-
|
624 |
-
}
|
625 |
|
626 |
-
|
627 |
-
* Get if is using beta mode
|
628 |
-
* @return String
|
629 |
-
*/
|
630 |
-
private function beta() {
|
631 |
|
632 |
-
|
|
|
|
|
|
|
|
|
633 |
|
634 |
-
|
635 |
-
$is_beta = 'Yes';
|
636 |
-
} else {
|
637 |
-
$is_beta = 'No';
|
638 |
-
}
|
639 |
|
640 |
-
|
641 |
-
}
|
642 |
|
643 |
-
|
644 |
-
* Checks if user used the archive page feature.
|
645 |
-
* @return String true | false
|
646 |
-
*/
|
647 |
-
private function archive_page() {
|
648 |
|
649 |
-
|
650 |
-
|
|
|
|
|
|
|
651 |
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
}
|
657 |
-
|
658 |
-
return $used_archive;
|
659 |
}
|
660 |
|
661 |
-
|
662 |
-
Check if user is using custom fields or not.
|
663 |
-
# => Yes | No
|
664 |
-
*/
|
665 |
-
private function using_custom_fields() {
|
666 |
-
$fields = WJ_Field::get_all();
|
667 |
-
if ($fields != null) {
|
668 |
-
$result = 'Yes';
|
669 |
-
} else {
|
670 |
-
$result = 'No';
|
671 |
-
}
|
672 |
-
return $result;
|
673 |
-
}
|
674 |
|
675 |
-
|
676 |
-
How many input custom fields are in use.
|
677 |
-
# => int | null
|
678 |
-
*/
|
679 |
-
private function custom_fields_input() {
|
680 |
-
global $wpdb;
|
681 |
-
$field = new WJ_Field();
|
682 |
-
$table_name = $field->get_table_name();
|
683 |
-
$result = $wpdb->get_var(
|
684 |
-
"SELECT COUNT(*) as inputs
|
685 |
-
FROM $table_name
|
686 |
-
WHERE type = 'input'"
|
687 |
-
);
|
688 |
-
if ($result == null) {
|
689 |
-
$result = '0';
|
690 |
-
}
|
691 |
-
return $result;
|
692 |
-
}
|
693 |
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
global $wpdb;
|
700 |
-
$field = new WJ_Field();
|
701 |
-
$table_name = $field->get_table_name();
|
702 |
-
$result = $wpdb->get_var(
|
703 |
-
"SELECT COUNT(*) as textareas
|
704 |
-
FROM $table_name
|
705 |
-
WHERE type = 'textarea'"
|
706 |
-
);
|
707 |
-
if ($result == null) {
|
708 |
-
$result = '0';
|
709 |
-
}
|
710 |
-
return $result;
|
711 |
-
}
|
712 |
|
713 |
-
|
714 |
-
How many select custom fields are in use.
|
715 |
-
# => int | null
|
716 |
-
*/
|
717 |
-
private function custom_fields_select() {
|
718 |
-
global $wpdb;
|
719 |
-
$field = new WJ_Field();
|
720 |
-
$table_name = $field->get_table_name();
|
721 |
-
$result = $wpdb->get_var(
|
722 |
-
"SELECT COUNT(*) as selects
|
723 |
-
FROM $table_name
|
724 |
-
WHERE type = 'select'"
|
725 |
-
);
|
726 |
-
if ($result == null) {
|
727 |
-
$result = '0';
|
728 |
-
}
|
729 |
-
return $result;
|
730 |
-
}
|
731 |
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
private function custom_fields_checkbox() {
|
737 |
-
global $wpdb;
|
738 |
-
$field = new WJ_Field();
|
739 |
-
$table_name = $field->get_table_name();
|
740 |
-
$result = $wpdb->get_var(
|
741 |
-
"SELECT COUNT(*) as checkboxes
|
742 |
-
FROM $table_name
|
743 |
-
WHERE type = 'checkbox'"
|
744 |
-
);
|
745 |
-
if ($result == null) {
|
746 |
-
$result = '0';
|
747 |
-
}
|
748 |
-
return $result;
|
749 |
}
|
750 |
|
751 |
-
|
752 |
-
How many checkbox custom fields are in use.
|
753 |
-
# => int | null
|
754 |
-
*/
|
755 |
-
private function custom_fields_radio() {
|
756 |
-
global $wpdb;
|
757 |
-
$field = new WJ_Field();
|
758 |
-
$table_name = $field->get_table_name();
|
759 |
-
$result = $wpdb->get_var(
|
760 |
-
"SELECT COUNT(*) as radios
|
761 |
-
FROM $table_name
|
762 |
-
WHERE type = 'radio'"
|
763 |
-
);
|
764 |
-
if ($result == null) {
|
765 |
-
$result = '0';
|
766 |
-
}
|
767 |
-
return $result;
|
768 |
-
}
|
769 |
|
770 |
-
|
771 |
-
Check if user has been active in the last week.
|
772 |
-
This means he sent at least one email.
|
773 |
-
# => Yes | No
|
774 |
-
*/
|
775 |
-
private function active_last_week() {
|
776 |
-
global $wpdb;
|
777 |
-
$model_stats = WYSIJA::get('email_user_stat', 'model');
|
778 |
-
$table_name = '[wysija]' . $model_stats->table_name;
|
779 |
-
|
780 |
-
$query = 'SELECT COUNT(*) as activities
|
781 |
-
FROM ' . $table_name .
|
782 |
-
' WHERE sent_at > UNIX_TIMESTAMP(date_sub(now(), interval 1 week))';
|
783 |
-
|
784 |
-
$result = $model_stats->query('get_res', $query);
|
785 |
-
$result = $result[0]['activities'];
|
786 |
-
|
787 |
-
if ($result > 0) {
|
788 |
-
return 'Yes';
|
789 |
-
}
|
790 |
-
return 'No';
|
791 |
-
}
|
792 |
|
793 |
-
}
|
1 |
<?php
|
2 |
|
3 |
+
/**
|
4 |
+
* Class Analytics.
|
5 |
+
*
|
6 |
+
* It's a sort of useful stats and numbers generator about Wysija usage.
|
7 |
+
* It also handles the MixPanel integration.
|
|
|
|
|
8 |
*/
|
9 |
class WJ_Analytics {
|
10 |
|
11 |
+
// Array: store all analytics data to be sent to JS.
|
12 |
+
private $analytics_data = array(
|
13 |
+
'monthly_emails_sent' => '',
|
14 |
+
'lists_with_more_than_25' => '',
|
15 |
+
'confirmed_subscribers' => '',
|
16 |
+
'unconfirmed_subscribers' => '',
|
17 |
+
'standard_newsletters' => '',
|
18 |
+
'auto_newsletters' => '',
|
19 |
+
'wordpress_version' => '',
|
20 |
+
'plugin_version' => '',
|
21 |
+
'license_type' => '',
|
22 |
+
'sending_method' => '',
|
23 |
+
'smtp_hostname' => '',
|
24 |
+
'activation_email_status' => '',
|
25 |
+
'average_open_rate' => '',
|
26 |
+
'average_click_rate' => '',
|
27 |
+
'industry' => '',
|
28 |
+
'wordpress_language' => '',
|
29 |
+
'rtl' => '',
|
30 |
+
'beta' =>''
|
31 |
+
);
|
32 |
+
|
33 |
+
function __construct() {
|
34 |
+
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Send data to Mixpanel by enqueuing the analytics JS file.
|
39 |
+
* @return
|
40 |
+
*/
|
41 |
+
public function send() {
|
42 |
+
|
43 |
+
// Enqueue analytics Javascript.
|
44 |
+
wp_enqueue_script('analytics', WYSIJA_URL.'js/analytics.js',array(),WYSIJA::get_version());
|
45 |
+
// Make analytics data available in JS.
|
46 |
+
wp_localize_script('analytics', 'analytics_data', $this->analytics_data);
|
47 |
+
|
48 |
+
}
|
49 |
+
|
50 |
+
/**
|
51 |
+
* Generate fresh data and store it in the $analytics_data Class property.
|
52 |
+
* @return
|
53 |
+
*/
|
54 |
+
public function generate_data() {
|
55 |
+
|
56 |
+
$this->analytics_data['monthly_emails_sent'] = $this->get_monthly_emails_sent();
|
57 |
+
$this->analytics_data['lists_with_more_than_25'] = $this->get_lists_with_more_than_25();
|
58 |
+
$this->analytics_data['confirmed_subscribers'] = $this->get_confirmed_subscribers();
|
59 |
+
$this->analytics_data['unconfirmed_subscribers'] = $this->get_unconfirmed_subscribers();
|
60 |
+
$this->analytics_data['standard_newsletters'] = $this->get_standard_newsletters();
|
61 |
+
$this->analytics_data['auto_newsletters'] = $this->get_auto_newsletters();
|
62 |
+
$this->analytics_data['wordpress_version'] = get_bloginfo('version');
|
63 |
+
$this->analytics_data['plugin_version'] = WYSIJA::get_version();
|
64 |
+
$this->analytics_data['license_type'] = $this->get_license_type();
|
65 |
+
$this->analytics_data['sending_method'] = $this->get_sending_method();
|
66 |
+
$this->analytics_data['smtp_hostname'] = $this->get_smtp_hostname();
|
67 |
+
$this->analytics_data['activation_email_status'] = $this->get_activation_email_status();
|
68 |
+
$this->analytics_data['average_open_rate'] = $this->get_average_open_rate();
|
69 |
+
$this->analytics_data['average_click_rate'] = $this->get_average_click_rate();
|
70 |
+
$this->analytics_data['industry'] = $this->get_industry();
|
71 |
+
$this->analytics_data['wordpress_language'] = get_bloginfo('language');
|
72 |
+
$this->analytics_data['rtl'] = $this->get_rtl();
|
73 |
+
$this->analytics_data['beta'] = $this->get_beta();
|
74 |
+
}
|
75 |
+
|
76 |
+
/**
|
77 |
+
* Calculate Emails sent in the last 30 days.
|
78 |
+
* @return Int
|
79 |
+
*/
|
80 |
+
private function get_monthly_emails_sent() {
|
81 |
+
|
82 |
+
$model_email_user_stat = WYSIJA::get('email_user_stat','model');
|
83 |
+
$query = 'SELECT COUNT(*) as total_emails
|
84 |
+
FROM ' . '[wysija]' . $model_email_user_stat->table_name. '
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= sent_at';
|
86 |
+
$result = $model_email_user_stat->query('get_res', $query);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
87 |
|
88 |
+
return $result[0]['total_emails'];
|
|
|
|
|
|
|
|
|
|
|
89 |
|
90 |
+
}
|
|
|
|
|
|
|
|
|
|
|
91 |
|
92 |
+
/**
|
93 |
+
* Calculate lists with more than 25 subscribers.
|
94 |
+
* @return Int
|
95 |
+
*/
|
96 |
+
private function get_lists_with_more_than_25() {
|
97 |
|
98 |
+
$model_user_list = WYSIJA::get('user_list','model');
|
99 |
+
$query = 'SELECT list_id, COUNT(*) as count
|
100 |
+
FROM ' . '[wysija]' . $model_user_list->table_name. '
|
101 |
GROUP BY list_id
|
102 |
HAVING COUNT(*) >= 25';
|
103 |
+
$result = $model_user_list->query('get_res', $query);
|
104 |
+
$lists_count = count($result);
|
|
|
|
|
|
|
105 |
|
106 |
+
return $lists_count;
|
|
|
|
|
|
|
|
|
107 |
|
108 |
+
}
|
|
|
|
|
|
|
109 |
|
110 |
+
/**
|
111 |
+
* Calculate confirmed subscribers.
|
112 |
+
* @return Int
|
113 |
+
*/
|
114 |
+
private function get_confirmed_subscribers() {
|
|
|
|
|
|
|
115 |
|
116 |
+
$model_user = WYSIJA::get('user','model');
|
117 |
+
$query = 'SELECT COUNT(*) as confirmed_subscribers
|
118 |
+
FROM ' . '[wysija]' . $model_user->table_name. '
|
119 |
WHERE status = 1';
|
120 |
+
$result = $model_user->query('get_res', $query);
|
121 |
|
122 |
+
return $result[0]['confirmed_subscribers'];
|
|
|
|
|
123 |
|
124 |
+
}
|
|
|
125 |
|
126 |
+
/**
|
127 |
+
* Calculate unconfirmed subscribers.
|
128 |
+
* @return Int
|
129 |
+
*/
|
130 |
+
public function get_unconfirmed_subscribers() {
|
131 |
|
132 |
+
$model_user = WYSIJA::get('user','model');
|
133 |
+
$query = 'SELECT COUNT(*) as unconfirmed_subscribers
|
134 |
+
FROM ' . '[wysija]' . $model_user->table_name. '
|
135 |
WHERE status = 0';
|
136 |
+
$result = $model_user->query('get_res', $query);
|
137 |
|
138 |
+
return $result[0]['unconfirmed_subscribers'];
|
|
|
139 |
|
140 |
+
}
|
|
|
|
|
|
|
|
|
141 |
|
142 |
+
/**
|
143 |
+
* Calculate standard newsletters total.
|
144 |
+
* @return Int
|
145 |
+
*/
|
146 |
+
private function get_standard_newsletters() {
|
147 |
+
|
148 |
+
$model_email = WYSIJA::get('email','model');
|
149 |
+
$query = 'SELECT COUNT(*) as standard_newsletters
|
150 |
+
FROM ' . '[wysija]' . $model_email->table_name. '
|
151 |
WHERE type = 1
|
152 |
AND status = 2';
|
153 |
+
$result = $model_email->query('get_res', $query);
|
154 |
|
155 |
+
return $result[0]['standard_newsletters'];
|
|
|
156 |
|
157 |
+
}
|
|
|
|
|
|
|
|
|
158 |
|
159 |
+
/**
|
160 |
+
* Calculate auto newsletters total.
|
161 |
+
* @return Int
|
162 |
+
*/
|
163 |
+
private function get_auto_newsletters() {
|
164 |
|
165 |
+
$model_email = WYSIJA::get('email','model');
|
166 |
+
$query = 'SELECT COUNT(*) as auto_newsletters
|
167 |
+
FROM ' . '[wysija]' . $model_email->table_name. '
|
168 |
+
WHERE type = 2';
|
169 |
+
$result = $model_email->query('get_res', $query);
|
|
|
|
|
|
|
170 |
|
171 |
+
return $result[0]['auto_newsletters'];
|
|
|
172 |
|
173 |
+
}
|
|
|
|
|
|
|
|
|
174 |
|
175 |
+
/**
|
176 |
+
* Check license type in use.
|
177 |
+
* @return String Free | Premium
|
178 |
+
*/
|
179 |
+
private function get_license_type() {
|
180 |
|
181 |
+
$model_config = WYSIJA::get('config','model');
|
182 |
+
$is_premium = $model_config->getValue('premium_key');
|
|
|
|
|
|
|
183 |
|
184 |
+
if ($is_premium) {
|
185 |
+
$license_type = 'Premium';
|
186 |
+
} else {
|
187 |
+
$license_type = 'Free';
|
188 |
}
|
189 |
|
190 |
+
return $license_type;
|
|
|
|
|
|
|
|
|
191 |
|
192 |
+
}
|
|
|
|
|
193 |
|
194 |
+
/**
|
195 |
+
* Get sending method in use.
|
196 |
+
* @return String
|
197 |
+
*/
|
198 |
+
private function get_sending_method() {
|
199 |
|
200 |
+
$model_config = WYSIJA::get('config','model');
|
201 |
+
return $model_config->getValue('sending_method');
|
202 |
|
203 |
+
}
|
|
|
|
|
|
|
|
|
204 |
|
205 |
+
/**
|
206 |
+
* Get smtp hostname in use.
|
207 |
+
* @return String
|
208 |
+
*/
|
209 |
+
private function get_smtp_hostname() {
|
210 |
|
211 |
+
$model_config = WYSIJA::get('config','model');
|
212 |
+
return $model_config->getValue('smtp_host');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
|
214 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
215 |
|
216 |
+
/**
|
217 |
+
* Get activation email status.
|
218 |
+
* @return String On | Off
|
219 |
+
*/
|
220 |
+
private function get_activation_email_status() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
221 |
|
222 |
+
$model_config = WYSIJA::get('config','model');
|
223 |
+
$activation_email_status = $model_config->getValue('confirm_dbleoptin');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
224 |
|
225 |
+
if ($activation_email_status === 1) {
|
226 |
+
$result = 'On';
|
227 |
+
} else {
|
228 |
+
$result = 'Off';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
}
|
230 |
|
231 |
+
return $result;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
232 |
|
233 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
234 |
|
235 |
+
/**
|
236 |
+
* Calculate average open rate.
|
237 |
+
* @return Int
|
238 |
+
*/
|
239 |
+
private function get_average_open_rate() {
|
240 |
|
241 |
+
$model_email_user_stat = WYSIJA::get('email_user_stat','model');
|
242 |
+
$query = 'SELECT COUNT(*) as opened_emails
|
243 |
+
FROM ' . '[wysija]' . $model_email_user_stat->table_name. '
|
244 |
WHERE status = 1';
|
245 |
+
$result = $model_email_user_stat->query('get_res', $query);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
|
247 |
+
$opened_emails = $result[0]['opened_emails'];
|
248 |
+
$total_emails = $this->get_total_emails_sent();
|
249 |
|
250 |
+
if ($total_emails === 0) {
|
251 |
+
$average_open_rate = 0;
|
252 |
+
} else {
|
253 |
+
$average_open_rate = round(($opened_emails * 100) / $total_emails);
|
|
|
|
|
|
|
254 |
}
|
255 |
|
256 |
+
return $average_open_rate;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
257 |
|
258 |
+
}
|
|
|
259 |
|
260 |
+
/**
|
261 |
+
* Calculate average click rate.
|
262 |
+
* @return String opened/total
|
263 |
+
*/
|
264 |
+
private function get_average_click_rate() {
|
265 |
|
266 |
+
$model_email_user_stat = WYSIJA::get('email_user_stat','model');
|
267 |
+
$query = 'SELECT COUNT(*) as clicked_emails
|
268 |
+
FROM ' . '[wysija]' . $model_email_user_stat->table_name. '
|
269 |
+
WHERE status = 2';
|
270 |
+
$result = $model_email_user_stat->query('get_res', $query);
|
271 |
|
272 |
+
$clicked_emails = $result[0]['clicked_emails'];
|
273 |
+
$total_emails = $this->get_total_emails_sent();
|
274 |
|
275 |
+
if ($total_emails === 0) {
|
276 |
+
$average_click_rate = 0;
|
277 |
+
} else {
|
278 |
+
$average_click_rate = round(($clicked_emails * 100) / $total_emails);
|
|
|
|
|
|
|
279 |
}
|
280 |
|
281 |
+
return $average_click_rate;
|
|
|
|
|
|
|
|
|
282 |
|
283 |
+
}
|
|
|
|
|
|
|
|
|
284 |
|
|
|
|
|
285 |
|
286 |
+
/**
|
287 |
+
* Get all emails sent.
|
288 |
+
* @return Int
|
289 |
+
*/
|
290 |
+
private function get_total_emails_sent() {
|
291 |
|
292 |
+
$model_email_user_stat = WYSIJA::get('email_user_stat','model');
|
293 |
+
$query = 'SELECT COUNT(*) as all_emails
|
294 |
+
FROM ' . '[wysija]' . $model_email_user_stat->table_name. '';
|
295 |
+
$result = $model_email_user_stat->query('get_res', $query);
|
|
|
296 |
|
297 |
+
return $result[0]['all_emails'];
|
|
|
298 |
|
299 |
+
}
|
|
|
|
|
|
|
|
|
300 |
|
301 |
+
/**
|
302 |
+
* Get Industry specified in the settings page.
|
303 |
+
* @return String
|
304 |
+
*/
|
305 |
+
private function get_industry() {
|
306 |
|
307 |
+
$model_config = WYSIJA::get('config','model');
|
|
|
|
|
|
|
|
|
308 |
|
309 |
+
return $model_config->getValue('industry');
|
|
|
310 |
|
311 |
+
}
|
|
|
|
|
|
|
|
|
312 |
|
313 |
+
/**
|
314 |
+
* Get if is using right to left language.
|
315 |
+
* @return String
|
316 |
+
*/
|
317 |
+
private function get_rtl() {
|
318 |
|
319 |
+
if (is_rtl()) {
|
320 |
+
$is_rtl = 'Yes';
|
321 |
+
} else {
|
322 |
+
$is_rtl = 'No';
|
|
|
|
|
|
|
323 |
}
|
324 |
|
325 |
+
return $is_rtl;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
326 |
|
327 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
328 |
|
329 |
+
/**
|
330 |
+
* Get if is using beta mode
|
331 |
+
* @return String
|
332 |
+
*/
|
333 |
+
private function get_beta() {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
334 |
|
335 |
+
$model_config = WYSIJA::get('config','model');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
|
337 |
+
if ($model_config->getValue('beta_mode')) {
|
338 |
+
$is_beta = 'Yes';
|
339 |
+
} else {
|
340 |
+
$is_beta = 'No';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
341 |
}
|
342 |
|
343 |
+
return $is_beta;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
344 |
|
345 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
346 |
|
347 |
+
}
|
classes/WJ_Export.php
CHANGED
@@ -1,216 +1,195 @@
|
|
1 |
<?php
|
2 |
|
3 |
/**
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
class WJ_Export extends WYSIJA_object
|
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 |
-
* simply prepare the header of the file based on the fields
|
199 |
-
*/
|
200 |
-
private function _prepare_headers() {
|
201 |
-
$model_user = WYSIJA::get( 'user_field', 'model' );
|
202 |
-
$database_fields = $model_user->getFields();
|
203 |
-
|
204 |
-
$name_fields = array();
|
205 |
-
//prepare the columns that need to be exported
|
206 |
-
foreach ( $this->_fields as $key_field ) {
|
207 |
-
$name_fields[] = $database_fields[$key_field];
|
208 |
-
}
|
209 |
-
|
210 |
-
//create the export file step by step
|
211 |
-
$row_string = implode( $this->_fields_separator, $name_fields ) . $this->_lines_separator;
|
212 |
-
$encoded_string = iconv( $this->_base_encode, $this->_output_encode, $row_string );
|
213 |
-
$this->_file_header = $encoded_string;
|
214 |
-
}
|
215 |
-
|
216 |
-
}
|
1 |
<?php
|
2 |
|
3 |
/**
|
4 |
+
* Class Export.
|
5 |
+
*
|
6 |
+
* Exporting subscribers
|
7 |
+
*/
|
8 |
+
class WJ_Export extends WYSIJA_object{
|
9 |
+
|
10 |
+
private $_file_header = '';
|
11 |
+
private $_file_handle = null;
|
12 |
+
private $_user_ids_rows = 0;
|
13 |
+
private $_user_ids = array();
|
14 |
+
private $_fields = array();
|
15 |
+
private $_export_batch = 2000;
|
16 |
+
private $_filter_list = '';
|
17 |
+
private $_filter_confirmed = '';
|
18 |
+
private $_fields_separator = ';';
|
19 |
+
private $_lines_separator = "\n";
|
20 |
+
|
21 |
+
//needed for tung's batch actions
|
22 |
+
public $batch_select = null;
|
23 |
+
|
24 |
+
|
25 |
+
function __construct() {
|
26 |
+
if(!empty($_POST['wysija']['export']['fields'])) $this->_fields = $_POST['wysija']['export']['fields'];
|
27 |
+
if(!empty($_POST['wysija']['export']['user_ids'])) $this->_user_ids = $this->_get_posted_user_ids();
|
28 |
+
if(!empty($_POST['wysija']['export']['filter']['list'])) $this->_filter_list = $_POST['wysija']['export']['filter']['list'];
|
29 |
+
if(!empty($_POST['wysija']['export']['filter']['confirmed'])) $this->_filter_confirmed = $_POST['wysija']['export']['filter']['confirmed'];
|
30 |
+
if(!empty($_POST['wysija']['export']['format'])) $this->_fields_separator = $_POST['wysija']['export']['format'];
|
31 |
+
}
|
32 |
+
|
33 |
+
/**
|
34 |
+
* export the subscribers
|
35 |
+
* @return type
|
36 |
+
*/
|
37 |
+
public function export_subscribers() {
|
38 |
+
|
39 |
+
//generate temp file
|
40 |
+
$helper_file = WYSIJA::get('file','helper');
|
41 |
+
$this->_prepare_headers();
|
42 |
+
$result_file = $helper_file->temp($this->_file_header,'export','.csv');
|
43 |
+
|
44 |
+
//open the created file in append mode
|
45 |
+
$this->_file_handle = fopen($result_file['path'], 'a');
|
46 |
+
|
47 |
+
//get a list of user_ids to export
|
48 |
+
if(!empty($this->_user_ids) && empty($this->batch_select)){
|
49 |
+
|
50 |
+
$this->_user_ids_rows = count($this->_user_ids);
|
51 |
+
$this->_push_data_to_export_file();
|
52 |
+
|
53 |
+
}else{
|
54 |
+
|
55 |
+
$this->_get_chunks_user_ids();
|
56 |
+
}
|
57 |
+
|
58 |
+
fclose( $this->_file_handle );
|
59 |
+
return $result_file['path'];
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* get the number of rows exported
|
64 |
+
* @return type
|
65 |
+
*/
|
66 |
+
public function get_user_ids_rows(){
|
67 |
+
return $this->_user_ids_rows;
|
68 |
+
}
|
69 |
+
|
70 |
+
/**
|
71 |
+
* get an array of user_ids from the global $_POST
|
72 |
+
* @return type
|
73 |
+
*/
|
74 |
+
private function _get_posted_user_ids(){
|
75 |
+
return unserialize(base64_decode($_POST['wysija']['export']['user_ids']));
|
76 |
+
}
|
77 |
+
|
78 |
+
/**
|
79 |
+
* get the query used to select a bung of ids
|
80 |
+
* @return string
|
81 |
+
*/
|
82 |
+
private function _get_query_users_ids(){
|
83 |
+
|
84 |
+
// based on filters prepare a query to get a list of user_ids
|
85 |
+
if(!empty($this->batch_select)){ // batch select and export
|
86 |
+
$this->_user_ids_rows = $this->batch_select['count'];
|
87 |
+
$qry = $this->batch_select['original_query'];
|
88 |
+
}else{ // export all list
|
89 |
+
|
90 |
+
// prepare the filters
|
91 |
+
$filters = array();
|
92 |
+
if(!empty($this->_filter_list)){
|
93 |
+
if(!is_array($this->_filter_list)){
|
94 |
+
$this->_filter_list = array($this->_filter_list);
|
95 |
+
}
|
96 |
+
}
|
97 |
+
$filters['lists'] = $this->_filter_list;
|
98 |
+
|
99 |
+
// include also unsubscribed and unconfirmed
|
100 |
+
if(!empty($this->_filter_confirmed)){
|
101 |
+
$filters['status'] = 'subscribed';
|
102 |
+
}
|
103 |
+
|
104 |
+
$model_user = WYSIJA::get('user','model');
|
105 |
+
$select = array('A.user_id');
|
106 |
+
$qry = $model_user->get_subscribers( $select, $filters , '' , $return_query = true);
|
107 |
+
}
|
108 |
+
|
109 |
+
return $qry;
|
110 |
+
}
|
111 |
+
|
112 |
+
/**
|
113 |
+
* get chunks of subscribers ids and push them step by step to the export file
|
114 |
+
*/
|
115 |
+
private function _get_chunks_user_ids(){
|
116 |
+
|
117 |
+
$model_user = WYSIJA::get('user','model');
|
118 |
+
$this->_user_ids = array();
|
119 |
+
$query_user_ids = $this->_get_query_users_ids();
|
120 |
+
$query_count = str_replace(array('DISTINCT(A.user_id)', 'DISTINCT(B.user_id)') , 'COUNT(DISTINCT(A.user_id))' , $query_user_ids);
|
121 |
+
|
122 |
+
if(empty($this->_user_ids_rows)){
|
123 |
+
$useridsrows_result = $model_user->getResults( $query_count , ARRAY_N);
|
124 |
+
$this->_user_ids_rows = (int)$useridsrows_result[0][0];
|
125 |
+
}
|
126 |
+
|
127 |
+
if($this->_user_ids_rows <= $this->_export_batch){
|
128 |
+
$user_ids_db = $model_user->getResults( $query_user_ids , ARRAY_N);
|
129 |
+
|
130 |
+
foreach($user_ids_db as $uarr){
|
131 |
+
$this->_user_ids[]=$uarr[0];
|
132 |
+
}
|
133 |
+
|
134 |
+
$this->_push_data_to_export_file();
|
135 |
+
}else{
|
136 |
+
$pages = ceil($this->_user_ids_rows / $this->_export_batch);//pagination
|
137 |
+
for ($i = 0; $i < $pages; $i++) {
|
138 |
+
$query_batch = $query_user_ids . ' ORDER BY user_id ASC LIMIT '.($i * $this->_export_batch) . ',' . $this->_export_batch;
|
139 |
+
$user_ids_db = $model_user->getResults( $query_batch , ARRAY_N );
|
140 |
+
foreach($user_ids_db as $uarr){
|
141 |
+
$this->_user_ids[]=$uarr[0];
|
142 |
+
}
|
143 |
+
$this->_push_data_to_export_file();
|
144 |
+
|
145 |
+
unset($user_ids_db);//free memory
|
146 |
+
}
|
147 |
+
}
|
148 |
+
}
|
149 |
+
|
150 |
+
|
151 |
+
/**
|
152 |
+
* split the user_ids array into chunks, load the fields of all the concerned
|
153 |
+
* users and push the data to the file
|
154 |
+
*/
|
155 |
+
function _push_data_to_export_file(){
|
156 |
+
$user_ids_chunks = array(); // chunk rows into separated batchs, limit by $this->_export_batch
|
157 |
+
$user_ids_chunks = array_chunk($this->_user_ids, 200);
|
158 |
+
$this->_user_ids = null;// free memory
|
159 |
+
|
160 |
+
$model_user = WYSIJA::get('user','model');
|
161 |
+
foreach($user_ids_chunks as $user_id_chunk){
|
162 |
+
// get the full data for that specific chunk of ids
|
163 |
+
$data = $model_user->get( $this->_fields , array('user_id'=>$user_id_chunk) );
|
164 |
+
|
165 |
+
if(in_array('created_at' , $this->_fields)){
|
166 |
+
foreach($data as $key => $row){
|
167 |
+
$data[$key]['created_at'] = date_i18n( get_option('date_format') , $row['created_at'] );
|
168 |
+
}
|
169 |
+
}
|
170 |
+
|
171 |
+
// append content to the file
|
172 |
+
foreach($data as $row){
|
173 |
+
fwrite( $this->_file_handle , implode( $this->_fields_separator , $row ) . $this->_lines_separator);
|
174 |
+
}
|
175 |
+
}
|
176 |
+
}
|
177 |
+
|
178 |
+
/**
|
179 |
+
* simply prepare the header of the file based on the fields
|
180 |
+
*/
|
181 |
+
private function _prepare_headers(){
|
182 |
+
$model_user = WYSIJA::get('user_field','model');
|
183 |
+
$database_fields = $model_user->getFields();
|
184 |
+
|
185 |
+
$name_fields = array();
|
186 |
+
//prepare the columns that need to be exported
|
187 |
+
foreach($this->_fields as $key_field){
|
188 |
+
$name_fields[] = $database_fields[$key_field];
|
189 |
+
}
|
190 |
+
|
191 |
+
//create the export file step by step
|
192 |
+
$this->_file_header = implode($this->_fields_separator , $name_fields) . $this->_lines_separator;
|
193 |
+
}
|
194 |
+
|
195 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_Field.php
DELETED
@@ -1,283 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
A custom field.
|
5 |
-
It represents a custom field that
|
6 |
-
can be added to a form.
|
7 |
-
Example:
|
8 |
-
$custom_field = new WJ_Field();
|
9 |
-
$custom_field->set(array(
|
10 |
-
'name' => 'Fruits',
|
11 |
-
'type' => 'select',
|
12 |
-
'required' => false,
|
13 |
-
'settings' => array(
|
14 |
-
'label' => 'Select a fruit:',
|
15 |
-
'values' => array(
|
16 |
-
'Apple', 'Orange', 'Banana'
|
17 |
-
),
|
18 |
-
'default_value' => 'Orange'
|
19 |
-
)
|
20 |
-
));
|
21 |
-
$custom_field->save();
|
22 |
-
*/
|
23 |
-
|
24 |
-
class WJ_Field {
|
25 |
-
|
26 |
-
// The custom fields DB table.
|
27 |
-
private $table;
|
28 |
-
// The Users table.
|
29 |
-
private $user_table;
|
30 |
-
// The ID of the custom field.
|
31 |
-
public $id;
|
32 |
-
// The name of the custom field.
|
33 |
-
public $name;
|
34 |
-
// input, textarea, checkbox, radio, select
|
35 |
-
public $type;
|
36 |
-
// true | false
|
37 |
-
public $required;
|
38 |
-
// Settings.
|
39 |
-
public $settings = array();
|
40 |
-
|
41 |
-
/*
|
42 |
-
Just set the correct tables on creation.
|
43 |
-
$custom_field = new WJ_Field();
|
44 |
-
*/
|
45 |
-
function __construct() {
|
46 |
-
$this->table = WJ_Settings::db_prefix( 'custom_field' );
|
47 |
-
$this->user_table = WJ_Settings::db_prefix( 'user' );
|
48 |
-
}
|
49 |
-
|
50 |
-
/*
|
51 |
-
Get the table name.
|
52 |
-
Useful for statistics and counts on Custom Fields.
|
53 |
-
Generally when we want to run DB queries.
|
54 |
-
*/
|
55 |
-
public function get_table_name() {
|
56 |
-
return $this->table;
|
57 |
-
}
|
58 |
-
|
59 |
-
/*
|
60 |
-
Static method to get a Custom field by id.
|
61 |
-
WJ_Field::get(id);
|
62 |
-
# => WJCustomField Object
|
63 |
-
*/
|
64 |
-
public static function get( $id ) {
|
65 |
-
$object = new self();
|
66 |
-
global $wpdb;
|
67 |
-
$result = $wpdb->get_row( $wpdb->prepare( "SELECT * from {$object->table} WHERE id = %d", $id ), ARRAY_A );
|
68 |
-
if ( $result != null ) {
|
69 |
-
$result['settings'] = unserialize( $result['settings'] );
|
70 |
-
$result['required'] = WJ_Utils::to_bool( $result['required'] );
|
71 |
-
$object->set( $result );
|
72 |
-
return $object;
|
73 |
-
} else {
|
74 |
-
return null;
|
75 |
-
}
|
76 |
-
}
|
77 |
-
|
78 |
-
/*
|
79 |
-
Get all custom fields.
|
80 |
-
WJ_Field::get_all();
|
81 |
-
# => Array of WJ_Field
|
82 |
-
*/
|
83 |
-
public static function get_all( $options = array() ) {
|
84 |
-
$object = new self();
|
85 |
-
global $wpdb;
|
86 |
-
|
87 |
-
// default order by
|
88 |
-
$order_by = 'id ASC';
|
89 |
-
if ( isset($options['order_by'] ) ){
|
90 |
-
$order_by = $options['order_by'];
|
91 |
-
}
|
92 |
-
|
93 |
-
// fetch rows from db
|
94 |
-
$results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$object->table} ORDER BY %s", $order_by ), ARRAY_A );
|
95 |
-
|
96 |
-
if ( $results != null ) {
|
97 |
-
$collection = array();
|
98 |
-
foreach ( $results as $result ) {
|
99 |
-
$result['settings'] = unserialize( $result['settings'] );
|
100 |
-
$result['required'] = WJ_Utils::to_bool( $result['required'] );
|
101 |
-
$field = new self();
|
102 |
-
$field->set( $result );
|
103 |
-
$collection[] = $field;
|
104 |
-
}
|
105 |
-
return $collection;
|
106 |
-
} else {
|
107 |
-
return null;
|
108 |
-
}
|
109 |
-
}
|
110 |
-
|
111 |
-
|
112 |
-
/*
|
113 |
-
Get a custom fields names list.
|
114 |
-
WJ_Field::get_names_list();
|
115 |
-
# => array(1 => 'Address', 2 => 'Gender')
|
116 |
-
*/
|
117 |
-
public static function get_all_names() {
|
118 |
-
$fields = self::get_all();
|
119 |
-
$fields_list = array();
|
120 |
-
if ( isset( $fields ) ) {
|
121 |
-
foreach ( $fields as $field ) {
|
122 |
-
$fields_list[$field->id] = $field->name;
|
123 |
-
}
|
124 |
-
}
|
125 |
-
return $fields_list;
|
126 |
-
}
|
127 |
-
|
128 |
-
/*
|
129 |
-
Set all object properties.
|
130 |
-
$custom_field->set(array(
|
131 |
-
'name' => 'First Name',
|
132 |
-
'type' => 'text',
|
133 |
-
'required' => true
|
134 |
-
));
|
135 |
-
*/
|
136 |
-
public function set( $args ) {
|
137 |
-
if ( isset( $args['id'] ) ) {
|
138 |
-
$this->id = $args['id'];
|
139 |
-
}
|
140 |
-
$this->name = $args['name'];
|
141 |
-
$this->type = $args['type'];
|
142 |
-
$this->required = $args['required'];
|
143 |
-
$this->settings = $args['settings'];
|
144 |
-
}
|
145 |
-
|
146 |
-
/*
|
147 |
-
Store Custom Field in DB.
|
148 |
-
If already stored, updates it.
|
149 |
-
$custom_field->save();
|
150 |
-
*/
|
151 |
-
public function save() {
|
152 |
-
// Check if it's a new object or an update.
|
153 |
-
if ( isset( $this->id ) ) {
|
154 |
-
$this->update();
|
155 |
-
} else {
|
156 |
-
$this->create();
|
157 |
-
}
|
158 |
-
}
|
159 |
-
|
160 |
-
// Delete custom field from DB.
|
161 |
-
public function delete() {
|
162 |
-
global $wpdb;
|
163 |
-
$result = $wpdb->delete( $this->table, array( 'id' => $this->id ), array( '%d' ) );
|
164 |
-
$this->delete_user_col( $this->id );
|
165 |
-
return $result;
|
166 |
-
}
|
167 |
-
|
168 |
-
/*
|
169 |
-
Generates user column name;
|
170 |
-
$custom_field->user_column_name();
|
171 |
-
# => 'cf_1'
|
172 |
-
*/
|
173 |
-
public function user_column_name() {
|
174 |
-
$column_name = 'cf_' . $this->id;
|
175 |
-
return $column_name;
|
176 |
-
}
|
177 |
-
|
178 |
-
/*
|
179 |
-
Creates the Custom Field.
|
180 |
-
It also creates the user column, depending on type.
|
181 |
-
*/
|
182 |
-
private function create() {
|
183 |
-
global $wpdb;
|
184 |
-
$required = WJ_Utils::to_int( $this->required );
|
185 |
-
$wpdb->insert(
|
186 |
-
$this->table,
|
187 |
-
array(
|
188 |
-
'name' => $this->name,
|
189 |
-
'type' => $this->type,
|
190 |
-
'required' => $required,
|
191 |
-
'settings' => serialize( $this->settings ),
|
192 |
-
),
|
193 |
-
array( '%s', '%s', '%d', '%s', '%s' )
|
194 |
-
);
|
195 |
-
// ! No id in user col?
|
196 |
-
if ( $wpdb->insert_id ) {
|
197 |
-
$this->id = $wpdb->insert_id;
|
198 |
-
$this->create_user_col();
|
199 |
-
} else {
|
200 |
-
return false;
|
201 |
-
}
|
202 |
-
}
|
203 |
-
|
204 |
-
/*
|
205 |
-
Updates the value of the custom field.
|
206 |
-
$custom_field->update('New address');
|
207 |
-
*/
|
208 |
-
private function update() {
|
209 |
-
global $wpdb;
|
210 |
-
$required = WJ_Utils::to_int( $this->required );
|
211 |
-
$result = $wpdb->update(
|
212 |
-
$this->table,
|
213 |
-
array(
|
214 |
-
'name' => $this->name,
|
215 |
-
'type' => $this->type,
|
216 |
-
'required' => $required,
|
217 |
-
'settings' => serialize( $this->settings ),
|
218 |
-
),
|
219 |
-
array( 'id' => $this->id ),
|
220 |
-
array( '%s', '%s', '%d' ),
|
221 |
-
array( '%d' )
|
222 |
-
);
|
223 |
-
return $result;
|
224 |
-
}
|
225 |
-
|
226 |
-
/*
|
227 |
-
Creates the correct user columnn, named cf_x, in the
|
228 |
-
user table. x is the ID if the custom field.
|
229 |
-
*/
|
230 |
-
private function create_user_col() {
|
231 |
-
global $wpdb;
|
232 |
-
$column_name = $this->user_column_name();
|
233 |
-
$column_type = $this->generate_column_type();
|
234 |
-
$result = $wpdb->query(
|
235 |
-
"ALTER TABLE $this->user_table ADD COLUMN $column_name $column_type"
|
236 |
-
);
|
237 |
-
return $result;
|
238 |
-
}
|
239 |
-
|
240 |
-
/*
|
241 |
-
Calculates the correct column type, based on custom field type.
|
242 |
-
$custom_field->generate_column_type();
|
243 |
-
# => 'VARCHAR(100)'
|
244 |
-
*/
|
245 |
-
private function generate_column_type() {
|
246 |
-
switch ( $this->type ) {
|
247 |
-
case 'input':
|
248 |
-
$column_type = 'VARCHAR(100)';
|
249 |
-
break;
|
250 |
-
case 'textarea':
|
251 |
-
$column_type = 'VARCHAR(255)';
|
252 |
-
break;
|
253 |
-
case 'checkbox':
|
254 |
-
$column_type = 'TINYINT(1)';
|
255 |
-
break;
|
256 |
-
case 'radio':
|
257 |
-
$column_type = 'VARCHAR(255)';
|
258 |
-
break;
|
259 |
-
case 'select':
|
260 |
-
$column_type = 'VARCHAR(255)';
|
261 |
-
break;
|
262 |
-
case 'date':
|
263 |
-
$column_type = 'INT(10) UNSIGNED';
|
264 |
-
break;
|
265 |
-
default:
|
266 |
-
$column_type = 'VARCHAR(255)';
|
267 |
-
break;
|
268 |
-
}
|
269 |
-
return $column_type;
|
270 |
-
}
|
271 |
-
|
272 |
-
/*
|
273 |
-
Deletes the user column in the user table.
|
274 |
-
Needed when we remove a custom field.
|
275 |
-
*/
|
276 |
-
private function delete_user_col( $custom_field_id ) {
|
277 |
-
global $wpdb;
|
278 |
-
$cf_column = 'cf_' . $custom_field_id;
|
279 |
-
$result = $wpdb->query( "ALTER TABLE $this->user_table DROP COLUMN $cf_column" );
|
280 |
-
return $result;
|
281 |
-
}
|
282 |
-
|
283 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_FieldHandler.php
DELETED
@@ -1,59 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
Class WJ_FieldHandler
|
5 |
-
It handles the custom fields in a controller.
|
6 |
-
*/
|
7 |
-
class WJ_FieldHandler {
|
8 |
-
|
9 |
-
public function __construct() {
|
10 |
-
}
|
11 |
-
|
12 |
-
/*
|
13 |
-
Handler to save all the fields, by giving an array
|
14 |
-
that specifies the custom fields columns names, and
|
15 |
-
the ID of the user.
|
16 |
-
WJ_FieldHandler::handle_all(array(
|
17 |
-
'cf_1' => 'Value',
|
18 |
-
'cf_2' => 'Value 2'
|
19 |
-
), 1
|
20 |
-
);
|
21 |
-
*/
|
22 |
-
public static function handle_all(array $fields_values, $user_id) {
|
23 |
-
$user_fields = WJ_FieldUser::get_all($user_id);
|
24 |
-
|
25 |
-
if(isset($user_fields) && !empty($user_fields)) {
|
26 |
-
foreach ($user_fields as $user_field) {
|
27 |
-
$key = $user_field->column_name();
|
28 |
-
|
29 |
-
// check if there is a value for this custom field
|
30 |
-
if(array_key_exists($key, $fields_values)) {
|
31 |
-
|
32 |
-
// set value
|
33 |
-
$new_value = $fields_values[$key];
|
34 |
-
|
35 |
-
// extra process for specific types
|
36 |
-
if($user_field->field->type === 'checkbox') {
|
37 |
-
// limit the value between [0,1]
|
38 |
-
$new_value = min(max(0, (int)$new_value), 1);
|
39 |
-
|
40 |
-
} else if($user_field->field->type === 'date') {
|
41 |
-
// get date parameters
|
42 |
-
$year = (isset($fields_values[$key]['year'])) ? (int)$fields_values[$key]['year'] : (int)strftime('%Y');
|
43 |
-
$month = (isset($fields_values[$key]['month'])) ? (int)$fields_values[$key]['month'] : 1;
|
44 |
-
$day = (isset($fields_values[$key]['day'])) ? (int)$fields_values[$key]['day'] : 1;
|
45 |
-
|
46 |
-
$new_value = null;
|
47 |
-
if($year !== 0 && $month !== 0 && $day !== 0) {
|
48 |
-
// make timestamp from date parameters
|
49 |
-
$new_value = mktime(0, 0, 0, $month, $day, $year);
|
50 |
-
}
|
51 |
-
}
|
52 |
-
|
53 |
-
// update value
|
54 |
-
$user_field->update($new_value);
|
55 |
-
}
|
56 |
-
}
|
57 |
-
}
|
58 |
-
}
|
59 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_FieldRender.php
DELETED
@@ -1,249 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
Class WJ_FieldRender
|
5 |
-
It is able to render Custom Fields in a form.
|
6 |
-
*/
|
7 |
-
|
8 |
-
class WJ_FieldRender {
|
9 |
-
|
10 |
-
// WJ_FieldUser Object.
|
11 |
-
private $field_user;
|
12 |
-
// The column, like 'cf_1'
|
13 |
-
private $identifier;
|
14 |
-
// Name of the field.
|
15 |
-
private $name;
|
16 |
-
// Value of the field.
|
17 |
-
private $value;
|
18 |
-
|
19 |
-
public function __construct($field_user) {
|
20 |
-
$this->field_user = $field_user;
|
21 |
-
$this->identifier = $field_user->column_name();
|
22 |
-
$this->name = esc_attr($field_user->field->name);
|
23 |
-
$this->value = esc_attr($field_user->value());
|
24 |
-
}
|
25 |
-
|
26 |
-
public function validation() {
|
27 |
-
$rules = array();
|
28 |
-
$validation_class = '';
|
29 |
-
|
30 |
-
// If there are any validations, add correct class names.
|
31 |
-
if (!empty($this->field_user->field->settings['validate'])) {
|
32 |
-
$validation_value = $this->field_user->field->settings['validate'];
|
33 |
-
$rules[] = 'custom[' . $validation_value . ']';
|
34 |
-
}
|
35 |
-
|
36 |
-
// If there's any validation, join all classes.
|
37 |
-
if (!empty($rules)) {
|
38 |
-
$validation_class = 'class="validate[' . join(',', $rules) . ']"';
|
39 |
-
}
|
40 |
-
|
41 |
-
return $validation_class;
|
42 |
-
}
|
43 |
-
|
44 |
-
/*
|
45 |
-
Returns the HTML label for this field, to be used
|
46 |
-
in a form.
|
47 |
-
$field_render->label();
|
48 |
-
# => '<label ...>Address</label>'
|
49 |
-
*/
|
50 |
-
public function label() {
|
51 |
-
$form_field_name = $this->identifier;
|
52 |
-
$label =
|
53 |
-
'<label for="' . $form_field_name . '">' .
|
54 |
-
$this->name .
|
55 |
-
'</label>';
|
56 |
-
return $label;
|
57 |
-
}
|
58 |
-
|
59 |
-
/*
|
60 |
-
Returns the input related to the type of the field,
|
61 |
-
to be used in a form.
|
62 |
-
$field_render->input();
|
63 |
-
# => '<input type=..../>
|
64 |
-
*/
|
65 |
-
public function input() {
|
66 |
-
$input = '';
|
67 |
-
|
68 |
-
switch ($this->field_user->field->type) {
|
69 |
-
case 'input':
|
70 |
-
$input =
|
71 |
-
'<input type="text" size="40" id="'. $this->identifier . '"' .
|
72 |
-
'value="' . $this->value .
|
73 |
-
'" name="wysija[field][' . $this->identifier . ']" ' .
|
74 |
-
$this->validation() .
|
75 |
-
' />';
|
76 |
-
break;
|
77 |
-
case 'textarea':
|
78 |
-
$input =
|
79 |
-
'<textarea id="'. $this->identifier . '"' .
|
80 |
-
'name="wysija[field][' . $this->identifier . ']" ' .
|
81 |
-
$this->validation() .
|
82 |
-
' />' .
|
83 |
-
$this->value .
|
84 |
-
'</textarea>';
|
85 |
-
break;
|
86 |
-
case 'checkbox':
|
87 |
-
$check_value = '';
|
88 |
-
$label = $this->field_user->field->settings['values'][0]['value'];
|
89 |
-
if ($this->value == 1) {
|
90 |
-
$check_value = ' checked="checked"';
|
91 |
-
}
|
92 |
-
$input =
|
93 |
-
'<label for="' . $this->identifier . '">' .
|
94 |
-
'<input type="hidden" '.
|
95 |
-
$check_value .
|
96 |
-
' name="wysija[field][' . $this->identifier . ']"' .
|
97 |
-
' value="0" ' .
|
98 |
-
' />' .
|
99 |
-
'<input type="checkbox" id="'. $this->identifier . '"' .
|
100 |
-
$check_value .
|
101 |
-
' name="wysija[field][' . $this->identifier . ']"' .
|
102 |
-
' value="1" ' .
|
103 |
-
$this->validation() .
|
104 |
-
' />' . $label . '</label>';
|
105 |
-
break;
|
106 |
-
case 'radio':
|
107 |
-
$field = $this->field_user->field;
|
108 |
-
foreach ($field->settings['values'] as $index => $content) {
|
109 |
-
$check_value = '';
|
110 |
-
if ($this->value == $content['value']) {
|
111 |
-
$check_value = 'checked="checked"';
|
112 |
-
}
|
113 |
-
$local_identifier = $this->identifier . '_' . $content['value'];
|
114 |
-
$input .=
|
115 |
-
'<label for="' . $local_identifier . '">' .
|
116 |
-
'<input type="radio" id="'. $local_identifier . '"' .
|
117 |
-
$check_value .
|
118 |
-
' name="wysija[field][' . $this->identifier . ']"' .
|
119 |
-
' value="' . $content['value'] . '" />' .
|
120 |
-
$content['value'] .
|
121 |
-
'</label>';
|
122 |
-
}
|
123 |
-
break;
|
124 |
-
case 'select':
|
125 |
-
$input = '<select id="' . $this->identifier . '"' .
|
126 |
-
' name="wysija[field][' . $this->identifier . ']" ' .
|
127 |
-
$this->validation() .
|
128 |
-
' />';
|
129 |
-
$field = $this->field_user->field;
|
130 |
-
foreach ($field->settings['values'] as $index => $content) {
|
131 |
-
$check_value = '';
|
132 |
-
if ($this->value == $content['value']) {
|
133 |
-
$check_value = 'selected="selected"';
|
134 |
-
}
|
135 |
-
$input .=
|
136 |
-
'<option ' . $check_value .
|
137 |
-
' value="' . $content['value'] . '" >' .
|
138 |
-
$content['value'] .
|
139 |
-
'</option>';
|
140 |
-
}
|
141 |
-
$input .= '</select>';
|
142 |
-
break;
|
143 |
-
|
144 |
-
case 'date':
|
145 |
-
// get date format from field settings
|
146 |
-
$field = $this->field_user->field;
|
147 |
-
|
148 |
-
// get timestamp value
|
149 |
-
$value = ((int)$this->value > 0) ? (int)$this->value : null;
|
150 |
-
|
151 |
-
// get date type (defaults to year + month + day)
|
152 |
-
$date_type = (isset($field->settings['date_type'])) ? $field->settings['date_type'] : 'year_month_day';
|
153 |
-
// get an array of all required date components (year, month, day)
|
154 |
-
$display_date_fields = explode('_', $date_type);
|
155 |
-
// form engine to get date data
|
156 |
-
$helper_form_engine = WYSIJA::get('form_engine', 'helper');
|
157 |
-
|
158 |
-
// year selection
|
159 |
-
if(in_array('year', $display_date_fields)) {
|
160 |
-
$years = $helper_form_engine->get_years();
|
161 |
-
|
162 |
-
$selected_year = null;
|
163 |
-
if($value !== null) {
|
164 |
-
$selected_year = (int)strftime('%Y', $value);
|
165 |
-
}
|
166 |
-
|
167 |
-
// select
|
168 |
-
$input .= '<select name="wysija[field]['.$this->identifier.'][year]">';
|
169 |
-
$input .= '<option value="">'.__('Year').'</option>';
|
170 |
-
foreach($years as $year) {
|
171 |
-
$is_selected = ((int)$year['year'] === $selected_year) ? ' selected="selected"' : '';
|
172 |
-
$input .= '<option value="'.$year['year'].'"'.$is_selected.'>'.$year['year'].'</option>';
|
173 |
-
}
|
174 |
-
$input .= '</select>';
|
175 |
-
}
|
176 |
-
|
177 |
-
// month selection
|
178 |
-
if(in_array('month', $display_date_fields)) {
|
179 |
-
$months = $helper_form_engine->get_months();
|
180 |
-
|
181 |
-
$selected_month = null;
|
182 |
-
if($value !== null) {
|
183 |
-
$selected_month = (int)strftime('%m', $value);
|
184 |
-
}
|
185 |
-
|
186 |
-
// select
|
187 |
-
$input .= '<select name="wysija[field]['.$this->identifier.'][month]">';
|
188 |
-
$input .= '<option value="">'.__('Month').'</option>';
|
189 |
-
foreach($months as $month) {
|
190 |
-
$is_selected = ((int)$month['month'] === $selected_month) ? ' selected="selected"' : '';
|
191 |
-
$input .= '<option value="'.$month['month'].'"'.$is_selected.'>'.$month['month_name'].'</option>';
|
192 |
-
}
|
193 |
-
$input .= '</select>';
|
194 |
-
}
|
195 |
-
|
196 |
-
// day selection
|
197 |
-
if(in_array('day', $display_date_fields)) {
|
198 |
-
$days = $helper_form_engine->get_days();
|
199 |
-
|
200 |
-
$selected_day = null;
|
201 |
-
if($value !== null) {
|
202 |
-
$selected_day = (int)strftime('%d', $value);
|
203 |
-
}
|
204 |
-
|
205 |
-
// select
|
206 |
-
$input .= '<select name="wysija[field]['.$this->identifier.'][day]">';
|
207 |
-
$input .= '<option value="">'.__('Day').'</option>';
|
208 |
-
foreach($days as $day) {
|
209 |
-
$is_selected = ((int)$day['day'] === $selected_day) ? ' selected="selected"' : '';
|
210 |
-
$input .= '<option value="'.$day['day'].'"'.$is_selected.'>'.$day['day'].'</option>';
|
211 |
-
}
|
212 |
-
$input .= '</select>';
|
213 |
-
}
|
214 |
-
break;
|
215 |
-
default:
|
216 |
-
$input = '';
|
217 |
-
break;
|
218 |
-
}
|
219 |
-
return $input;
|
220 |
-
}
|
221 |
-
|
222 |
-
/*
|
223 |
-
Render all custom fields in a table, given the user id.
|
224 |
-
$field_render::render_all(1);
|
225 |
-
# => '<tr><th><label...<input...</td></tr>'
|
226 |
-
*/
|
227 |
-
public static function render_all($user_id) {
|
228 |
-
$fields = WJ_FieldUser::get_all($user_id);
|
229 |
-
if (isset($fields)) {
|
230 |
-
$output = '';
|
231 |
-
foreach ($fields as $field) {
|
232 |
-
$field_render = new self($field);
|
233 |
-
$output .=
|
234 |
-
'<tr>' .
|
235 |
-
'<th scope="row">' .
|
236 |
-
$field_render->label() .
|
237 |
-
'</th><td>' .
|
238 |
-
$field_render->input() .
|
239 |
-
'</td></tr>';
|
240 |
-
}
|
241 |
-
return $output;
|
242 |
-
} else {
|
243 |
-
return null;
|
244 |
-
}
|
245 |
-
}
|
246 |
-
|
247 |
-
|
248 |
-
}
|
249 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_FieldUser.php
DELETED
@@ -1,130 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
An user field is a custom field identified by ID,
|
5 |
-
linked to a particular user, identified by ID.
|
6 |
-
*/
|
7 |
-
|
8 |
-
class WJ_FieldUser {
|
9 |
-
|
10 |
-
// User Table.
|
11 |
-
private $user_table;
|
12 |
-
// Custom fields table.
|
13 |
-
private $field_table;
|
14 |
-
// User ID.
|
15 |
-
public $user_id;
|
16 |
-
// The field object.
|
17 |
-
public $field;
|
18 |
-
// The field value.
|
19 |
-
public $value;
|
20 |
-
|
21 |
-
/*
|
22 |
-
$field_user = new WJ_FieldUser();
|
23 |
-
Just setup correct tables names.
|
24 |
-
*/
|
25 |
-
function __construct() {
|
26 |
-
$this->user_table = WJ_Settings::db_prefix('user');
|
27 |
-
$this->field_table = WJ_Settings::db_prefix('custom_field');
|
28 |
-
}
|
29 |
-
|
30 |
-
/*
|
31 |
-
After object creation, you can set the user id,
|
32 |
-
and the field id. The object will now contain the right
|
33 |
-
custom field, and the user id.
|
34 |
-
$field_user->set(array(
|
35 |
-
'user_id' => 1,
|
36 |
-
'field_id' => 2
|
37 |
-
));
|
38 |
-
*/
|
39 |
-
public function set($args) {
|
40 |
-
$this->user_id = $args['user_id'];
|
41 |
-
$this->field = WJ_Field::get($args['field_id']);
|
42 |
-
}
|
43 |
-
|
44 |
-
/*
|
45 |
-
Updates the field user value.
|
46 |
-
$field_user->update('Main Street');
|
47 |
-
*/
|
48 |
-
public function update($value) {
|
49 |
-
global $wpdb;
|
50 |
-
$column_name = $this->field->user_column_name();
|
51 |
-
// Cast value to the correct column type.
|
52 |
-
switch ($this->field->type) {
|
53 |
-
case 'checkbox':
|
54 |
-
$validation = '%d';
|
55 |
-
$value = (int)$value;
|
56 |
-
break;
|
57 |
-
default:
|
58 |
-
// We default to a string.
|
59 |
-
$validation = '%s';
|
60 |
-
$value = (string)$value;
|
61 |
-
break;
|
62 |
-
}
|
63 |
-
$result = $wpdb->update(
|
64 |
-
$this->user_table,
|
65 |
-
array(
|
66 |
-
$column_name => $value
|
67 |
-
), array("user_id" => $this->user_id),
|
68 |
-
array($validation),
|
69 |
-
array("%d")
|
70 |
-
);
|
71 |
-
if ($result != false) {
|
72 |
-
$this->value = $value;
|
73 |
-
}
|
74 |
-
return $result;
|
75 |
-
}
|
76 |
-
|
77 |
-
/*
|
78 |
-
Get the user field value.
|
79 |
-
$field_user->value();
|
80 |
-
# => 'Main Street'
|
81 |
-
*/
|
82 |
-
public function value() {
|
83 |
-
$value = '';
|
84 |
-
if (isset($this->value)) {
|
85 |
-
$value = $this->value;
|
86 |
-
} else {
|
87 |
-
$column_name = $this->field->user_column_name();
|
88 |
-
global $wpdb;
|
89 |
-
$result = $wpdb->get_row($wpdb->prepare(
|
90 |
-
"SELECT $column_name FROM $this->user_table
|
91 |
-
WHERE user_id = %d",
|
92 |
-
array($this->user_id)
|
93 |
-
), ARRAY_A);
|
94 |
-
$this->value = $result[$column_name];
|
95 |
-
$value = $result[$column_name];
|
96 |
-
}
|
97 |
-
return $value;
|
98 |
-
}
|
99 |
-
|
100 |
-
/*
|
101 |
-
Get the user unique column name.
|
102 |
-
$field_user->column_name();
|
103 |
-
# => 'cf_1'
|
104 |
-
*/
|
105 |
-
public function column_name() {
|
106 |
-
return $this->field->user_column_name();
|
107 |
-
}
|
108 |
-
|
109 |
-
/*
|
110 |
-
Get all UserFields by User ID.
|
111 |
-
$WJ_FieldUser::get_all();
|
112 |
-
# => Array of WJ_FieldUser
|
113 |
-
*/
|
114 |
-
public static function get_all($user_id) {
|
115 |
-
$fields = WJ_Field::get_all();
|
116 |
-
if(isset($fields) && !empty($fields)) {
|
117 |
-
$collection = array();
|
118 |
-
foreach ($fields as $field) {
|
119 |
-
$user_field = new self();
|
120 |
-
$user_field->user_id = $user_id;
|
121 |
-
$user_field->field = $field;
|
122 |
-
$collection[] = $user_field;
|
123 |
-
}
|
124 |
-
return $collection;
|
125 |
-
} else {
|
126 |
-
return null;
|
127 |
-
}
|
128 |
-
}
|
129 |
-
|
130 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_Import.php
CHANGED
@@ -1,17 +1,15 @@
|
|
1 |
<?php
|
2 |
|
3 |
/**
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
class WJ_Import extends WYSIJA_object
|
9 |
|
10 |
private $_header_row = array();
|
11 |
private $_csv_data = array();
|
12 |
private $_match = array();
|
13 |
-
private $_ignore_invalid_date = array(); // specific for date fields
|
14 |
-
private $_custom_fields = array();
|
15 |
private $_email_key = '';
|
16 |
private $_data_to_insert = array();
|
17 |
private $_number_list = 0;
|
@@ -26,43 +24,37 @@ class WJ_Import extends WYSIJA_object {
|
|
26 |
private $_emails_inserted_in_current_chunk = array(); // array of emails
|
27 |
private $_csv_file_string = '';
|
28 |
private $_data_result = array(); // used for importmatch refactor
|
29 |
-
|
30 |
|
31 |
function __construct() {
|
32 |
-
if
|
33 |
-
|
34 |
-
if
|
35 |
-
|
36 |
-
if (!empty($_REQUEST['wysija']['user_list']['list']))
|
37 |
-
$this->_number_list = count($_REQUEST['wysija']['user_list']['list']);
|
38 |
-
if (!empty($_POST['firstrowisdata']))
|
39 |
-
$this->_first_row_is_data = true;
|
40 |
-
$this->_data_numbers = array('invalid' => array(), 'inserted' => 0, 'valid_email_processed' => 0, 'list_added' => 0, 'list_user_ids' => 0, 'list_list_ids' => $this->_number_list, 'emails_queued' => 0);
|
41 |
}
|
42 |
|
43 |
/**
|
44 |
* loading file data passed in a global variable
|
45 |
* @return type
|
46 |
*/
|
47 |
-
private function _get_temp_file_info()
|
48 |
-
|
49 |
-
return unserialize(base64_decode($_REQUEST['wysija']['dataImport']));
|
50 |
}
|
51 |
|
52 |
/**
|
53 |
* loading the file based on global parameters
|
54 |
* @return string
|
55 |
*/
|
56 |
-
private function _loading_file_content()
|
57 |
// try to access the temporary file created in the previous step
|
58 |
$this->_csv_data = $this->_get_temp_file_info();
|
59 |
|
60 |
-
$helper_file = WYSIJA::get('file',
|
61 |
-
$result_file = $helper_file->get($this->_csv_data['csv'], 'import');
|
62 |
|
63 |
-
if
|
64 |
$upload_dir = wp_upload_dir();
|
65 |
-
$this->error(sprintf(__('Cannot access CSV file. Verify access rights to this directory "%1$s"',
|
66 |
return false;
|
67 |
}
|
68 |
|
@@ -70,83 +62,20 @@ class WJ_Import extends WYSIJA_object {
|
|
70 |
$this->_csv_file_string = file_get_contents($result_file);
|
71 |
}
|
72 |
|
73 |
-
private function _set_custom_fields(){
|
74 |
-
$WJ_Field = new WJ_Field();
|
75 |
-
$_custom_fields = $WJ_Field->get_all();
|
76 |
-
|
77 |
-
if(!empty($_custom_fields)){
|
78 |
-
foreach($_custom_fields as $key => &$row){
|
79 |
-
$this->_custom_fields['cf_'.$row->id] = $row;
|
80 |
-
}
|
81 |
-
}
|
82 |
-
}
|
83 |
-
|
84 |
-
/**
|
85 |
-
* Validate if a column is already matched previously
|
86 |
-
* @param string $column_name
|
87 |
-
* @return boolean
|
88 |
-
*/
|
89 |
-
private function _is_column_matched($column_name) {
|
90 |
-
if (empty($this->_data_to_insert)) {
|
91 |
-
return false;
|
92 |
-
}
|
93 |
-
$column_names = array_values($this->_data_to_insert);
|
94 |
-
return in_array(trim($column_name), $column_names);
|
95 |
-
}
|
96 |
/**
|
97 |
-
* match columns together with the csv data
|
98 |
*/
|
99 |
-
private function _match_columns_to_insert()
|
100 |
-
|
101 |
-
// we're going through all of the selected value in each dropdown when importing
|
102 |
-
foreach($this->_match as $csv_column_number => $column_in_user_table){
|
103 |
-
// Reduce matching twice the same column
|
104 |
-
if ($this->_is_column_matched($column_in_user_table))
|
105 |
-
continue;
|
106 |
|
107 |
-
|
108 |
-
if
|
109 |
-
|
110 |
-
|
111 |
-
// Check if maybe it's a new field
|
112 |
-
preg_match($this->_regex_new_field, $column_in_user_table, $maybe_newfield);
|
113 |
-
if ( !empty($maybe_newfield) && in_array($maybe_newfield[1], array('date', 'input')) ){
|
114 |
-
// TODO need to change to WJ_Field I guess when Marco is done moving the files
|
115 |
-
// saving a new custom field
|
116 |
-
$custom_field = new WJ_Field();
|
117 |
-
|
118 |
-
$custom_field->set(array(
|
119 |
-
'name' => $maybe_newfield[2],
|
120 |
-
'type' => $maybe_newfield[1],
|
121 |
-
'required' => false,
|
122 |
-
'settings' => array(
|
123 |
-
'label' => $maybe_newfield[2],
|
124 |
-
'date_type' => 'year_month_day',
|
125 |
-
'is_default_today' => 0,
|
126 |
-
'date_order' => 'mm/dd/yyyy'
|
127 |
-
)
|
128 |
-
));
|
129 |
-
|
130 |
-
$custom_field->save();
|
131 |
-
|
132 |
-
// this is the column name in the database so this is where we need to import that field
|
133 |
-
$column_in_user_table = $custom_field->user_column_name();
|
134 |
-
$this->_match[$csv_column_number] = $column_in_user_table;
|
135 |
}
|
136 |
-
|
137 |
-
|
138 |
-
// not sure why do we trim the column key ...
|
139 |
-
$this->_data_to_insert[$csv_column_number] = trim($column_in_user_table);
|
140 |
-
|
141 |
-
// this column is the email column, let's keep track of it for later validation etc..
|
142 |
-
if($column_in_user_table == 'email'){
|
143 |
-
$this->_email_key = $csv_column_number;
|
144 |
}
|
145 |
}
|
146 |
|
147 |
-
$this->_set_custom_fields();
|
148 |
-
|
149 |
-
// if the status column is not matched, we make sure that we have an entry for the status column so that we default it to some value on import
|
150 |
if(!in_array('status',$this->_data_to_insert)){
|
151 |
$this->_data_to_insert['status'] = 'status';
|
152 |
}
|
@@ -156,25 +85,25 @@ class WJ_Import extends WYSIJA_object {
|
|
156 |
* build the header of the import query
|
157 |
* @return type
|
158 |
*/
|
159 |
-
private function _get_import_query_header()
|
160 |
-
return 'INSERT IGNORE INTO [wysija]user (`'
|
161 |
}
|
162 |
|
163 |
/**
|
164 |
*
|
165 |
* @param type $array_csv
|
166 |
*/
|
167 |
-
private function _check_duplicate_emails($array_csv)
|
168 |
// look for duplicate emails
|
169 |
-
foreach
|
170 |
-
if
|
171 |
-
|
172 |
$this->_duplicate_emails_count[$csv_line[$this->_email_key]]++;
|
173 |
//$arra[$keyline]
|
174 |
-
}
|
175 |
-
$this->_duplicate_emails_count[$csv_line[$this->_email_key]]
|
176 |
}
|
177 |
-
}
|
178 |
//if the record doesn't have the attribute email then we just ignore it
|
179 |
$this->_ignored_row_count++;
|
180 |
unset($array_csv[$keyline]);
|
@@ -187,22 +116,15 @@ class WJ_Import extends WYSIJA_object {
|
|
187 |
* import a field with similar headers/columns names
|
188 |
* @return boolean
|
189 |
*/
|
190 |
-
private function _smart_column_match_recording()
|
191 |
-
if
|
192 |
//save the importing fields to be able to match them the next time
|
193 |
$import_fields = get_option('wysija_import_fields');
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
// make a column name key
|
199 |
-
$column_name_key = str_replace(array(' ','-','_'),'',strtolower($this->_header_row[$csv_column_number]));
|
200 |
-
// fill in the array of "csv column name" / "user table column" matches
|
201 |
-
$import_fields[$column_name_key] = $column_in_user_table;
|
202 |
-
|
203 |
}
|
204 |
}
|
205 |
-
|
206 |
WYSIJA::update_option('wysija_import_fields' , $import_fields);
|
207 |
return true;
|
208 |
}
|
@@ -220,47 +142,45 @@ class WJ_Import extends WYSIJA_object {
|
|
220 |
// 2-save the list if necessary
|
221 |
// 3-save the contacts and record them for each list selected
|
222 |
$this->_loading_file_content();
|
223 |
-
// convert the csv file to an array
|
224 |
$this->_csv_array = $this->_csv_to_array( $this->_csv_file_string , 0 , $this->_csv_data['fsep'] , $this->_csv_data['fenc']);
|
225 |
|
226 |
-
//
|
227 |
$this->_match_columns_to_insert();
|
228 |
|
229 |
-
$this->_header_row =
|
230 |
-
|
231 |
-
// we process the sql insertion 200 by 200 so that we are safe with the server's memory and cpu
|
232 |
$csv_chunks = array_chunk($this->_csv_array, 200);
|
233 |
$this->_csv_array = null;
|
234 |
$this->_chunks_count = 0;
|
235 |
$this->_lines_count = 0;
|
236 |
|
237 |
-
//
|
238 |
global $wpdb;
|
239 |
$wpdb->query('set session wait_timeout=600');
|
240 |
|
241 |
// loop and insert the data chunks by chunks
|
242 |
-
foreach
|
243 |
|
244 |
-
$this->_check_duplicate_emails($csv_chunk);
|
245 |
|
246 |
-
$result = $this->_import_rows($csv_chunk);
|
247 |
|
248 |
-
if
|
249 |
-
|
250 |
-
else {
|
251 |
// there was an error we try 3 more times the same chunk and se how it goes
|
252 |
-
$try
|
253 |
-
while
|
254 |
-
$result = $this->_import_rows($csv_chunk);
|
255 |
-
if
|
256 |
-
|
257 |
-
|
258 |
}
|
259 |
$try++;
|
260 |
}
|
261 |
|
262 |
-
if
|
263 |
-
$this->error(__('There seems to be an error with the list you\'re trying to import.',
|
264 |
return false;
|
265 |
}
|
266 |
}
|
@@ -274,30 +194,28 @@ class WJ_Import extends WYSIJA_object {
|
|
274 |
$this->_smart_column_match_recording();
|
275 |
|
276 |
// refresh the total count of users in wysija
|
277 |
-
$helper_user
|
278 |
$helper_user->refreshUsers();
|
279 |
|
280 |
// keep only the real duplicate emails unset the unique ones
|
281 |
// TODO check that this email duplicate function could be a memory sink hole
|
282 |
// especially that right now we don't use its value
|
283 |
-
foreach
|
284 |
-
if
|
285 |
-
unset($this->_duplicate_emails_count[$email_address]);
|
286 |
}
|
287 |
|
288 |
// how come we need to do that sometimes? how a lines count could become negative?
|
289 |
-
if
|
290 |
-
$this->_lines_count = 0;
|
291 |
|
292 |
// all of these numbers were useful at some point when we were showing more information after an import
|
293 |
$this->_data_numbers['ignored'] = ($this->_data_numbers['valid_email_processed'] - $this->_data_numbers['inserted']);
|
294 |
-
$this->_data_numbers['ignored_list'] = ( ($this->_data_numbers['list_user_ids']
|
295 |
|
296 |
|
297 |
return $this->_data_numbers;
|
298 |
}
|
299 |
|
300 |
-
public function get_duplicate_emails_count()
|
301 |
return $this->_duplicate_emails_count;
|
302 |
}
|
303 |
|
@@ -307,23 +225,22 @@ class WJ_Import extends WYSIJA_object {
|
|
307 |
* @param type $rows_to_read
|
308 |
* @param type $delimiter
|
309 |
* @param type $enclosure
|
|
|
310 |
* @return array
|
311 |
*/
|
312 |
-
private function _csv_to_array($csv_file_content, $rows_to_read = 0, $delimiter = ',', $enclosure = '')
|
313 |
$data = array();
|
314 |
|
315 |
-
|
316 |
-
$csv_data_array = explode( $this->_line_delimiter, $csv_file_content );
|
317 |
-
|
318 |
$i=1;
|
319 |
foreach($csv_data_array as $csv_line){
|
320 |
if($rows_to_read!=0 && $i> $rows_to_read) return $data;
|
321 |
|
322 |
// str_getcsv only exists in php5 and is a faster and cleaner function than our csv_explode
|
323 |
-
if
|
324 |
-
$data[]
|
325 |
-
}
|
326 |
-
|
327 |
}
|
328 |
|
329 |
$i++;
|
@@ -340,17 +257,17 @@ class WJ_Import extends WYSIJA_object {
|
|
340 |
* @param type $preserve
|
341 |
* @return type
|
342 |
*/
|
343 |
-
private function _lines_explode($csv_line, $delimiter, $enclose, $preserve
|
344 |
$resArr = array();
|
345 |
$n = 0;
|
346 |
-
if
|
347 |
$resArr = explode($delimiter, $csv_line);
|
348 |
-
}
|
349 |
$expEncArr = explode($enclose, $csv_line);
|
350 |
-
foreach
|
351 |
-
if
|
352 |
-
array_push($resArr, array_pop($resArr) . ($preserve ? $enclose : '') . $EncItem
|
353 |
-
}
|
354 |
$expDelArr = explode($delimiter, $EncItem);
|
355 |
array_push($resArr, array_pop($resArr) . array_shift($expDelArr));
|
356 |
$resArr = array_merge($resArr, $expDelArr);
|
@@ -367,21 +284,20 @@ class WJ_Import extends WYSIJA_object {
|
|
367 |
* @param array $csv_chunk
|
368 |
* @return boolean|string
|
369 |
*/
|
370 |
-
private function _import_rows($csv_chunk)
|
371 |
|
372 |
global $wpdb;
|
373 |
|
374 |
$this->_emails_inserted_in_current_chunk = array();
|
375 |
$time = time();
|
376 |
-
$lines = array();
|
377 |
$lines_count = count($csv_chunk);
|
378 |
$columns_count = count($this->_data_to_insert);
|
379 |
|
380 |
$query = $this->_get_import_query_header();
|
381 |
|
382 |
// make sure that each line has the right numbers of columns if it doesn't then we can skip it
|
383 |
-
foreach
|
384 |
-
if
|
385 |
unset($csv_chunk[$k]);
|
386 |
$lines_count--;
|
387 |
}
|
@@ -390,60 +306,59 @@ class WJ_Import extends WYSIJA_object {
|
|
390 |
$valid_email_processed = 0;
|
391 |
$j = 1;
|
392 |
|
393 |
-
foreach
|
394 |
|
395 |
// if first row is not data but header then we just skip it only on the first chunk
|
396 |
-
if
|
397 |
$j++;
|
398 |
continue;
|
399 |
}
|
400 |
|
401 |
-
$i
|
402 |
-
$values
|
403 |
|
404 |
// TODO maybe we should check the value of the status column so that if we export a wysija's subscribers' list
|
405 |
// and import it again in another site then we keep the status
|
406 |
-
if
|
407 |
-
$line['status'] = 1;
|
408 |
|
409 |
-
foreach
|
410 |
|
411 |
// make sure this column is a column we want to insert in our DB
|
412 |
-
if
|
413 |
$column_name = $this->_data_to_insert[$key_column];
|
414 |
-
$original_value_column = $value_column;
|
415 |
-
$value_column = $this->_validate_value($column_name, $value_column);
|
416 |
|
417 |
-
|
418 |
-
if(isset($this->_custom_fields[$column_name]) && $this->_custom_fields[$column_name]->type == 'date'){
|
419 |
-
$value_column = strtotime($value_column);
|
420 |
-
}
|
421 |
|
422 |
// this kind of result invalidates the whole row
|
423 |
-
if
|
424 |
// record the invalid row and continue with the loop
|
425 |
-
$this->_data_numbers['invalid'][] = $
|
426 |
unset($csv_chunk[$key_line]);
|
427 |
$lines_count--;
|
428 |
continue 2;
|
429 |
-
}
|
430 |
// only if this is the email row we record an entry in the recorded emails and the email processed count
|
431 |
-
if
|
432 |
$this->_emails_inserted_in_current_chunk[] = $value_column;
|
433 |
$valid_email_processed++;
|
434 |
}
|
435 |
}
|
436 |
|
|
|
437 |
// prepare the query
|
438 |
-
$values
|
|
|
|
|
|
|
439 |
}
|
440 |
}
|
441 |
|
442 |
-
$
|
443 |
-
$
|
|
|
|
|
444 |
}
|
445 |
|
446 |
-
$query .= implode(', ', $lines);
|
447 |
|
448 |
// replace query to import the subscribers
|
449 |
$model_wysija = new WYSIJA_model();
|
@@ -453,8 +368,8 @@ class WJ_Import extends WYSIJA_object {
|
|
453 |
$this->_data_numbers['inserted'] += $wpdb->rows_affected;
|
454 |
$this->_data_numbers['valid_email_processed'] += $valid_email_processed;
|
455 |
|
456 |
-
if
|
457 |
-
$this->error(__('Error when inserting emails.',
|
458 |
return false;
|
459 |
}
|
460 |
$time_now = time();
|
@@ -462,13 +377,12 @@ class WJ_Import extends WYSIJA_object {
|
|
462 |
|
463 |
$this->_trigger_active_autoresponders($time_now);
|
464 |
|
465 |
-
if
|
466 |
-
$this->error(__('Error when inserting list.',
|
467 |
return false;
|
468 |
}
|
469 |
|
470 |
-
if
|
471 |
-
return '0';
|
472 |
|
473 |
return $lines_count;
|
474 |
}
|
@@ -480,24 +394,26 @@ class WJ_Import extends WYSIJA_object {
|
|
480 |
* @param type $column_name
|
481 |
* @param type $value
|
482 |
*/
|
483 |
-
function _validate_value($column_name, $value)
|
484 |
$value = trim($value);
|
485 |
-
|
486 |
-
switch ($column_name) {
|
487 |
case 'email':
|
488 |
-
|
|
|
|
|
|
|
|
|
|
|
489 |
break;
|
490 |
case 'status':
|
491 |
|
492 |
-
if
|
493 |
return 1;
|
494 |
-
}
|
495 |
return -1;
|
496 |
-
}
|
497 |
return 0;
|
498 |
-
}
|
499 |
-
else
|
500 |
-
return 1;
|
501 |
break;
|
502 |
default :
|
503 |
return $value;
|
@@ -509,24 +425,24 @@ class WJ_Import extends WYSIJA_object {
|
|
509 |
* @param type $time_now
|
510 |
* @return boolean
|
511 |
*/
|
512 |
-
private function _trigger_active_autoresponders($time_now)
|
513 |
-
$helper_email = WYSIJA::get('email',
|
514 |
$model_wysija = new WYSIJA_model();
|
515 |
|
516 |
// list the active auto responders emails
|
517 |
-
$active_autoresponders_per_list = $helper_email->get_active_follow_ups(array('email_id',
|
518 |
|
519 |
-
if
|
520 |
-
foreach
|
521 |
// checking if this list has a list of follow ups
|
522 |
-
if
|
523 |
// for each follow up of that list we queu an email
|
524 |
-
foreach
|
525 |
// insert query per active followup
|
526 |
$query_queue = 'INSERT IGNORE INTO [wysija]queue (`email_id` ,`user_id`,`send_at`) ';
|
527 |
-
$query_queue .= ' SELECT '
|
528 |
$query_queue .= ' FROM [wysija]user_list as B';
|
529 |
-
$query_queue .= ' WHERE B.list_id='
|
530 |
|
531 |
$model_wysija->query($query_queue);
|
532 |
|
@@ -545,7 +461,7 @@ class WJ_Import extends WYSIJA_object {
|
|
545 |
* @param type $time_now
|
546 |
* @return type
|
547 |
*/
|
548 |
-
private function _import_new_users_into_lists($time_now)
|
549 |
global $wpdb;
|
550 |
$wpdb->rows_affected = 0;
|
551 |
$model_wysija = new WYSIJA_model();
|
@@ -555,23 +471,22 @@ class WJ_Import extends WYSIJA_object {
|
|
555 |
// insert query per list
|
556 |
$query = 'INSERT IGNORE INTO [wysija]user_list (`list_id` ,`user_id`,`sub_date`) VALUES ';
|
557 |
|
558 |
-
foreach
|
559 |
-
if
|
560 |
-
continue;
|
561 |
// for each list pre selected go through that process
|
562 |
-
foreach
|
563 |
|
564 |
// inserting each user id to this list
|
565 |
-
$query.='('
|
566 |
|
567 |
// if this is not the last row we put a comma for the next row
|
568 |
-
if
|
569 |
$query.=' , ';
|
570 |
}
|
571 |
}
|
572 |
|
573 |
// if this is not the last row we put a comma for the next row
|
574 |
-
if
|
575 |
$query.=',';
|
576 |
}
|
577 |
}
|
@@ -587,21 +502,16 @@ class WJ_Import extends WYSIJA_object {
|
|
587 |
* get a list of user_ids freshly imported
|
588 |
* @return type
|
589 |
*/
|
590 |
-
private function _get_imported_user_ids()
|
591 |
-
$model_user = WYSIJA::get('user',
|
592 |
// select query to get all of the ids of the emails that have just been inserted
|
593 |
-
return $model_user->get(array('user_id'), array('email'
|
594 |
}
|
595 |
|
596 |
-
|
597 |
-
/**
|
598 |
-
* this save a default list of column matching to ease the import process, this is done only the first time when the
|
599 |
-
* field is not populated yet
|
600 |
-
*/
|
601 |
private function _save_default_import_field_match(){
|
602 |
$import_fields = get_option('wysija_import_fields');
|
603 |
-
if
|
604 |
-
$import_fields
|
605 |
'fname' => 'firstname',
|
606 |
'firstname' => 'firstname',
|
607 |
'prenom' => 'firstname',
|
@@ -613,149 +523,122 @@ class WJ_Import extends WYSIJA_object {
|
|
613 |
'ip' => 'ip',
|
614 |
'addresseip' => 'ip',
|
615 |
);
|
616 |
-
WYSIJA::update_option('wysija_import_fields'
|
617 |
}
|
618 |
}
|
619 |
|
620 |
-
|
621 |
-
|
622 |
-
* put the whole file or posted string into one string and clean up the string that may cause trouble during import
|
623 |
-
* @return boolean
|
624 |
-
*/
|
625 |
-
private function _get_csv_file_cleaned_up(){
|
626 |
-
// is it a text import or a file import?
|
627 |
if($_POST['wysija']['import']['type'] == 'copy'){
|
628 |
if(!isset($_POST['wysija']['user_list']['csv'])){
|
629 |
// memory limit has been reached
|
630 |
-
$this->error(__('The list you\'ve pasted is too big for the browser. <strong>Upload the file</strong> instead.',
|
631 |
return false;
|
632 |
}
|
633 |
$this->_csv_file_string = trim(stripslashes($_POST['wysija']['user_list']['csv']));
|
634 |
-
|
635 |
}else{
|
636 |
-
//
|
|
|
637 |
$this->_csv_file_string = trim(file_get_contents($_FILES['importfile']['tmp_name']));
|
638 |
}
|
639 |
|
640 |
-
$this->_csv_file_string = str_replace(array("\r",
|
641 |
|
642 |
-
|
643 |
-
// this might be gmail recipients(copy-paste from a gmail account) rare paste ...
|
644 |
if(!preg_match_all('/<([a-z0-9_\'&\.\-\+])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,10})+>/i' , $this->_csv_file_string , $matches)){
|
645 |
//return false;
|
646 |
}else{
|
647 |
|
648 |
-
|
649 |
-
$this->_csv_file_string = trim($this->_csv_file_string) . ',';
|
650 |
|
|
|
|
|
|
|
651 |
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
}
|
656 |
-
$this->_csv_file_string = trim($this->_csv_file_string);
|
657 |
-
}
|
658 |
-
}
|
659 |
|
|
|
|
|
|
|
|
|
660 |
|
661 |
-
/**
|
662 |
-
* try to figure out the format of that CSV file, which separators and enclosure strings does it use
|
663 |
-
* @return boolean
|
664 |
-
*/
|
665 |
private function _run_test_on_csv_file(){
|
666 |
// try different set of enclosure and separator for the csv which can have different look depending on the data carried
|
667 |
-
$field_separators_to_test
|
668 |
-
$
|
669 |
$this->_csv_data['fsep'] = false;
|
670 |
-
$this->_csv_data['fenc']
|
671 |
$helper_user = WYSIJA::get('user','helper');
|
672 |
-
|
673 |
-
foreach($field_enclosers_to_test as $enclosure){
|
674 |
foreach($field_separators_to_test as $fsep){
|
675 |
|
676 |
-
// testing different combinations of separator and
|
677 |
-
$this->_csv_array = $this->_csv_to_array(
|
678 |
|
679 |
-
|
680 |
-
|
681 |
-
if ( count( $this->_csv_array[0] ) > 1 || $helper_user->validEmail( trim( $this->_csv_array[0][0] ) ) || $helper_user->validEmail( trim( $this->_csv_array[1][0] ) ) ) {
|
682 |
$this->_csv_data['fsep'] = $fsep;
|
683 |
$this->_csv_data['fenc'] = $enclosure;
|
684 |
break(2);
|
685 |
}
|
|
|
686 |
}
|
687 |
}
|
688 |
}
|
689 |
|
690 |
-
//
|
691 |
if(empty($this->_csv_data['fsep'])){
|
692 |
-
$this->notice(
|
693 |
-
"%s <a href='http://support.mailpoet.com/knowledgebase/importing-subscribers-with-a-csv-file/' target='_blank'>%s</a>",
|
694 |
-
__("The data you are trying to import doesn't appear to be in the CSV format (Comma Separated Values).", WYSIJA),
|
695 |
-
__("Read More", WYSIJA)
|
696 |
-
) );
|
697 |
$this->notice(__('The first line of a CSV file should be the column headers : "email","lastname","firstname".',WYSIJA));
|
698 |
$this->notice(__('The second line of a CSV file should be a set of values : "joeeg@example.com","Average","Joe".',WYSIJA));
|
699 |
|
700 |
-
$this->notice(__('The two first lines of the file you\'ve uploaded are as follow:',
|
701 |
|
702 |
-
$arraylines
|
703 |
|
704 |
-
if
|
705 |
-
|
706 |
-
|
707 |
-
$text = $arraylines[0];
|
708 |
-
$this->notice('<strong>' . $text . '</strong>');
|
709 |
|
710 |
-
if
|
711 |
-
|
712 |
-
|
713 |
-
$text = $arraylines[1];
|
714 |
-
$this->notice('<strong>' . $text . '</strong>');
|
715 |
|
716 |
return false;
|
717 |
}
|
718 |
|
719 |
// test the size of the file
|
720 |
-
$temp_csv_array = $this->_csv_to_array($this->_csv_file_string, 0, $this->_csv_data['fsep'], $this->_csv_data['fenc']);
|
721 |
|
722 |
$this->_data_result['totalrows'] = count($temp_csv_array);
|
723 |
end($temp_csv_array);
|
724 |
$this->_data_result['lastrow'] = current($temp_csv_array);
|
725 |
}
|
726 |
-
|
727 |
-
|
728 |
-
/**
|
729 |
-
* save the CSV string into a file so that we can use it later in the next step of the process
|
730 |
-
* @return boolean|string
|
731 |
-
*/
|
732 |
private function _save_csv_file(){
|
733 |
// try to make a wysija dir to save the import file
|
734 |
-
$helper_file = WYSIJA::get('file',
|
735 |
$result_dir = $helper_file->makeDir('import');
|
736 |
-
if
|
737 |
return false;
|
738 |
}
|
739 |
|
740 |
-
$file_name = 'import-'
|
741 |
-
$handle = fopen($result_dir
|
742 |
fwrite($handle, $this->_csv_file_string);
|
743 |
fclose($handle);
|
744 |
|
745 |
return $file_name;
|
746 |
}
|
747 |
|
748 |
-
|
749 |
-
/**
|
750 |
-
* detect which column is an email one
|
751 |
-
*/
|
752 |
private function _test_csv_emails(){
|
753 |
$found_email = 0;
|
754 |
$this->_email_key = array();
|
755 |
-
$helper_user = WYSIJA::get('user',
|
756 |
-
foreach
|
757 |
-
foreach
|
758 |
-
if
|
759 |
$found_email++;
|
760 |
|
761 |
$this->_email_key[$key_column] = $this->_csv_array[0][$key_column];
|
@@ -764,57 +647,36 @@ class WJ_Import extends WYSIJA_object {
|
|
764 |
}
|
765 |
|
766 |
$this->_data_result['errormatch'] = false;
|
767 |
-
$
|
768 |
-
|
769 |
-
|
770 |
-
}
|
771 |
-
|
772 |
-
if ((count($this->_csv_array) < 2)) {
|
773 |
-
$this->error(__('You\'re import file is not valid.', WYSIJA).' '.$check_again, true);
|
774 |
}
|
775 |
}
|
776 |
|
777 |
-
|
778 |
-
/**
|
779 |
-
* function used to scan the CSV before trying to match each column with our own fields
|
780 |
-
* @return boolean
|
781 |
-
*/
|
782 |
public function scan_csv_file(){
|
783 |
$this->_data_result = array();
|
784 |
|
785 |
-
// make sure the import match will be as easy as possible with default matches
|
786 |
if( $this->_save_default_import_field_match() === false) return false;
|
787 |
-
|
788 |
-
if( $this->_get_csv_file_cleaned_up() === false) return false;
|
789 |
-
// find out the format of that CSV file comma semi colon etc ..
|
790 |
if( $this->_run_test_on_csv_file() === false) return false;
|
791 |
|
792 |
-
// save the string into a file for later use
|
793 |
$file_name = $this->_save_csv_file();
|
794 |
-
if
|
795 |
-
return false;
|
796 |
|
797 |
-
// look for the email column
|
798 |
$this->_test_csv_emails();
|
799 |
|
800 |
-
// stock the data we will use in the next page
|
801 |
$this->_data_result['csv'] = $this->_csv_array;
|
802 |
-
|
803 |
-
|
804 |
-
'
|
805 |
-
'
|
806 |
-
|
807 |
-
$this->_data_result['dataImport'] = base64_encode(serialize($data_import));
|
808 |
-
|
809 |
$this->_data_result['keyemail'] = $this->_email_key;
|
810 |
|
811 |
//test if the first row is data or not
|
812 |
//test the email column
|
813 |
-
foreach
|
814 |
-
$this->_email_key = $k;
|
815 |
|
816 |
-
|
817 |
-
// test whether the first row is a data row or is a descriptive header row
|
818 |
$helper_user = WYSIJA::get('user','helper');
|
819 |
if($helper_user->validEmail( $this->_email_key )){
|
820 |
$this->_data_result['firstrowisdata']=true;
|
@@ -824,5 +686,4 @@ class WJ_Import extends WYSIJA_object {
|
|
824 |
|
825 |
return $this->_data_result;
|
826 |
}
|
827 |
-
|
828 |
-
}
|
1 |
<?php
|
2 |
|
3 |
/**
|
4 |
+
* Class Import.
|
5 |
+
*
|
6 |
+
* Importing subscribers
|
7 |
+
*/
|
8 |
+
class WJ_Import extends WYSIJA_object{
|
9 |
|
10 |
private $_header_row = array();
|
11 |
private $_csv_data = array();
|
12 |
private $_match = array();
|
|
|
|
|
13 |
private $_email_key = '';
|
14 |
private $_data_to_insert = array();
|
15 |
private $_number_list = 0;
|
24 |
private $_emails_inserted_in_current_chunk = array(); // array of emails
|
25 |
private $_csv_file_string = '';
|
26 |
private $_data_result = array(); // used for importmatch refactor
|
27 |
+
|
28 |
|
29 |
function __construct() {
|
30 |
+
if(!empty($_POST['wysija']['match'])) $this->_match = $_POST['wysija']['match'];
|
31 |
+
if(!empty($_REQUEST['wysija']['user_list']['list'])) $this->_number_list = count($_REQUEST['wysija']['user_list']['list']);
|
32 |
+
if(!empty($_POST['firstrowisdata'])) $this->_first_row_is_data = true;
|
33 |
+
$this->_data_numbers = array( 'invalid'=>array() , 'inserted'=>0 , 'valid_email_processed'=>0 , 'list_added'=>0 , 'list_user_ids'=>0 , 'list_list_ids' => $this->_number_list , 'emails_queued'=>0 );
|
|
|
|
|
|
|
|
|
|
|
34 |
}
|
35 |
|
36 |
/**
|
37 |
* loading file data passed in a global variable
|
38 |
* @return type
|
39 |
*/
|
40 |
+
private function _get_temp_file_info(){
|
41 |
+
if(!empty($_REQUEST['wysija']['dataImport'])) return unserialize(base64_decode($_REQUEST['wysija']['dataImport']));
|
|
|
42 |
}
|
43 |
|
44 |
/**
|
45 |
* loading the file based on global parameters
|
46 |
* @return string
|
47 |
*/
|
48 |
+
private function _loading_file_content(){
|
49 |
// try to access the temporary file created in the previous step
|
50 |
$this->_csv_data = $this->_get_temp_file_info();
|
51 |
|
52 |
+
$helper_file = WYSIJA::get('file','helper');
|
53 |
+
$result_file = $helper_file->get( $this->_csv_data['csv'] , 'import' );
|
54 |
|
55 |
+
if(!$result_file){
|
56 |
$upload_dir = wp_upload_dir();
|
57 |
+
$this->error(sprintf(__('Cannot access CSV file. Verify access rights to this directory "%1$s"',WYSIJA), $upload_dir['basedir']),true);
|
58 |
return false;
|
59 |
}
|
60 |
|
62 |
$this->_csv_file_string = file_get_contents($result_file);
|
63 |
}
|
64 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
65 |
/**
|
66 |
+
* try to match columns together with the csv data
|
67 |
*/
|
68 |
+
private function _match_columns_to_insert(){
|
|
|
|
|
|
|
|
|
|
|
|
|
69 |
|
70 |
+
foreach($this->_match as $key => $val){
|
71 |
+
if($val != 'nomatch'){
|
72 |
+
$this->_data_to_insert[$key] = trim($val);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
}
|
74 |
+
if($val == 'email'){
|
75 |
+
$this->_email_key = $key;
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
}
|
77 |
}
|
78 |
|
|
|
|
|
|
|
79 |
if(!in_array('status',$this->_data_to_insert)){
|
80 |
$this->_data_to_insert['status'] = 'status';
|
81 |
}
|
85 |
* build the header of the import query
|
86 |
* @return type
|
87 |
*/
|
88 |
+
private function _get_import_query_header(){
|
89 |
+
return 'INSERT IGNORE INTO [wysija]user (`'.implode('` ,`',$this->_data_to_insert).'`,`created_at`) VALUES ';
|
90 |
}
|
91 |
|
92 |
/**
|
93 |
*
|
94 |
* @param type $array_csv
|
95 |
*/
|
96 |
+
private function _check_duplicate_emails($array_csv){
|
97 |
// look for duplicate emails
|
98 |
+
foreach($array_csv as $keyline => $csv_line){
|
99 |
+
if(isset($csv_line[$this->_email_key])){
|
100 |
+
if(isset($this->_duplicate_emails_count[$csv_line[$this->_email_key]])) {
|
101 |
$this->_duplicate_emails_count[$csv_line[$this->_email_key]]++;
|
102 |
//$arra[$keyline]
|
103 |
+
}else{
|
104 |
+
$this->_duplicate_emails_count[$csv_line[$this->_email_key]]=1;
|
105 |
}
|
106 |
+
}else{
|
107 |
//if the record doesn't have the attribute email then we just ignore it
|
108 |
$this->_ignored_row_count++;
|
109 |
unset($array_csv[$keyline]);
|
116 |
* import a field with similar headers/columns names
|
117 |
* @return boolean
|
118 |
*/
|
119 |
+
private function _smart_column_match_recording(){
|
120 |
+
if($this->_first_row_is_data === false) {
|
121 |
//save the importing fields to be able to match them the next time
|
122 |
$import_fields = get_option('wysija_import_fields');
|
123 |
+
foreach($_POST['wysija']['match'] as $key => $val){
|
124 |
+
if($val != 'nomatch') {
|
125 |
+
$import_fields[$this->_header_row[$key]] = $val;
|
|
|
|
|
|
|
|
|
|
|
|
|
126 |
}
|
127 |
}
|
|
|
128 |
WYSIJA::update_option('wysija_import_fields' , $import_fields);
|
129 |
return true;
|
130 |
}
|
142 |
// 2-save the list if necessary
|
143 |
// 3-save the contacts and record them for each list selected
|
144 |
$this->_loading_file_content();
|
145 |
+
// convert the csv file to an array
|
146 |
$this->_csv_array = $this->_csv_to_array( $this->_csv_file_string , 0 , $this->_csv_data['fsep'] , $this->_csv_data['fenc']);
|
147 |
|
148 |
+
// try to match columns together with the csv data
|
149 |
$this->_match_columns_to_insert();
|
150 |
|
151 |
+
$this->_header_row = $this->_csv_array[0];
|
152 |
+
// we process the sql insertion 200 by 200 so that we are safe with the server
|
|
|
153 |
$csv_chunks = array_chunk($this->_csv_array, 200);
|
154 |
$this->_csv_array = null;
|
155 |
$this->_chunks_count = 0;
|
156 |
$this->_lines_count = 0;
|
157 |
|
158 |
+
// to avoid timeout when importing a lot of data apparently.
|
159 |
global $wpdb;
|
160 |
$wpdb->query('set session wait_timeout=600');
|
161 |
|
162 |
// loop and insert the data chunks by chunks
|
163 |
+
foreach($csv_chunks as $key_chunk => $csv_chunk){
|
164 |
|
165 |
+
$this->_check_duplicate_emails( $csv_chunk );
|
166 |
|
167 |
+
$result = $this->_import_rows( $csv_chunk );
|
168 |
|
169 |
+
if($result !== false) $this->_chunks_count++;
|
170 |
+
else{
|
|
|
171 |
// there was an error we try 3 more times the same chunk and se how it goes
|
172 |
+
$try=0;
|
173 |
+
while($result === false && $try < 3){
|
174 |
+
$result = $this->_import_rows( $csv_chunk);
|
175 |
+
if($result !== false){
|
176 |
+
$this->_chunks_count++;
|
177 |
+
break;
|
178 |
}
|
179 |
$try++;
|
180 |
}
|
181 |
|
182 |
+
if($result === false ){
|
183 |
+
$this->error(__('There seems to be an error with the list you\'re trying to import.',WYSIJA),true);
|
184 |
return false;
|
185 |
}
|
186 |
}
|
194 |
$this->_smart_column_match_recording();
|
195 |
|
196 |
// refresh the total count of users in wysija
|
197 |
+
$helper_user=WYSIJA::get('user','helper');
|
198 |
$helper_user->refreshUsers();
|
199 |
|
200 |
// keep only the real duplicate emails unset the unique ones
|
201 |
// TODO check that this email duplicate function could be a memory sink hole
|
202 |
// especially that right now we don't use its value
|
203 |
+
foreach($this->_duplicate_emails_count as $email_address => $times_email_in_csv){
|
204 |
+
if($times_email_in_csv == 1) unset($this->_duplicate_emails_count[$email_address]);
|
|
|
205 |
}
|
206 |
|
207 |
// how come we need to do that sometimes? how a lines count could become negative?
|
208 |
+
if($this->_lines_count < 0) $this->_lines_count = 0;
|
|
|
209 |
|
210 |
// all of these numbers were useful at some point when we were showing more information after an import
|
211 |
$this->_data_numbers['ignored'] = ($this->_data_numbers['valid_email_processed'] - $this->_data_numbers['inserted']);
|
212 |
+
$this->_data_numbers['ignored_list'] = ( ($this->_data_numbers['list_user_ids']*$this->_data_numbers['list_list_ids']) - $this->_data_numbers['list_added'] );
|
213 |
|
214 |
|
215 |
return $this->_data_numbers;
|
216 |
}
|
217 |
|
218 |
+
public function get_duplicate_emails_count(){
|
219 |
return $this->_duplicate_emails_count;
|
220 |
}
|
221 |
|
225 |
* @param type $rows_to_read
|
226 |
* @param type $delimiter
|
227 |
* @param type $enclosure
|
228 |
+
* @param type $line_delimiter
|
229 |
* @return array
|
230 |
*/
|
231 |
+
private function _csv_to_array($csv_file_content , $rows_to_read = 0 , $delimiter = ',' , $enclosure = '' ){
|
232 |
$data = array();
|
233 |
|
234 |
+
$csv_data_array = explode( $this->_line_delimiter , $csv_file_content );
|
|
|
|
|
235 |
$i=1;
|
236 |
foreach($csv_data_array as $csv_line){
|
237 |
if($rows_to_read!=0 && $i> $rows_to_read) return $data;
|
238 |
|
239 |
// str_getcsv only exists in php5 and is a faster and cleaner function than our csv_explode
|
240 |
+
if(!function_exists('str_getcsv')){
|
241 |
+
$data[]= $this->_lines_explode($csv_line, $delimiter,$enclosure);
|
242 |
+
}else{
|
243 |
+
$data[] = str_getcsv($csv_line, $delimiter,$enclosure);
|
244 |
}
|
245 |
|
246 |
$i++;
|
257 |
* @param type $preserve
|
258 |
* @return type
|
259 |
*/
|
260 |
+
private function _lines_explode($csv_line , $delimiter , $enclose , $preserve=false){
|
261 |
$resArr = array();
|
262 |
$n = 0;
|
263 |
+
if(empty($enclose)){
|
264 |
$resArr = explode($delimiter, $csv_line);
|
265 |
+
}else{
|
266 |
$expEncArr = explode($enclose, $csv_line);
|
267 |
+
foreach($expEncArr as $EncItem){
|
268 |
+
if($n++%2){
|
269 |
+
array_push($resArr, array_pop($resArr) . ($preserve ? $enclose : '') . $EncItem.( $preserve ? $enclose : ''));
|
270 |
+
}else{
|
271 |
$expDelArr = explode($delimiter, $EncItem);
|
272 |
array_push($resArr, array_pop($resArr) . array_shift($expDelArr));
|
273 |
$resArr = array_merge($resArr, $expDelArr);
|
284 |
* @param array $csv_chunk
|
285 |
* @return boolean|string
|
286 |
*/
|
287 |
+
private function _import_rows( $csv_chunk ){
|
288 |
|
289 |
global $wpdb;
|
290 |
|
291 |
$this->_emails_inserted_in_current_chunk = array();
|
292 |
$time = time();
|
|
|
293 |
$lines_count = count($csv_chunk);
|
294 |
$columns_count = count($this->_data_to_insert);
|
295 |
|
296 |
$query = $this->_get_import_query_header();
|
297 |
|
298 |
// make sure that each line has the right numbers of columns if it doesn't then we can skip it
|
299 |
+
foreach($csv_chunk as $k => $line){
|
300 |
+
if(!(count($line) >= (count($this->_data_to_insert) - 1))){
|
301 |
unset($csv_chunk[$k]);
|
302 |
$lines_count--;
|
303 |
}
|
306 |
$valid_email_processed = 0;
|
307 |
$j = 1;
|
308 |
|
309 |
+
foreach($csv_chunk as $key_line => $line){
|
310 |
|
311 |
// if first row is not data but header then we just skip it only on the first chunk
|
312 |
+
if($this->_first_row_is_data === false && $j == 1 && $this->_chunks_count == 0) {
|
313 |
$j++;
|
314 |
continue;
|
315 |
}
|
316 |
|
317 |
+
$i=1;
|
318 |
+
$values='';
|
319 |
|
320 |
// TODO maybe we should check the value of the status column so that if we export a wysija's subscribers' list
|
321 |
// and import it again in another site then we keep the status
|
322 |
+
if(isset($this->_data_to_insert['status'])) $line['status']=1;
|
|
|
323 |
|
324 |
+
foreach($line as $key_column => &$value_column){
|
325 |
|
326 |
// make sure this column is a column we want to insert in our DB
|
327 |
+
if(isset($this->_data_to_insert[$key_column])){
|
328 |
$column_name = $this->_data_to_insert[$key_column];
|
|
|
|
|
329 |
|
330 |
+
$value_column = $this->_validate_value($column_name , $value_column);
|
|
|
|
|
|
|
331 |
|
332 |
// this kind of result invalidates the whole row
|
333 |
+
if($value_column === false){
|
334 |
// record the invalid row and continue with the loop
|
335 |
+
$this->_data_numbers['invalid'][] = $value_column;
|
336 |
unset($csv_chunk[$key_line]);
|
337 |
$lines_count--;
|
338 |
continue 2;
|
339 |
+
}else{
|
340 |
// only if this is the email row we record an entry in the recorded emails and the email processed count
|
341 |
+
if($this->_email_key === $key_column){
|
342 |
$this->_emails_inserted_in_current_chunk[] = $value_column;
|
343 |
$valid_email_processed++;
|
344 |
}
|
345 |
}
|
346 |
|
347 |
+
|
348 |
// prepare the query
|
349 |
+
$values.="'". mysql_real_escape_string($value_column,$wpdb->dbh)."'";
|
350 |
+
if($columns_count > $i) $values .= ',';
|
351 |
+
else $values.=','.$time;
|
352 |
+
$i++;
|
353 |
}
|
354 |
}
|
355 |
|
356 |
+
$query .= " ($values) ";
|
357 |
+
if($lines_count > $j) $query .= ',';
|
358 |
+
$j++;
|
359 |
+
|
360 |
}
|
361 |
|
|
|
362 |
|
363 |
// replace query to import the subscribers
|
364 |
$model_wysija = new WYSIJA_model();
|
368 |
$this->_data_numbers['inserted'] += $wpdb->rows_affected;
|
369 |
$this->_data_numbers['valid_email_processed'] += $valid_email_processed;
|
370 |
|
371 |
+
if($import_query === false) {
|
372 |
+
$this->error(__('Error when inserting emails.',WYSIJA),true);
|
373 |
return false;
|
374 |
}
|
375 |
$time_now = time();
|
377 |
|
378 |
$this->_trigger_active_autoresponders($time_now);
|
379 |
|
380 |
+
if($result_query_import_list === false) {
|
381 |
+
$this->error(__('Error when inserting list.',WYSIJA),true);
|
382 |
return false;
|
383 |
}
|
384 |
|
385 |
+
if( $import_query == 0 ) return '0';
|
|
|
386 |
|
387 |
return $lines_count;
|
388 |
}
|
394 |
* @param type $column_name
|
395 |
* @param type $value
|
396 |
*/
|
397 |
+
function _validate_value($column_name , $value){
|
398 |
$value = trim($value);
|
399 |
+
switch($column_name){
|
|
|
400 |
case 'email':
|
401 |
+
$helper_user = WYSIJA::get('user','helper');
|
402 |
+
if($helper_user->validEmail($value)){
|
403 |
+
return $value;
|
404 |
+
}else{
|
405 |
+
return false;
|
406 |
+
}
|
407 |
break;
|
408 |
case 'status':
|
409 |
|
410 |
+
if(in_array(strtolower($value),array('subscribed','confirmed',1,'1','true'))){
|
411 |
return 1;
|
412 |
+
}elseif(in_array(strtolower($value),array('unsubscribed',-1,'-1','false'))){
|
413 |
return -1;
|
414 |
+
}elseif(in_array(strtolower($value),array('unconfirmed',0,'0'))){
|
415 |
return 0;
|
416 |
+
}else return 1;
|
|
|
|
|
417 |
break;
|
418 |
default :
|
419 |
return $value;
|
425 |
* @param type $time_now
|
426 |
* @return boolean
|
427 |
*/
|
428 |
+
private function _trigger_active_autoresponders($time_now){
|
429 |
+
$helper_email = WYSIJA::get('email','helper');
|
430 |
$model_wysija = new WYSIJA_model();
|
431 |
|
432 |
// list the active auto responders emails
|
433 |
+
$active_autoresponders_per_list = $helper_email->get_active_follow_ups(array('email_id','params'),true);
|
434 |
|
435 |
+
if(!empty($active_autoresponders_per_list)){
|
436 |
+
foreach($_REQUEST['wysija']['user_list']['list'] as $list_id){
|
437 |
// checking if this list has a list of follow ups
|
438 |
+
if(isset($active_autoresponders_per_list[$list_id])){
|
439 |
// for each follow up of that list we queu an email
|
440 |
+
foreach($active_autoresponders_per_list[$list_id] as $key_queue => $follow_up){
|
441 |
// insert query per active followup
|
442 |
$query_queue = 'INSERT IGNORE INTO [wysija]queue (`email_id` ,`user_id`,`send_at`) ';
|
443 |
+
$query_queue .= ' SELECT '.$follow_up['email_id'].' , B.user_id , '.($time_now+$follow_up['delay']);
|
444 |
$query_queue .= ' FROM [wysija]user_list as B';
|
445 |
+
$query_queue .= ' WHERE B.list_id='.(int)$list_id.' AND sub_date='.$time_now;
|
446 |
|
447 |
$model_wysija->query($query_queue);
|
448 |
|
461 |
* @param type $time_now
|
462 |
* @return type
|
463 |
*/
|
464 |
+
private function _import_new_users_into_lists($time_now){
|
465 |
global $wpdb;
|
466 |
$wpdb->rows_affected = 0;
|
467 |
$model_wysija = new WYSIJA_model();
|
471 |
// insert query per list
|
472 |
$query = 'INSERT IGNORE INTO [wysija]user_list (`list_id` ,`user_id`,`sub_date`) VALUES ';
|
473 |
|
474 |
+
foreach($_REQUEST['wysija']['user_list']['list'] as $keyl=> $list_id){
|
475 |
+
if(empty($list_id)) continue;
|
|
|
476 |
// for each list pre selected go through that process
|
477 |
+
foreach($user_ids as $key => $user_data){
|
478 |
|
479 |
// inserting each user id to this list
|
480 |
+
$query.='('.$list_id.' , '.$user_data['user_id'].' , '.$time_now.')';
|
481 |
|
482 |
// if this is not the last row we put a comma for the next row
|
483 |
+
if(count($user_ids) > ($key+1)){
|
484 |
$query.=' , ';
|
485 |
}
|
486 |
}
|
487 |
|
488 |
// if this is not the last row we put a comma for the next row
|
489 |
+
if(count($_REQUEST['wysija']['user_list']['list'])>($keyl+1)){
|
490 |
$query.=',';
|
491 |
}
|
492 |
}
|
502 |
* get a list of user_ids freshly imported
|
503 |
* @return type
|
504 |
*/
|
505 |
+
private function _get_imported_user_ids(){
|
506 |
+
$model_user = WYSIJA::get('user','model');
|
507 |
// select query to get all of the ids of the emails that have just been inserted
|
508 |
+
return $model_user->get( array('user_id') , array('email'=>$this->_emails_inserted_in_current_chunk) );
|
509 |
}
|
510 |
|
|
|
|
|
|
|
|
|
|
|
511 |
private function _save_default_import_field_match(){
|
512 |
$import_fields = get_option('wysija_import_fields');
|
513 |
+
if(!$import_fields) {
|
514 |
+
$import_fields=array(
|
515 |
'fname' => 'firstname',
|
516 |
'firstname' => 'firstname',
|
517 |
'prenom' => 'firstname',
|
523 |
'ip' => 'ip',
|
524 |
'addresseip' => 'ip',
|
525 |
);
|
526 |
+
WYSIJA::update_option('wysija_import_fields',$import_fields);
|
527 |
}
|
528 |
}
|
529 |
|
530 |
+
private function _get_csv_file_cleanedup(){
|
531 |
+
//is it a text import or a file import?
|
|
|
|
|
|
|
|
|
|
|
532 |
if($_POST['wysija']['import']['type'] == 'copy'){
|
533 |
if(!isset($_POST['wysija']['user_list']['csv'])){
|
534 |
// memory limit has been reached
|
535 |
+
$this->error(__('The list you\'ve pasted is too big for the browser. <strong>Upload the file</strong> instead.',WYSIJA),true);
|
536 |
return false;
|
537 |
}
|
538 |
$this->_csv_file_string = trim(stripslashes($_POST['wysija']['user_list']['csv']));
|
|
|
539 |
}else{
|
540 |
+
//dbg($_FILES);
|
541 |
+
//move_uploaded_file($_importfile, $destination);
|
542 |
$this->_csv_file_string = trim(file_get_contents($_FILES['importfile']['tmp_name']));
|
543 |
}
|
544 |
|
545 |
+
$this->_csv_file_string = str_replace(array("\r","\n\n","\n\t\t\n\t\n\t\n\t\n","\n\t\t\n\t\n\t\n","\xEF\xBB\xBF","\n\t\n","\n(+1)"),array("\n","\n","\n ;","\n",'',';','') , $this->_csv_file_string);
|
546 |
|
547 |
+
//this might be gmail recipients rare paste ...
|
|
|
548 |
if(!preg_match_all('/<([a-z0-9_\'&\.\-\+])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,10})+>/i' , $this->_csv_file_string , $matches)){
|
549 |
//return false;
|
550 |
}else{
|
551 |
|
552 |
+
if(substr($this->_csv_file_string, -1)!=",") $this->_csv_file_string = trim($this->_csv_file_string).',';
|
|
|
553 |
|
554 |
+
$this->_csv_file_string = str_replace(array(">, \r",">, \n",">,\r",">,\n",'>, '),'>,' , $this->_csv_file_string);
|
555 |
+
$matchess = explode('>,' , $this->_csv_file_string);
|
556 |
+
array_pop($matchess);
|
557 |
|
558 |
+
if(count($matches[0]) == count($matchess)){
|
559 |
+
//this is gmail simple paste
|
560 |
+
$this->_csv_file_string = str_replace(array('>,','<'),array("\n" , ',') , $this->_csv_file_string);
|
|
|
|
|
|
|
|
|
561 |
|
562 |
+
}
|
563 |
+
$this->_csv_file_string = trim($this->_csv_file_string);
|
564 |
+
}
|
565 |
+
}
|
566 |
|
|
|
|
|
|
|
|
|
567 |
private function _run_test_on_csv_file(){
|
568 |
// try different set of enclosure and separator for the csv which can have different look depending on the data carried
|
569 |
+
$field_separators_to_test=array(',',';',"\t");
|
570 |
+
$field_enclosur_to_test=array('"','');
|
571 |
$this->_csv_data['fsep'] = false;
|
572 |
+
$this->_csv_data['fenc']='';
|
573 |
$helper_user = WYSIJA::get('user','helper');
|
574 |
+
foreach($field_enclosur_to_test as $enclosure){
|
|
|
575 |
foreach($field_separators_to_test as $fsep){
|
576 |
|
577 |
+
// testing different combinations of separator and encloser
|
578 |
+
$this->_csv_array = $this->_csv_to_array($this->_csv_file_string , 4 , $fsep , $enclosure);
|
579 |
|
580 |
+
if((count($this->_csv_array)>1 && count($this->_csv_array[0])==count($this->_csv_array[1]))){
|
581 |
+
if(count($this->_csv_array[0])>1 || $helper_user->validEmail(trim($this->_csv_array[0][0])) || $helper_user->validEmail(trim($this->_csv_array[1][0]))){
|
|
|
582 |
$this->_csv_data['fsep'] = $fsep;
|
583 |
$this->_csv_data['fenc'] = $enclosure;
|
584 |
break(2);
|
585 |
}
|
586 |
+
|
587 |
}
|
588 |
}
|
589 |
}
|
590 |
|
591 |
+
//if it is not a csv file we come out
|
592 |
if(empty($this->_csv_data['fsep'])){
|
593 |
+
$this->notice(str_replace(array('[link]','[/link]'),array('<a href="#">','</a>'),__('The data you are trying to import doesn\'t appear to be in the CSV format (Comma Separated Values). [link]Read more[/link].',WYSIJA)));
|
|
|
|
|
|
|
|
|
594 |
$this->notice(__('The first line of a CSV file should be the column headers : "email","lastname","firstname".',WYSIJA));
|
595 |
$this->notice(__('The second line of a CSV file should be a set of values : "joeeg@example.com","Average","Joe".',WYSIJA));
|
596 |
|
597 |
+
$this->notice(__('The two first lines of the file you\'ve uploaded are as follow:',WYSIJA));
|
598 |
|
599 |
+
$arraylines=explode("\n",$this->_csv_file_string);
|
600 |
|
601 |
+
if(empty($arraylines[0])) $text=__('Line is empty',WYSIJA);
|
602 |
+
else $text=$arraylines[0];
|
603 |
+
$this->notice('<strong>'.$text.'</strong>');
|
|
|
|
|
604 |
|
605 |
+
if(empty($arraylines[1])) $text=__('Line is empty',WYSIJA);
|
606 |
+
else $text=$arraylines[1];
|
607 |
+
$this->notice('<strong>'.$text.'</strong>');
|
|
|
|
|
608 |
|
609 |
return false;
|
610 |
}
|
611 |
|
612 |
// test the size of the file
|
613 |
+
$temp_csv_array = $this->_csv_to_array( $this->_csv_file_string , 0 , $this->_csv_data['fsep'] , $this->_csv_data['fenc']);
|
614 |
|
615 |
$this->_data_result['totalrows'] = count($temp_csv_array);
|
616 |
end($temp_csv_array);
|
617 |
$this->_data_result['lastrow'] = current($temp_csv_array);
|
618 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
619 |
private function _save_csv_file(){
|
620 |
// try to make a wysija dir to save the import file
|
621 |
+
$helper_file = WYSIJA::get('file','helper');
|
622 |
$result_dir = $helper_file->makeDir('import');
|
623 |
+
if(!$result_dir) {
|
624 |
return false;
|
625 |
}
|
626 |
|
627 |
+
$file_name = 'import-'.time().'.csv';
|
628 |
+
$handle = fopen($result_dir.$file_name, 'w');
|
629 |
fwrite($handle, $this->_csv_file_string);
|
630 |
fclose($handle);
|
631 |
|
632 |
return $file_name;
|
633 |
}
|
634 |
|
|
|
|
|
|
|
|
|
635 |
private function _test_csv_emails(){
|
636 |
$found_email = 0;
|
637 |
$this->_email_key = array();
|
638 |
+
$helper_user = WYSIJA::get('user','helper');
|
639 |
+
foreach($this->_csv_array as $csv_row){
|
640 |
+
foreach($csv_row as $key_column => $value_column){
|
641 |
+
if( $helper_user->validEmail( trim($value_column) )){
|
642 |
$found_email++;
|
643 |
|
644 |
$this->_email_key[$key_column] = $this->_csv_array[0][$key_column];
|
647 |
}
|
648 |
|
649 |
$this->_data_result['errormatch'] = false;
|
650 |
+
if((count($this->_csv_array)<2) || ((count($this->_csv_array) -1) > $found_email)){
|
651 |
+
$this->error(sprintf(__('There might be a problem with the list you are trying to import. We have identified %1$s emails out of %2$s rows.',WYSIJA),$found_email,count($this->_csv_array)),true);
|
652 |
+
$this->_data_result['errormatch'] = true;
|
|
|
|
|
|
|
|
|
653 |
}
|
654 |
}
|
655 |
|
|
|
|
|
|
|
|
|
|
|
656 |
public function scan_csv_file(){
|
657 |
$this->_data_result = array();
|
658 |
|
|
|
659 |
if( $this->_save_default_import_field_match() === false) return false;
|
660 |
+
if( $this->_get_csv_file_cleanedup() === false) return false;
|
|
|
|
|
661 |
if( $this->_run_test_on_csv_file() === false) return false;
|
662 |
|
|
|
663 |
$file_name = $this->_save_csv_file();
|
664 |
+
if($file_name === false) return false;
|
|
|
665 |
|
|
|
666 |
$this->_test_csv_emails();
|
667 |
|
|
|
668 |
$this->_data_result['csv'] = $this->_csv_array;
|
669 |
+
$dataImport=array(
|
670 |
+
'csv'=>$file_name,
|
671 |
+
'fsep'=>$this->_csv_data['fsep'],
|
672 |
+
'fenc'=>$this->_csv_data['fenc']);
|
673 |
+
$this->_data_result['dataImport'] = base64_encode(serialize($dataImport));
|
|
|
|
|
674 |
$this->_data_result['keyemail'] = $this->_email_key;
|
675 |
|
676 |
//test if the first row is data or not
|
677 |
//test the email column
|
678 |
+
foreach($this->_data_result['keyemail'] as $k) $this->_email_key = $k;
|
|
|
679 |
|
|
|
|
|
680 |
$helper_user = WYSIJA::get('user','helper');
|
681 |
if($helper_user->validEmail( $this->_email_key )){
|
682 |
$this->_data_result['firstrowisdata']=true;
|
686 |
|
687 |
return $this->_data_result;
|
688 |
}
|
689 |
+
}
|
|
classes/WJ_Migrator.php
DELETED
@@ -1,53 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// We need the dbDelta migrator from Wordpress.
|
4 |
-
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
|
5 |
-
|
6 |
-
/**
|
7 |
-
Migrator.
|
8 |
-
A class that uses Wordpress dbDelta function
|
9 |
-
to handle incremental migrations.
|
10 |
-
Beware that deltas have specific syntax, not
|
11 |
-
identical to SQL syntax.
|
12 |
-
$migrator = new WJ_Migrator('2.1.5');
|
13 |
-
$migrator->setup();
|
14 |
-
*/
|
15 |
-
class WJ_Migrator {
|
16 |
-
|
17 |
-
private $db_prefix;
|
18 |
-
private $new_version;
|
19 |
-
|
20 |
-
function __construct($new_version) {
|
21 |
-
// Global Wordpress db object.
|
22 |
-
$this->db_prefix = WJ_Settings::db_prefix();
|
23 |
-
$this->new_version = $new_version;
|
24 |
-
}
|
25 |
-
|
26 |
-
/*
|
27 |
-
Add here your specific version number case.
|
28 |
-
It will be executed on version change.
|
29 |
-
*/
|
30 |
-
public function setup() {
|
31 |
-
|
32 |
-
$sql = '';
|
33 |
-
|
34 |
-
switch ($this->new_version) {
|
35 |
-
case '2.5.2.1':
|
36 |
-
$table_name = $this->db_prefix . 'custom_field';
|
37 |
-
$sql = "CREATE TABLE $table_name (
|
38 |
-
id mediumint(9) NOT NULL AUTO_INCREMENT,
|
39 |
-
name tinytext NOT NULL,
|
40 |
-
type tinytext NOT NULL,
|
41 |
-
required tinyint(1) DEFAULT '0' NOT NULL,
|
42 |
-
default_value text,
|
43 |
-
field_values text,
|
44 |
-
PRIMARY KEY (id)
|
45 |
-
);";
|
46 |
-
break;
|
47 |
-
}
|
48 |
-
|
49 |
-
return dbDelta($sql);
|
50 |
-
|
51 |
-
}
|
52 |
-
|
53 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_Option.php
DELETED
@@ -1,29 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Option.
|
5 |
-
* It creates and modifies Wordpress options.
|
6 |
-
* $option = new WJ_Option('my_option');
|
7 |
-
* $option->set('my_value');
|
8 |
-
* # => true
|
9 |
-
* $option->get();
|
10 |
-
* # => 'my_value'
|
11 |
-
*/
|
12 |
-
class WJ_Option {
|
13 |
-
|
14 |
-
private $prefix = 'wysija_premium_';
|
15 |
-
private $option_name;
|
16 |
-
|
17 |
-
function __construct($name) {
|
18 |
-
$this->option_name = $this->prefix . $name;
|
19 |
-
}
|
20 |
-
|
21 |
-
public function get() {
|
22 |
-
return get_option($this->option_name);
|
23 |
-
}
|
24 |
-
|
25 |
-
public function set($option_value) {
|
26 |
-
return update_option($this->option_name, $option_value);
|
27 |
-
}
|
28 |
-
|
29 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_Settings.php
DELETED
@@ -1,30 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Settings.
|
5 |
-
* Global Wysija Premium settings singleton.
|
6 |
-
*/
|
7 |
-
class WJ_Settings {
|
8 |
-
|
9 |
-
static private $db_prefix;
|
10 |
-
static private $name = 'wysija';
|
11 |
-
|
12 |
-
private function __construct() {
|
13 |
-
}
|
14 |
-
|
15 |
-
// db_prefix();
|
16 |
-
// # => wp_wysija_
|
17 |
-
// db_prefix('custom_field');
|
18 |
-
// # => wp_wysija_custom_field
|
19 |
-
static function db_prefix($table_name = false) {
|
20 |
-
global $wpdb;
|
21 |
-
self::$db_prefix = $wpdb->prefix . self::$name . '_';
|
22 |
-
if ($table_name) {
|
23 |
-
$prefixed = self::$db_prefix . $table_name;
|
24 |
-
} else {
|
25 |
-
$prefixed = self::$db_prefix;
|
26 |
-
}
|
27 |
-
return $prefixed;
|
28 |
-
}
|
29 |
-
|
30 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_Stats.php
DELETED
@@ -1,474 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Class Stats.
|
5 |
-
*
|
6 |
-
* Handling subscribers click and open action of an email
|
7 |
-
*/
|
8 |
-
class WJ_Stats extends WYSIJA_object {
|
9 |
-
|
10 |
-
public $email_id = null;
|
11 |
-
public $user_id = null;
|
12 |
-
public $clicked_url = '';
|
13 |
-
public $is_preview = false;
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Email object
|
17 |
-
* @var Wysija_email
|
18 |
-
*/
|
19 |
-
private $_email;
|
20 |
-
|
21 |
-
/**
|
22 |
-
* User object
|
23 |
-
* @var Wysija_user
|
24 |
-
*/
|
25 |
-
private $_user;
|
26 |
-
|
27 |
-
private $_url_id = null;
|
28 |
-
private $_unique_click = false;
|
29 |
-
public $decoded_url = '';
|
30 |
-
|
31 |
-
|
32 |
-
/**
|
33 |
-
* load some global variables into the class
|
34 |
-
*/
|
35 |
-
function __construct() {
|
36 |
-
if (!empty($_REQUEST['email_id']))
|
37 |
-
$this->email_id = (int) $_REQUEST['email_id'];
|
38 |
-
if (!empty($_REQUEST['user_id']))
|
39 |
-
$this->user_id = (int) $_REQUEST['user_id'];
|
40 |
-
if (!empty($_REQUEST['demo']))
|
41 |
-
$this->is_preview = true;
|
42 |
-
$this->_get_clicked_url();
|
43 |
-
|
44 |
-
// $this->_user can be empty, it's helpful in case an email was sent as a preview to a non-existing user, then a link is opened from there
|
45 |
-
$this->_user = WYSIJA::get('user', 'model')->getOne(false,(int)$this->user_id);
|
46 |
-
|
47 |
-
$this->_email = WYSIJA::get('email', 'model')->getOne(false,(int)$this->email_id);
|
48 |
-
if (empty($this->_email))
|
49 |
-
exit;
|
50 |
-
|
51 |
-
// consider to get / insert URL record here
|
52 |
-
// $this->_url = $this->_get_url($this->clicked_url);
|
53 |
-
}
|
54 |
-
|
55 |
-
/**
|
56 |
-
* Get user object
|
57 |
-
* @param type $user_id
|
58 |
-
*/
|
59 |
-
public function get_user() {
|
60 |
-
return $this->_user;
|
61 |
-
}
|
62 |
-
|
63 |
-
/**
|
64 |
-
* Get email object
|
65 |
-
* @param type $user_id
|
66 |
-
*/
|
67 |
-
public function get_email() {
|
68 |
-
return $this->_email;
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* count the action as an open and display the empty picture
|
73 |
-
*/
|
74 |
-
public function subscriber_opened() {
|
75 |
-
if (!$this->_is_open_action())
|
76 |
-
exit;
|
77 |
-
|
78 |
-
$model_email_user_stat = WYSIJA::get('email_user_stat', 'model');
|
79 |
-
$model_email_user_stat->reset();
|
80 |
-
$model_email_user_stat->update(
|
81 |
-
array('status' => 1, 'opened_at' => time()), array('email_id' => $this->email_id, 'user_id' => $this->user_id, 'status' => 0));
|
82 |
-
|
83 |
-
$this->_update_user(array('last_opened' => time()));
|
84 |
-
|
85 |
-
header('Cache-Control: no-store, no-cache, must-revalidate');
|
86 |
-
header('Cache-Control: post-check=0, pre-check=0', false);
|
87 |
-
header('Pragma: no-cache');
|
88 |
-
|
89 |
-
if (empty($picture))
|
90 |
-
$picture = WYSIJA_DIR_IMG . 'statpicture.png';
|
91 |
-
$handle = fopen($picture, 'r');
|
92 |
-
|
93 |
-
if (!$handle)
|
94 |
-
exit;
|
95 |
-
header('Content-type: image/png');
|
96 |
-
$contents = fread($handle, filesize($picture));
|
97 |
-
fclose($handle);
|
98 |
-
echo $contents;
|
99 |
-
exit;
|
100 |
-
}
|
101 |
-
|
102 |
-
public function subscriber_clicked() {
|
103 |
-
if (!$this->_is_click_action())
|
104 |
-
exit;
|
105 |
-
|
106 |
-
if ($this->email_id && $this->is_preview === false) { //if not email_id that means it is an email preview
|
107 |
-
$this->_record_url();
|
108 |
-
|
109 |
-
$this->_record_user_url();
|
110 |
-
|
111 |
-
$this->_record_url_mail();
|
112 |
-
|
113 |
-
$redirect = $this->_record_email_user_stat();
|
114 |
-
if (!empty($redirect))
|
115 |
-
$this->decoded_url = $redirect;
|
116 |
-
$this->_update_user(array('last_clicked' => time()));
|
117 |
-
}else {
|
118 |
-
$this->_get_url_preview();
|
119 |
-
}
|
120 |
-
//sometimes this will be a life saver :)
|
121 |
-
$this->decoded_url = str_replace('&', '&', $this->decoded_url);
|
122 |
-
if ($this->is_browser_link($this->decoded_url)) {
|
123 |
-
$this->decoded_url = $this->attach_user($this->decoded_url);
|
124 |
-
}
|
125 |
-
return $this->decoded_url;
|
126 |
-
}
|
127 |
-
|
128 |
-
/**
|
129 |
-
* Attach user_id as a param of an url
|
130 |
-
* @param string $url
|
131 |
-
* @param int $user_id
|
132 |
-
* @return string
|
133 |
-
*/
|
134 |
-
protected function attach_user($url) {
|
135 |
-
if (!empty($this->_user) && !empty($this->_user['user_id'])) {
|
136 |
-
$url_components = parse_url($url);
|
137 |
-
$arr_params = array();
|
138 |
-
if (!empty($url_components['query']))
|
139 |
-
parse_str($url_components['query'],$arr_params);
|
140 |
-
if (empty($arr_params['user_id'])) {
|
141 |
-
$url .= ((strpos($url, '?') !== false) ? '&' : '?');
|
142 |
-
$url .= 'user_id='.$this->_user['user_id'];
|
143 |
-
}
|
144 |
-
}
|
145 |
-
return $url;
|
146 |
-
}
|
147 |
-
|
148 |
-
/**
|
149 |
-
* record entry into the table email_user_url
|
150 |
-
*/
|
151 |
-
private function _record_user_url() {
|
152 |
-
//look for email_user_url entry and insert if not exists
|
153 |
-
$model_email_user_url = WYSIJA::get('email_user_url', 'model');
|
154 |
-
$data_email_user_url = array('email_id' => $this->email_id, 'user_id' => $this->user_id, 'url_id' => $this->_url_id);
|
155 |
-
$email_user_url_array = $model_email_user_url->getOne(false, $data_email_user_url);
|
156 |
-
|
157 |
-
if (!$email_user_url_array && $this->email_id > 0 && $this->user_id > 0 && $this->_url_id > 0) {
|
158 |
-
//we need to insert in email_user_url
|
159 |
-
$model_email_user_url->reset();
|
160 |
-
$query_EmailUserUrl = 'INSERT IGNORE INTO [wysija]email_user_url (`email_id` ,`user_id`,`url_id`) ';
|
161 |
-
$query_EmailUserUrl .= 'VALUES (' . $this->email_id . ', ' . $this->user_id . ', ' . $this->_url_id . ')';
|
162 |
-
|
163 |
-
$model_email_user_url->query($query_EmailUserUrl);
|
164 |
-
|
165 |
-
//$modelEmailUserUrl->insert($dataEmailUserUrl);
|
166 |
-
$this->_unique_click = true;
|
167 |
-
}
|
168 |
-
|
169 |
-
//increment stats counter on email_user_url clicked
|
170 |
-
$model_email_user_url = WYSIJA::get('email_user_url', 'model');
|
171 |
-
$model_email_user_url->update(array('clicked_at' => time(), 'number_clicked' => '[increment]'), $data_email_user_url);
|
172 |
-
}
|
173 |
-
|
174 |
-
/**
|
175 |
-
* record entry into the table url_mail
|
176 |
-
*/
|
177 |
-
private function _record_url_mail() {
|
178 |
-
//look for url_mail entry and insert if not exists
|
179 |
-
$model_url_mail = WYSIJA::get('url_mail', 'model');
|
180 |
-
$data_url_mail = array('email_id' => $this->email_id, 'url_id' => $this->_url_id);
|
181 |
-
$urlMailObj = $model_url_mail->getOne(false, $data_url_mail);
|
182 |
-
if (!$urlMailObj) {
|
183 |
-
//we need to insert in url_mail
|
184 |
-
$model_url_mail->reset();
|
185 |
-
$model_url_mail->insert($data_url_mail);
|
186 |
-
}
|
187 |
-
|
188 |
-
$data_update = array('total_clicked' => '[increment]');
|
189 |
-
if (!$this->_unique_click)
|
190 |
-
$data_update['unique_clicked'] = '[increment]';
|
191 |
-
//increment stats counter on url_mail clicked
|
192 |
-
$model_url_mail->update($data_update, $data_url_mail);
|
193 |
-
}
|
194 |
-
|
195 |
-
/**
|
196 |
-
* record entry into the table email_user_stat
|
197 |
-
*/
|
198 |
-
private function _record_email_user_stat() {
|
199 |
-
// clicked status
|
200 |
-
$status_email_user_stat = 2;
|
201 |
-
|
202 |
-
// this is the system url case (unsubscribe, view in browser and subscriptions)
|
203 |
-
if (in_array($this->clicked_url, array('[unsubscribe_link]', '[subscriptions_link]', '[view_in_browser_link]'))) {
|
204 |
-
$this->subscriberClass = WYSIJA::get('user', 'model');
|
205 |
-
$this->subscriberClass->getFormat = OBJECT;
|
206 |
-
|
207 |
-
//check if the security hash is passed to insure privacy
|
208 |
-
$receiver = $link = false;
|
209 |
-
if (isset($_REQUEST['hash'])) {
|
210 |
-
if ($_REQUEST['hash'] == md5(AUTH_KEY . $this->clicked_url . $this->user_id)) {
|
211 |
-
$receiver = $this->subscriberClass->getOne(array('user_id' => $this->user_id));
|
212 |
-
} else {
|
213 |
-
die('Security check failure.');
|
214 |
-
}
|
215 |
-
} else {
|
216 |
-
//link is not valid anymore
|
217 |
-
//propose to resend the newsletter with good links ?
|
218 |
-
$link = $this->subscriberClass->old_get_new_link_for_expired_links($this->user_id, $this->email_id);
|
219 |
-
}
|
220 |
-
|
221 |
-
|
222 |
-
switch ($this->clicked_url) {
|
223 |
-
case '[unsubscribe_link]':
|
224 |
-
//we need to make sure that this link belongs to that user
|
225 |
-
if ($receiver) {
|
226 |
-
$link = $this->subscriberClass->getUnsubLink($receiver, true);
|
227 |
-
// unsubscribe status
|
228 |
-
$status_email_user_stat = 3;
|
229 |
-
}
|
230 |
-
break;
|
231 |
-
case '[subscriptions_link]':
|
232 |
-
if ($receiver) {
|
233 |
-
$link = $this->subscriberClass->getEditsubLink($receiver, true);
|
234 |
-
}
|
235 |
-
break;
|
236 |
-
case '[view_in_browser_link]':
|
237 |
-
$model_email = WYSIJA::get('email', 'model');
|
238 |
-
$data_email = $model_email->getOne(false, array('email_id' => $this->email_id));
|
239 |
-
$helper_email = WYSIJA::get('email', 'helper');
|
240 |
-
$link = $helper_email->getVIB($data_email);
|
241 |
-
break;
|
242 |
-
}
|
243 |
-
|
244 |
-
//if the subscriber still exists in the DB we will have a link
|
245 |
-
if ($link) {
|
246 |
-
$this->decoded_url = $link;
|
247 |
-
} else {
|
248 |
-
//the subscriber doesn't appear in the DB we can redirect to the web version
|
249 |
-
$this->decoded_url = $this->_get_browser_link();
|
250 |
-
|
251 |
-
return $this->decoded_url;
|
252 |
-
}
|
253 |
-
} else {
|
254 |
-
// this is the standard non-system url case
|
255 |
-
if (strpos($this->decoded_url, 'http://') === false && strpos($this->decoded_url, 'https://') === false)
|
256 |
-
$this->decoded_url = 'http://' . $this->decoded_url;
|
257 |
-
// check that there is no broken unsubscribe link such as http://[unsubscribe_link]
|
258 |
-
if (strpos($this->decoded_url, '[unsubscribe_link]') !== false) {
|
259 |
-
$this->subscriberClass = WYSIJA::get('user', 'model');
|
260 |
-
$this->subscriberClass->getFormat = OBJECT;
|
261 |
-
$receiver = $this->subscriberClass->getOne($this->user_id);
|
262 |
-
$this->decoded_url = $this->subscriberClass->getUnsubLink($receiver, true);
|
263 |
-
}
|
264 |
-
|
265 |
-
if (strpos($this->decoded_url, '[view_in_browser_link]') !== false) {
|
266 |
-
$link = $this->_get_browser_link();
|
267 |
-
$this->decoded_url = $link;
|
268 |
-
}
|
269 |
-
}
|
270 |
-
|
271 |
-
$model_email_user_stat = WYSIJA::get('email_user_stat', 'model');
|
272 |
-
$exists = $model_email_user_stat->getOne(false, array('equal' => array('email_id' => $this->email_id, 'user_id' => $this->user_id), 'less' => array('status' => $status_email_user_stat)));
|
273 |
-
$data_update = array('status' => $status_email_user_stat);
|
274 |
-
if ($exists && isset($exists['opened_at']) && !(int) $exists['opened_at']) {
|
275 |
-
$data_update['opened_at'] = time();
|
276 |
-
}
|
277 |
-
|
278 |
-
$model_email_user_stat->reset();
|
279 |
-
$model_email_user_stat->colCheck = false;
|
280 |
-
$model_email_user_stat->update($data_update, array('equal' => array('email_id' => $this->email_id, 'user_id' => $this->user_id), 'less' => array('status' => $status_email_user_stat)));
|
281 |
-
}
|
282 |
-
|
283 |
-
/**
|
284 |
-
* update the user last_clicked or last_opened parameter
|
285 |
-
* @param type $data_update
|
286 |
-
*/
|
287 |
-
private function _update_user($data_update) {
|
288 |
-
if (!empty($data_update)) {
|
289 |
-
$model_user = WYSIJA::get('user', 'model');
|
290 |
-
$model_user->update($data_update, array('user_id' => $this->user_id));
|
291 |
-
}
|
292 |
-
}
|
293 |
-
|
294 |
-
/**
|
295 |
-
* when the email sent is a preview email, we just need to emulate actions, no need to count stats or to unsubscribe user etc ...
|
296 |
-
* @return boolean
|
297 |
-
*/
|
298 |
-
private function _get_url_preview() {
|
299 |
-
// we're in the case of an email preview
|
300 |
-
if (in_array($this->clicked_url, array('[unsubscribe_link]', '[subscriptions_link]', '[view_in_browser_link]'))) {
|
301 |
-
$model_user = WYSIJA::get('user', 'model');
|
302 |
-
$model_user->getFormat = OBJECT;
|
303 |
-
$user_object = $model_user->getOne(false, array('wpuser_id' => get_current_user_id()));
|
304 |
-
switch ($this->clicked_url) {
|
305 |
-
case '[unsubscribe_link]':
|
306 |
-
$link = $model_user->getConfirmLink($user_object, 'unsubscribe', false, true) . '&demo=1';
|
307 |
-
|
308 |
-
break;
|
309 |
-
case '[subscriptions_link]':
|
310 |
-
$link = $model_user->getConfirmLink($user_object, 'subscriptions', false, true) . '&demo=1';
|
311 |
-
break;
|
312 |
-
case 'view_in_browser_link':
|
313 |
-
case '[view_in_browser_link]':
|
314 |
-
if (!$this->email_id)
|
315 |
-
$this->email_id = $_REQUEST['id'];
|
316 |
-
|
317 |
-
$link = $this->_get_browser_link();
|
318 |
-
break;
|
319 |
-
}
|
320 |
-
|
321 |
-
$this->decoded_url = $link;
|
322 |
-
}else {
|
323 |
-
if (strpos($this->decoded_url, 'http://') === false && strpos($this->decoded_url, 'https://') === false)
|
324 |
-
$this->decoded_url = 'http://' . $this->decoded_url;
|
325 |
-
}
|
326 |
-
return true;
|
327 |
-
}
|
328 |
-
|
329 |
-
/**
|
330 |
-
* construct the view in your browser link
|
331 |
-
* @return type
|
332 |
-
*/
|
333 |
-
private function _get_browser_link() {
|
334 |
-
$params_url = array(
|
335 |
-
'wysija-page' => 1,
|
336 |
-
'controller' => 'email',
|
337 |
-
'action' => 'view',
|
338 |
-
'email_id' => $this->email_id,
|
339 |
-
'user_id' => 0
|
340 |
-
);
|
341 |
-
$config = WYSIJA::get('config', 'model');
|
342 |
-
return WYSIJA::get_permalink($config->getValue('confirm_email_link'), $params_url);
|
343 |
-
}
|
344 |
-
|
345 |
-
/**
|
346 |
-
* Detect if the current link is a browser link
|
347 |
-
* @param string $url
|
348 |
-
* @return boolean
|
349 |
-
*/
|
350 |
-
protected function is_browser_link($url) {
|
351 |
-
$flag = false;
|
352 |
-
$helper_toolbox = WYSIJA::get('toolbox', 'helper');
|
353 |
-
if ($helper_toolbox->is_internal_link($url)) {
|
354 |
-
$url_components = parse_url($url);
|
355 |
-
if (!empty($url_components['query'])) {
|
356 |
-
$params = array();
|
357 |
-
parse_str($url_components['query'], $params);
|
358 |
-
if (!empty($params['controller']) && strtolower($params['controller']) == 'email'
|
359 |
-
&& !empty($params['action']) && strtolower($params['action']) == 'view'
|
360 |
-
) {
|
361 |
-
$flag = true;
|
362 |
-
}
|
363 |
-
}
|
364 |
-
}
|
365 |
-
return $flag;
|
366 |
-
}
|
367 |
-
|
368 |
-
/**
|
369 |
-
* check that this is a valid open action
|
370 |
-
* @return boolean
|
371 |
-
*/
|
372 |
-
private function _is_open_action() {
|
373 |
-
if (empty($this->email_id) || empty($this->user_id))
|
374 |
-
return false;
|
375 |
-
|
376 |
-
return true;
|
377 |
-
}
|
378 |
-
|
379 |
-
/**
|
380 |
-
* check that this is a valid click action
|
381 |
-
* @return boolean
|
382 |
-
*/
|
383 |
-
private function _is_click_action() {
|
384 |
-
if ((empty($this->email_id) || empty($this->user_id) || empty($this->clicked_url)) && $this->is_preview === false)
|
385 |
-
return false;
|
386 |
-
|
387 |
-
return true;
|
388 |
-
}
|
389 |
-
|
390 |
-
/**
|
391 |
-
* record the url into the db if not recorded already
|
392 |
-
* @return boolean
|
393 |
-
*/
|
394 |
-
private function _record_url() {
|
395 |
-
//look for url entry and insert if not exists
|
396 |
-
$model_url = WYSIJA::get('url', 'model');
|
397 |
-
$url_found = $model_url->getOne(false, array('url' => $this->clicked_url));
|
398 |
-
|
399 |
-
if ($url_found) {
|
400 |
-
// we need to keep it
|
401 |
-
$this->_url_id = $url_found['url_id'];
|
402 |
-
} else {
|
403 |
-
// we need to record in database
|
404 |
-
$this->_url_id = $model_url->insert(array('url' => $this->clicked_url));
|
405 |
-
}
|
406 |
-
}
|
407 |
-
|
408 |
-
/**
|
409 |
-
* get/alter clicked url based on the global parameters
|
410 |
-
*/
|
411 |
-
private function _get_clicked_url() {
|
412 |
-
|
413 |
-
if (isset($_REQUEST['urlencoded'])) {
|
414 |
-
$this->clicked_url = $_REQUEST['urlencoded'];
|
415 |
-
} elseif (isset($_REQUEST['urlpassed'])) {
|
416 |
-
$this->clicked_url = $_REQUEST['urlpassed'];
|
417 |
-
}
|
418 |
-
|
419 |
-
// make sure the url is or is not base64 encoded, some server cannot handle long url or url with encoded parameter which is the default behaviour
|
420 |
-
if (isset($_REQUEST['no64'])) {
|
421 |
-
$this->decoded_url = $this->clicked_url;
|
422 |
-
} else {
|
423 |
-
$this->clicked_url = $this->decoded_url = base64_decode($this->clicked_url);
|
424 |
-
}
|
425 |
-
|
426 |
-
if (strpos($this->clicked_url, 'utm_source') !== false) {
|
427 |
-
$this->clicked_url = $this->_clean_params_url(array('utm_source', 'utm_campaign', 'utm_medium'), $this->clicked_url);
|
428 |
-
}
|
429 |
-
return true;
|
430 |
-
}
|
431 |
-
|
432 |
-
/**
|
433 |
-
* remove any params from a url
|
434 |
-
* @param array $params_to_remove
|
435 |
-
* @param string $url
|
436 |
-
* @return string
|
437 |
-
*/
|
438 |
-
private function _clean_params_url($params_to_remove = array(), $url = '') {
|
439 |
-
if (!$url){
|
440 |
-
return $url;
|
441 |
-
}
|
442 |
-
|
443 |
-
$url_splitted = explode('?', $url);
|
444 |
-
$params_in_url = array();
|
445 |
-
|
446 |
-
// lets parse the parameters of the url
|
447 |
-
parse_str($url_splitted[1], $params_in_url);
|
448 |
-
|
449 |
-
foreach ($params_to_remove as $param_key){
|
450 |
-
unset($params_in_url[$param_key]);
|
451 |
-
}
|
452 |
-
|
453 |
-
// let's use the base of that url to rebuild it without the cleaned out parameters.
|
454 |
-
$new_url = $url_splitted[0];
|
455 |
-
|
456 |
-
// when there are params left other than the ones we cleaned out of the url, we stick them back together
|
457 |
-
if($params_in_url) {
|
458 |
-
$new_url .= '?';
|
459 |
-
$i = 0;
|
460 |
-
foreach ($params_in_url as $k => $v) {
|
461 |
-
if ($i > 0){
|
462 |
-
$new_url .= '&';
|
463 |
-
}
|
464 |
-
|
465 |
-
// parse_str keeps the ampersand as a html number, let's clean it out so that the url look good when recorded
|
466 |
-
$new_url .= str_replace($k,'&','') . '=' . $v;
|
467 |
-
$i++;
|
468 |
-
}
|
469 |
-
}
|
470 |
-
|
471 |
-
return $new_url;
|
472 |
-
}
|
473 |
-
|
474 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_Upgrade.php
DELETED
@@ -1,390 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class WJ_Upgrade extends WYSIJA_object {
|
3 |
-
/**
|
4 |
-
* A static variable that holds a dinamic instance of the class
|
5 |
-
* @var [object||null]
|
6 |
-
*/
|
7 |
-
public static $instance = null;
|
8 |
-
|
9 |
-
public static $plugins = array( 'wysija-newsletters/index.php', 'wysija-newsletters-premium/index.php' );
|
10 |
-
|
11 |
-
public static $baseurl = array(
|
12 |
-
'core' => 'https://downloads.wordpress.org/plugin/',
|
13 |
-
'packager' => 'http://packager.mailpoet.com/release/',
|
14 |
-
);
|
15 |
-
|
16 |
-
public static function hook(){
|
17 |
-
null === self::$instance and self::$instance = new self;
|
18 |
-
|
19 |
-
if ( ! is_admin() ) {
|
20 |
-
return;
|
21 |
-
}
|
22 |
-
|
23 |
-
self::$baseurl = (object) self::$baseurl;
|
24 |
-
|
25 |
-
add_action( 'current_screen', array( self::$instance, 'setup_bulk_screen' ) );
|
26 |
-
add_action( 'shutdown', array( self::$instance, 'setup_bulk_screen_footer' ) );
|
27 |
-
add_action( 'current_screen', array( self::$instance, 'iframe_intercept' ) );
|
28 |
-
|
29 |
-
add_action( 'init', array( self::$instance, 'update_warning' ) );
|
30 |
-
|
31 |
-
add_filter( 'pre_set_site_transient_update_plugins', array( self::$instance, 'pre_set_site_transient_update_plugins' ), 100 );
|
32 |
-
}
|
33 |
-
|
34 |
-
public function update_warning() {
|
35 |
-
if ( ! is_admin() ){
|
36 |
-
return;
|
37 |
-
}
|
38 |
-
|
39 |
-
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
|
40 |
-
return;
|
41 |
-
}
|
42 |
-
|
43 |
-
if ( ! ( ( is_multisite() && current_user_can( 'manage_network' ) ) || current_user_can( 'update_plugins' ) ) ){
|
44 |
-
return;
|
45 |
-
}
|
46 |
-
|
47 |
-
if ( ! function_exists( 'get_plugin_data' ) ){
|
48 |
-
include_once ABSPATH . 'wp-admin/includes/plugin.php';
|
49 |
-
}
|
50 |
-
|
51 |
-
$current = get_site_transient( 'update_plugins' );
|
52 |
-
|
53 |
-
foreach ( self::$plugins as $plugin ){
|
54 |
-
if ( isset( $current->response[$plugin] ) ){
|
55 |
-
$data = self::get_plugin_data( $plugin );
|
56 |
-
|
57 |
-
if ( version_compare( $current->response[$plugin]->new_version, $data->info->Version, '<=' ) ){
|
58 |
-
continue;
|
59 |
-
}
|
60 |
-
|
61 |
-
$this->notice(
|
62 |
-
sprintf(
|
63 |
-
__( 'Hey! %1$s has an update (version %2$s), <a href="%3$s">click here to update</a>.', WYSIJA ),
|
64 |
-
'<strong>' . esc_attr( $data->info->Name ) . '</strong>',
|
65 |
-
$current->response[$plugin]->new_version,
|
66 |
-
wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $plugin, 'upgrade-plugin_' . $plugin )
|
67 |
-
),
|
68 |
-
true,
|
69 |
-
true
|
70 |
-
);
|
71 |
-
}
|
72 |
-
}
|
73 |
-
}
|
74 |
-
|
75 |
-
public function iframe_intercept( $current_screen ) {
|
76 |
-
if ( $current_screen->base !== 'mailpoet_page_wysija_config' ){
|
77 |
-
return;
|
78 |
-
}
|
79 |
-
|
80 |
-
if ( ! isset( $_GET['action'] ) || $_GET['action'] !== 'packager-switch' ){
|
81 |
-
return;
|
82 |
-
}
|
83 |
-
|
84 |
-
// Verify if it's has been created within the last 12 hours (nonce)
|
85 |
-
if ( wp_verify_nonce( $_GET['_wpnonce'], $_GET['action'] ) !== 1 ){
|
86 |
-
return;
|
87 |
-
}
|
88 |
-
|
89 |
-
// Require the Updater classes
|
90 |
-
include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
|
91 |
-
|
92 |
-
$to = (isset($_GET['stable']) && $_GET['stable']?'stable':'beta');
|
93 |
-
|
94 |
-
add_filter( 'pre_site_transient_update_plugins', array( $this, 'pre_site_transient_update_plugins' ) );
|
95 |
-
|
96 |
-
$plugins = array();
|
97 |
-
|
98 |
-
// Check for the action, it might be upgrading or installing
|
99 |
-
$action = 'upgrade';
|
100 |
-
if ( isset( $_GET['_mp_action'] ) && in_array( $_GET['_mp_action'], array( 'upgrade', 'install' ) ) ){
|
101 |
-
$action = strtolower( $_GET['_mp_action'] );
|
102 |
-
}
|
103 |
-
|
104 |
-
foreach ( self::$plugins as $k => $plugin ) {
|
105 |
-
if ( is_plugin_active( $plugin ) ){
|
106 |
-
$plugins[] = $plugin;
|
107 |
-
}
|
108 |
-
}
|
109 |
-
|
110 |
-
// Ajust the Padding/margin of the iFrame
|
111 |
-
define( 'IFRAME_REQUEST', true );
|
112 |
-
echo "<div style='margin: 0 20px;'>";
|
113 |
-
|
114 |
-
// Thats how WordPress calls for an iFrame page
|
115 |
-
wp_enqueue_script( 'jquery' );
|
116 |
-
iframe_header();
|
117 |
-
|
118 |
-
if ( $action === 'upgrade' ) {
|
119 |
-
$upgrader = new Plugin_Upgrader( new Bulk_Plugin_Upgrader_Skin( compact( 'nonce', 'url' ) ) );
|
120 |
-
$upgrader->bulk_upgrade( $plugins );
|
121 |
-
} elseif ( $action === 'install' ) {
|
122 |
-
// If the action is install, it will only happen if it's the Premium
|
123 |
-
$upgrader = new Plugin_Upgrader( new Plugin_Installer_Skin() );
|
124 |
-
$result = $upgrader->install( self::get_url( self::$plugins[1], WYSIJA::is_beta(), 'zip' ) );
|
125 |
-
}
|
126 |
-
|
127 |
-
iframe_footer();
|
128 |
-
echo "</div>";
|
129 |
-
|
130 |
-
remove_filter( 'pre_site_transient_update_plugins', array( $this, 'pre_site_transient_update_plugins' ) );
|
131 |
-
|
132 |
-
$model_config = WYSIJA::get( 'config', 'model' );
|
133 |
-
$model_config->save( array( 'beta_mode' => ( $to === 'stable' ? false : true ) ) );
|
134 |
-
set_site_transient( 'update_plugins', '' );
|
135 |
-
|
136 |
-
exit();
|
137 |
-
}
|
138 |
-
|
139 |
-
/**
|
140 |
-
* A static method to grab the url from the packager to grab the ZIP
|
141 |
-
* or the version of the plugin there.
|
142 |
-
*
|
143 |
-
* @uses bool_from_yn
|
144 |
-
* @uses esc_url
|
145 |
-
* @uses add_query_arg
|
146 |
-
*
|
147 |
-
* @param string $package Which package you want to grab
|
148 |
-
* @param boolean|string $beta Beta URL or not
|
149 |
-
* @param string $action Which kind of URL you need? [zip|check]
|
150 |
-
* @param string $version The version you want the URL to be related to
|
151 |
-
* @return string|null It will return the URL from the packager related to the asked action
|
152 |
-
*/
|
153 |
-
public static function get_url( $package = null, $beta = false, $action = 'zip', $version = null ){
|
154 |
-
if ( is_string( $beta ) ){
|
155 |
-
if ( $beta === 'beta' ) {
|
156 |
-
$beta = true;
|
157 |
-
} else {
|
158 |
-
$beta = bool_from_yn( $beta );
|
159 |
-
}
|
160 |
-
} else {
|
161 |
-
$beta = (bool) $beta;
|
162 |
-
}
|
163 |
-
|
164 |
-
if ( ! in_array( $action, array( 'zip', 'check' ) ) ) {
|
165 |
-
return null;
|
166 |
-
}
|
167 |
-
|
168 |
-
$slug = self::get_slug( $package );
|
169 |
-
|
170 |
-
if ( true === $beta || 'wysija-newsletters-premium' === $slug ) {
|
171 |
-
$url = self::$baseurl->packager . $action;
|
172 |
-
|
173 |
-
$params = array(
|
174 |
-
'key' => self::get_slug( $package ),
|
175 |
-
);
|
176 |
-
|
177 |
-
if ( $beta === true )
|
178 |
-
$params['beta'] = 'true';
|
179 |
-
|
180 |
-
$url = add_query_arg( $params, $url );
|
181 |
-
|
182 |
-
return (string) $url;
|
183 |
-
} else {
|
184 |
-
return (string) self::$baseurl->core . $slug . '.zip';
|
185 |
-
}
|
186 |
-
}
|
187 |
-
|
188 |
-
public static function get_version( $package = null, $beta = false ){
|
189 |
-
$request = wp_remote_get( self::get_url( $package, $beta, 'check' ) );
|
190 |
-
|
191 |
-
if ( is_wp_error( $request ) )
|
192 |
-
return false;
|
193 |
-
|
194 |
-
$version = wp_remote_retrieve_body( $request );
|
195 |
-
|
196 |
-
return $version;
|
197 |
-
}
|
198 |
-
|
199 |
-
public static function get_slug( $package = null ){
|
200 |
-
switch ( $package ) {
|
201 |
-
case self::$plugins[1]:
|
202 |
-
case 'premium':
|
203 |
-
case 'wysija-newsletters-premium':
|
204 |
-
return 'wysija-newsletters-premium';
|
205 |
-
break;
|
206 |
-
|
207 |
-
case self::$plugins[0]:
|
208 |
-
case 'base':
|
209 |
-
case 'wysija-newsletters':
|
210 |
-
default:
|
211 |
-
return 'wysija-newsletters';
|
212 |
-
break;
|
213 |
-
}
|
214 |
-
}
|
215 |
-
|
216 |
-
public static function get_plugin_data( $package = null, $beta = false, $new_version = false ){
|
217 |
-
$data = (object) array();
|
218 |
-
if ( is_null( $package ) )
|
219 |
-
return $data;
|
220 |
-
|
221 |
-
$data->id = 27505;
|
222 |
-
$data->slug = self::get_slug( $package );
|
223 |
-
$data->package = self::get_url( $package, $beta, 'zip' );
|
224 |
-
|
225 |
-
if ( function_exists( 'get_plugin_data' ) ){
|
226 |
-
$data->info = (object) get_plugin_data( plugin_dir_path( dirname( dirname( __FILE__ ) ) ) . $package );
|
227 |
-
}
|
228 |
-
|
229 |
-
if ( $data->slug === 'wysija-newsletters' ){
|
230 |
-
$data->url = "https://wordpress.org/plugins/{$data->slug}/";
|
231 |
-
} else {
|
232 |
-
$data->url = 'http://www.mailpoet.com/wordpress-newsletter-plugin-premium/';
|
233 |
-
}
|
234 |
-
$data->url = esc_url( $data->url );
|
235 |
-
|
236 |
-
if ( $new_version !== false ){
|
237 |
-
$data->new_version = (string) $new_version;
|
238 |
-
}
|
239 |
-
|
240 |
-
return $data;
|
241 |
-
}
|
242 |
-
|
243 |
-
public function pre_set_site_transient_update_plugins( $update_data ){
|
244 |
-
|
245 |
-
if ( ! function_exists( 'get_plugin_data' ) ){
|
246 |
-
return (object) array();
|
247 |
-
}
|
248 |
-
|
249 |
-
if ( ! is_object( $update_data ) && strlen( trim( $update_data ) ) === 0 ){
|
250 |
-
return (object) array();
|
251 |
-
}
|
252 |
-
|
253 |
-
if ( ! isset( $update_data->last_checked ) ){
|
254 |
-
$update_data->last_checked = 0;
|
255 |
-
}
|
256 |
-
|
257 |
-
if ( ( time() - ( 60 * 60 * 12 ) ) > ( $update_data->last_checked ) ) { // Just check once every 12 hours
|
258 |
-
return $update_data;
|
259 |
-
}
|
260 |
-
|
261 |
-
foreach ( self::$plugins as $plugin ){
|
262 |
-
if ( ! function_exists( 'is_plugin_active' ) ) {
|
263 |
-
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
264 |
-
}
|
265 |
-
|
266 |
-
if ( ! is_plugin_active( $plugin ) ){
|
267 |
-
continue;
|
268 |
-
}
|
269 |
-
|
270 |
-
if ( ! WYSIJA::is_beta() && $plugin === 'wysija-newsletter' ) {
|
271 |
-
continue;
|
272 |
-
}
|
273 |
-
|
274 |
-
$version = self::get_version( $plugin, WYSIJA::is_beta() );
|
275 |
-
$update_data->last_checked = time();
|
276 |
-
|
277 |
-
if ( version_compare( WYSIJA::get_version( $plugin ), $version, '>=' ) ){
|
278 |
-
continue;
|
279 |
-
}
|
280 |
-
|
281 |
-
$update_data->response[$plugin] = self::get_plugin_data( $plugin, WYSIJA::is_beta(), $version );
|
282 |
-
}
|
283 |
-
|
284 |
-
return $update_data;
|
285 |
-
}
|
286 |
-
|
287 |
-
public function pre_site_transient_update_plugins( $transient ) {
|
288 |
-
$update_data = (object) array(
|
289 |
-
'last_checked' => time() - 10,
|
290 |
-
'response' => array()
|
291 |
-
);
|
292 |
-
$to = (isset($_GET['stable']) && $_GET['stable']?'stable':'beta');
|
293 |
-
|
294 |
-
foreach ( self::$plugins as $plugin ) {
|
295 |
-
if ( ! function_exists( 'is_plugin_active' ) ){
|
296 |
-
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
297 |
-
}
|
298 |
-
|
299 |
-
if ( ! is_plugin_active( $plugin ) ) {
|
300 |
-
continue;
|
301 |
-
}
|
302 |
-
|
303 |
-
$update_data->response[$plugin] = self::get_plugin_data( $plugin, $to, self::get_version( $plugin, $to ) );
|
304 |
-
}
|
305 |
-
|
306 |
-
return $update_data;
|
307 |
-
}
|
308 |
-
|
309 |
-
public function setup_bulk_screen( $current_screen ) {
|
310 |
-
global $title, $parent_file, $submenu_file;
|
311 |
-
|
312 |
-
if ( strtoupper( $_SERVER['REQUEST_METHOD'] ) === 'POST' && in_array( $current_screen->id, array( 'update-core', 'plugins' ) ) ) {
|
313 |
-
if ( !isset( $_POST['checked'] ) ){
|
314 |
-
return;
|
315 |
-
}
|
316 |
-
|
317 |
-
$plugins = (array) $_POST['checked'];
|
318 |
-
$plugins = array_map( 'urldecode', $plugins );
|
319 |
-
|
320 |
-
$__intersection = array_intersect( $plugins, self::$plugins );
|
321 |
-
|
322 |
-
if ( empty( $__intersection ) )
|
323 |
-
return;
|
324 |
-
|
325 |
-
switch ( $_POST['action'] ){
|
326 |
-
case 'delete-selected':
|
327 |
-
break;
|
328 |
-
|
329 |
-
case 'deactivate-selected':
|
330 |
-
if ( in_array( self::$plugins[0], $plugins ) && ! in_array( self::$plugins[1], $plugins ) && is_plugin_active( self::$plugins[1] ) ){
|
331 |
-
$plugins[] = self::$plugins[1];
|
332 |
-
}
|
333 |
-
break;
|
334 |
-
|
335 |
-
case 'update-selected':
|
336 |
-
case 'activate-selected':
|
337 |
-
if ( in_array( self::$plugins[1], $plugins ) && ! in_array( self::$plugins[0], $plugins ) ){
|
338 |
-
$plugins[] = self::$plugins[0];
|
339 |
-
}
|
340 |
-
|
341 |
-
break;
|
342 |
-
}
|
343 |
-
|
344 |
-
$_POST['checked'] = $plugins;
|
345 |
-
|
346 |
-
return;
|
347 |
-
}
|
348 |
-
|
349 |
-
|
350 |
-
if ( $current_screen->id !== 'update' ){
|
351 |
-
return;
|
352 |
-
}
|
353 |
-
|
354 |
-
if ( $_GET['action'] !== 'upgrade-plugin' ){
|
355 |
-
return;
|
356 |
-
}
|
357 |
-
|
358 |
-
if ( $_GET['action'] === 'upgrade-plugin' && ! in_array( $_GET['plugin'], self::$plugins ) ){
|
359 |
-
return;
|
360 |
-
}
|
361 |
-
|
362 |
-
foreach ( self::$plugins as $plugin ) {
|
363 |
-
if ( ! is_plugin_active( $plugin ) ) {
|
364 |
-
return;
|
365 |
-
}
|
366 |
-
}
|
367 |
-
|
368 |
-
$_GET['action'] = $_REQUEST['action'] = 'update-selected';
|
369 |
-
$_GET['plugins'] = $_REQUEST['plugins'] = implode( ',', array_map( 'urlencode', self::$plugins ) );
|
370 |
-
$_GET['_wpnonce'] = $_REQUEST['_wpnonce'] = wp_create_nonce( 'bulk-update-plugins' );
|
371 |
-
$_GET['_wysija_bulk_screen'] = $_REQUEST['_wysija_bulk_screen'] = true;
|
372 |
-
|
373 |
-
$title = esc_attr__( 'Update Plugin' );
|
374 |
-
$parent_file = 'plugins.php';
|
375 |
-
$submenu_file = 'plugins.php';
|
376 |
-
require_once(ABSPATH . 'wp-admin/admin-header.php');
|
377 |
-
echo
|
378 |
-
"<div class='wrap'>" .
|
379 |
-
"<h2>{$title}</h2>";
|
380 |
-
|
381 |
-
}
|
382 |
-
|
383 |
-
public function setup_bulk_screen_footer(){
|
384 |
-
if ( ! isset( $_GET['_wysija_bulk_screen'] ) ){
|
385 |
-
return;
|
386 |
-
}
|
387 |
-
echo "</div>";
|
388 |
-
include(ABSPATH . 'wp-admin/admin-footer.php');
|
389 |
-
}
|
390 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
classes/WJ_Utils.php
DELETED
@@ -1,69 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Wysija Premium Utils.
|
5 |
-
* Utilities singleton not related to a specific model.
|
6 |
-
*/
|
7 |
-
class WJ_Utils {
|
8 |
-
|
9 |
-
private function __construct() {
|
10 |
-
}
|
11 |
-
|
12 |
-
public static function to_int($value) {
|
13 |
-
$boolean = (bool) $value;
|
14 |
-
if ($boolean) {
|
15 |
-
$int = 1;
|
16 |
-
} else {
|
17 |
-
$int = 0;
|
18 |
-
}
|
19 |
-
return $int;
|
20 |
-
}
|
21 |
-
|
22 |
-
public static function to_bool($value) {
|
23 |
-
$int = (int) $value;
|
24 |
-
if ($int == 0) {
|
25 |
-
$boolean = false;
|
26 |
-
} else {
|
27 |
-
$boolean = true;
|
28 |
-
}
|
29 |
-
return $boolean;
|
30 |
-
}
|
31 |
-
|
32 |
-
/**
|
33 |
-
* Retuns plain domain name.
|
34 |
-
*
|
35 |
-
* @return string $domain
|
36 |
-
*/
|
37 |
-
public static function get_domain() {
|
38 |
-
if(isset($_SERVER['SERVER_NAME']) && strlen(trim($_SERVER['SERVER_NAME'])) > 0) {
|
39 |
-
$domain = strtolower($_SERVER['SERVER_NAME']);
|
40 |
-
} else {
|
41 |
-
$domain = preg_replace('@http[s]?:\/\/@', '', get_site_url());
|
42 |
-
}
|
43 |
-
|
44 |
-
return preg_replace('@^www\.@', '', $domain);
|
45 |
-
}
|
46 |
-
|
47 |
-
/**
|
48 |
-
* Reruns necessary data for tooltip.
|
49 |
-
*
|
50 |
-
* @return array $data
|
51 |
-
*/
|
52 |
-
public static function get_tip_data() {
|
53 |
-
$model_config = WYSIJA::get('config', 'model');
|
54 |
-
$is_gmail = 'false';
|
55 |
-
|
56 |
-
if ('gmail' === $model_config->getValue('sending_method')) {
|
57 |
-
$is_gmail = 'true';
|
58 |
-
}
|
59 |
-
|
60 |
-
$data = array(
|
61 |
-
'text' => sprintf(__('Use an email from your domain, like <strong>info@%s</strong> to avoid the spam folder, or even be blocked.', WYSIJA), self::get_domain()),
|
62 |
-
'gmailText' => sprintf(__('If you want to use a Gmail address, you need to send with Gmail. Check <a id="tip-send-with" href="%s">sending settings</a>.', WYSIJA), admin_url('admin.php?page=wysija_config#tab-sendingmethod')),
|
63 |
-
'domain' => self::get_domain(),
|
64 |
-
'isGmail' => $is_gmail
|
65 |
-
);
|
66 |
-
|
67 |
-
return $data;
|
68 |
-
}
|
69 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controllers/ajax/campaigns.php
CHANGED
@@ -2,1003 +2,872 @@
|
|
2 |
defined('WYSIJA') or die('Restricted access');
|
3 |
class WYSIJA_control_back_campaigns extends WYSIJA_control{
|
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 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
default:
|
874 |
-
$block_params[] = array('key' => $pairs['name'], 'value' => $pairs['value']);
|
875 |
-
}
|
876 |
-
}
|
877 |
-
|
878 |
-
// make sure we have only unique ids in categories
|
879 |
-
$block_params[] = array('key' => 'category_ids', 'value' => join(',', array_unique($category_ids)));
|
880 |
-
}
|
881 |
-
|
882 |
-
if(empty($block_params)) {
|
883 |
-
// an error occurred, do something!
|
884 |
-
return false;
|
885 |
-
} else {
|
886 |
-
$data = array(
|
887 |
-
'type' => 'auto-post',
|
888 |
-
'params' => $block_params
|
889 |
-
);
|
890 |
-
return base64_encode($helper_wj_engine->renderEditorBlock($data));
|
891 |
-
}
|
892 |
-
}
|
893 |
-
|
894 |
-
function load_auto_post() {
|
895 |
-
$params = array();
|
896 |
-
|
897 |
-
if(isset($_POST['wysijaData'])) {
|
898 |
-
|
899 |
-
$pairs = explode('&', $_POST['wysijaData']);
|
900 |
-
|
901 |
-
foreach($pairs as $pair) {
|
902 |
-
list($key, $value) = explode('=', $pair);
|
903 |
-
switch($key) {
|
904 |
-
case 'autopost_count':
|
905 |
-
$params[$key] = (int)$value;
|
906 |
-
break;
|
907 |
-
case 'readmore':
|
908 |
-
case 'author_label':
|
909 |
-
case 'category_label':
|
910 |
-
case 'nopost_message':
|
911 |
-
$params[$key] = base64_decode($value);
|
912 |
-
break;
|
913 |
-
case 'exclude':
|
914 |
-
$params[$key] = explode(',', $value);
|
915 |
-
break;
|
916 |
-
default:
|
917 |
-
$params[$key] = $value;
|
918 |
-
}
|
919 |
-
}
|
920 |
-
}
|
921 |
-
|
922 |
-
if(empty($params)) {
|
923 |
-
// an error occurred, do something!
|
924 |
-
return false;
|
925 |
-
} else {
|
926 |
-
|
927 |
-
// get email params
|
928 |
-
$email_id = (int)$_REQUEST['id'];
|
929 |
-
$model_email = WYSIJA::get('email', 'model');
|
930 |
-
$email = $model_email->getOne(array('params','sent_at','campaign_id'), array('email_id' => $email_id));
|
931 |
-
|
932 |
-
$helper_articles = WYSIJA::get('articles', 'helper');
|
933 |
-
$helper_wj_engine = WYSIJA::get('wj_engine', 'helper');
|
934 |
-
|
935 |
-
// see if posts have already been sent
|
936 |
-
if(!empty($email['params']['autonl']['articles']['ids'])) {
|
937 |
-
if(!isset($params['exclude'])) { $params['exclude'] = array(); }
|
938 |
-
|
939 |
-
$params['exclude'] = array_unique(array_merge($email['params']['autonl']['articles']['ids'], $params['exclude']));
|
940 |
-
}
|
941 |
-
|
942 |
-
//we set the post_date to filter articles only older than that one
|
943 |
-
if(isset($email['params']['autonl']['firstSend'])){
|
944 |
-
$params['post_date'] = $email['params']['autonl']['firstSend'];
|
945 |
-
}
|
946 |
-
|
947 |
-
// if immediate let it know to the get post
|
948 |
-
if(isset($email['params']['autonl']['articles']['immediatepostid'])){
|
949 |
-
$params['include'] = $email['params']['autonl']['articles']['immediatepostid'];
|
950 |
-
$params['post_limit'] = 1;
|
951 |
-
}else{
|
952 |
-
//we set the post_date to filter articles only older than the last time we sent articles
|
953 |
-
if(isset($email['params']['autonl']['lastSend'])){
|
954 |
-
$params['post_date'] = $email['params']['autonl']['lastSend'];
|
955 |
-
}else{
|
956 |
-
//get the latest child newsletter sent_at value
|
957 |
-
$mEmail=WYSIJA::get('email','model');
|
958 |
-
$mEmail->reset();
|
959 |
-
$mEmail->orderBy('email_id','DESC');
|
960 |
-
$lastEmailSent=$mEmail->getOne(false,array('campaign_id'=>$email['campaign_id'],'type'=>'1'));
|
961 |
-
|
962 |
-
if(!empty($lastEmailSent)) $params['post_date'] = $lastEmailSent['sent_at'];
|
963 |
-
}
|
964 |
-
}
|
965 |
-
|
966 |
-
// get posts
|
967 |
-
$model_wp_posts = WYSIJA::get('wp_posts','model');
|
968 |
-
$posts = $model_wp_posts->get_posts($params);
|
969 |
-
|
970 |
-
if(empty($posts)) {
|
971 |
-
// nothing to display
|
972 |
-
$posts = array();
|
973 |
-
} else {
|
974 |
-
// used to keep track of post ids present in the auto post
|
975 |
-
$post_ids = array();
|
976 |
-
|
977 |
-
// cleanup post and get image
|
978 |
-
foreach($posts as $key => $post) {
|
979 |
-
if($params['image_alignment'] !== 'none') {
|
980 |
-
// attempt to get post image
|
981 |
-
$posts[$key]['post_image'] = $helper_articles->getImage($post);
|
982 |
-
}
|
983 |
-
|
984 |
-
// store article id
|
985 |
-
$post_ids[] = $post['ID'];
|
986 |
-
}
|
987 |
-
// store article ids
|
988 |
-
$params['post_ids'] = join(',', $post_ids);
|
989 |
-
}
|
990 |
-
|
991 |
-
// get divider if necessary (for immediate post notification, the "show_divider" parameter is not available)
|
992 |
-
if(isset($params['show_divider']) && $params['show_divider'] === 'yes') {
|
993 |
-
if(isset($email['params']['divider'])) {
|
994 |
-
$params['divider'] = $email['params']['divider'];
|
995 |
-
} else {
|
996 |
-
$helper_dividers = WYSIJA::get('dividers', 'helper');
|
997 |
-
$params['divider'] = $helper_dividers->getDefault();
|
998 |
-
}
|
999 |
-
}
|
1000 |
-
|
1001 |
-
return base64_encode($helper_wj_engine->renderEditorAutoPost($posts, $params));
|
1002 |
-
}
|
1003 |
-
}
|
1004 |
}
|
2 |
defined('WYSIJA') or die('Restricted access');
|
3 |
class WYSIJA_control_back_campaigns extends WYSIJA_control{
|
4 |
|
5 |
+
function WYSIJA_control_back_campaigns(){
|
6 |
+
if(!WYSIJA::current_user_can('wysija_newsletters')) die('Action is forbidden.');
|
7 |
+
parent::WYSIJA_control();
|
8 |
+
}
|
9 |
+
|
10 |
+
function save_poll(){
|
11 |
+
$model_config = WYSIJA::get('config','model');
|
12 |
+
$model_config->save(array('poll_origin' => $_REQUEST['how'] , 'poll_origin_url' => $_REQUEST['where']));
|
13 |
+
|
14 |
+
$res['result'] = true;
|
15 |
+
$res['msg'] = '<span><span class="checkmark">---</span>'. __('Thanks!',WYSIJA). '</span>';
|
16 |
+
return $res;
|
17 |
+
}
|
18 |
+
|
19 |
+
function switch_theme() {
|
20 |
+
if(isset($_POST['wysijaData'])) {
|
21 |
+
$rawData = $_POST['wysijaData'];
|
22 |
+
// avoid using stripslashes as it's not reliable depending on the magic quotes settings
|
23 |
+
$rawData = str_replace('\"', '"', $rawData);
|
24 |
+
// decode JSON data
|
25 |
+
$rawData = json_decode($rawData, true);
|
26 |
+
|
27 |
+
$theme = (isset($rawData['theme'])) ? $rawData['theme'] : 'default';
|
28 |
+
|
29 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
30 |
+
$res['templates'] = $wjEngine->renderTheme($theme);
|
31 |
+
|
32 |
+
$email_id = (int)$_REQUEST['id'];
|
33 |
+
|
34 |
+
$campaignsHelper = WYSIJA::get('campaigns', 'helper');
|
35 |
+
|
36 |
+
if(isset($res['templates']['divider_options'])) {
|
37 |
+
// save divider
|
38 |
+
$campaignsHelper->saveParameters($email_id, 'divider', $res['templates']['divider_options']);
|
39 |
+
}
|
40 |
+
|
41 |
+
// save theme used
|
42 |
+
$campaignsHelper->saveParameters($email_id, 'theme', $theme);
|
43 |
+
|
44 |
+
$res['templates']['theme'] = $theme;
|
45 |
+
$res['styles'] = $wjEngine->renderThemeStyles($theme);
|
46 |
+
} else {
|
47 |
+
$res['msg'] = __("The theme you selected could not be loaded.",WYSIJA);
|
48 |
+
$res['result'] = false;
|
49 |
+
}
|
50 |
+
return $res;
|
51 |
+
}
|
52 |
+
|
53 |
+
function save_editor() {
|
54 |
+
// decode json data and convert to array
|
55 |
+
$rawData = '';
|
56 |
+
if(isset($_POST['wysijaData'])) {
|
57 |
+
$rawData = $_POST['wysijaData'];
|
58 |
+
// avoid using stripslashes as it's not reliable depending on the magic quotes settings
|
59 |
+
$rawData = str_replace('\"', '"', $rawData);
|
60 |
+
// decode JSON data
|
61 |
+
$rawData = json_decode($rawData, true);
|
62 |
+
}
|
63 |
+
|
64 |
+
if(!$rawData){
|
65 |
+
$this->error('Error saving',false);
|
66 |
+
return array('result' => false);
|
67 |
+
}
|
68 |
+
|
69 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
70 |
+
$wjEngine->setData($rawData);
|
71 |
+
$result = false;
|
72 |
+
|
73 |
+
// get email id
|
74 |
+
$email_id = (int)$_REQUEST['id'];
|
75 |
+
|
76 |
+
$modelEmail = WYSIJA::get('email', 'model');
|
77 |
+
$emailData = $modelEmail->getOne(array('wj_styles', 'subject', 'params', 'email_id'), array('email_id' => $email_id));
|
78 |
+
|
79 |
+
$wjEngine->setStyles($emailData['wj_styles'], true);
|
80 |
+
|
81 |
+
$values = array('wj_data' => $wjEngine->getEncoded('data'));
|
82 |
+
$values['body'] = $wjEngine->renderEmail($emailData);
|
83 |
+
$values['email_id']=$email_id;
|
84 |
+
|
85 |
+
// wtf is that? could it explain the Sent On being updated for no reason?
|
86 |
+
$modelEmail->columns['modified_at']['autoup']=1;
|
87 |
+
|
88 |
+
// update data in DB
|
89 |
+
$result = $modelEmail->update($values, array('email_id' => $email_id));
|
90 |
+
|
91 |
+
if(!$result) {
|
92 |
+
// throw error
|
93 |
+
$this->error(__('Your email could not be saved', WYSIJA));
|
94 |
+
} else {
|
95 |
+
// save successful
|
96 |
+
$this->notice(__('Your email has been saved', WYSIJA));
|
97 |
+
}
|
98 |
+
|
99 |
+
return array('result' => $result);
|
100 |
+
}
|
101 |
+
|
102 |
+
function save_styles() {
|
103 |
+
// decode json data and convert to array
|
104 |
+
$rawData = '';
|
105 |
+
if(isset($_POST['wysijaStyles'])) {
|
106 |
+
$rawData = $_POST['wysijaStyles'];
|
107 |
+
// avoid using stripslashes as it's not reliable depending on the magic quotes settings
|
108 |
+
$rawData = str_replace('\"', '"', $rawData);
|
109 |
+
// decode JSON data
|
110 |
+
$rawData = json_decode($rawData, true);
|
111 |
+
|
112 |
+
}
|
113 |
+
|
114 |
+
// handle checkboxes
|
115 |
+
if(array_key_exists('a-underline', $rawData) === false) {
|
116 |
+
$rawData['a-underline'] = -1;
|
117 |
+
}
|
118 |
+
|
119 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
120 |
+
$wjEngine->setStyles($wjEngine->formatStyles($rawData));
|
121 |
+
|
122 |
+
$result = false;
|
123 |
+
|
124 |
+
$values = array(
|
125 |
+
'wj_styles' => $wjEngine->getEncoded('styles')
|
126 |
+
);
|
127 |
+
|
128 |
+
// get email id
|
129 |
+
$email_id = (int)$_REQUEST['id'];
|
130 |
+
|
131 |
+
// update data in DB
|
132 |
+
$modelEmail = WYSIJA::get('email', 'model');
|
133 |
+
$result = $modelEmail->update($values, array('email_id' => $email_id));
|
134 |
+
|
135 |
+
if(!$result) {
|
136 |
+
// throw error
|
137 |
+
$this->error(__('Styles could not be saved', WYSIJA));
|
138 |
+
} else {
|
139 |
+
// save successful
|
140 |
+
$this->notice(__('Styles have been saved', WYSIJA));
|
141 |
+
}
|
142 |
+
|
143 |
+
return array(
|
144 |
+
'styles' => $wjEngine->renderStyles(),
|
145 |
+
'result' => $result
|
146 |
+
);
|
147 |
+
}
|
148 |
+
|
149 |
+
function deleteimg(){
|
150 |
+
|
151 |
+
if(isset($_REQUEST['imgid']) && $_REQUEST['imgid']>0){
|
152 |
+
/* delete the image with id imgid */
|
153 |
+
$result=wp_delete_attachment($_REQUEST['imgid'],true);
|
154 |
+
if($result){
|
155 |
+
$this->notice(__('Image has been deleted.',WYSIJA));
|
156 |
+
}
|
157 |
+
}
|
158 |
+
|
159 |
+
$res=array();
|
160 |
+
$res['result'] = $result;
|
161 |
+
return $res;
|
162 |
+
}
|
163 |
+
|
164 |
+
function deleteTheme(){
|
165 |
+
if(isset($_REQUEST['themekey']) && $_REQUEST['themekey']){
|
166 |
+
/* delete the image with id imgid */
|
167 |
+
$helperTheme=WYSIJA::get('themes','helper');
|
168 |
+
$result=$helperTheme->delete($_REQUEST['themekey']);
|
169 |
+
}
|
170 |
+
|
171 |
+
$res=array();
|
172 |
+
$res['result'] = $result;
|
173 |
+
return $res;
|
174 |
+
}
|
175 |
+
|
176 |
+
// set newsletter default theme
|
177 |
+
function setDefaultTheme() {
|
178 |
+
if(isset($_REQUEST['theme']) && $_REQUEST['theme']) {
|
179 |
+
// check that the theme exists
|
180 |
+
// TODO
|
181 |
+
$theme_exists = true;
|
182 |
+
if($theme_exists === true) {
|
183 |
+
// update config
|
184 |
+
$model_config = WYSIJA::get('config', 'model');
|
185 |
+
$model_config->save(array('newsletter_default_theme' => $_REQUEST['theme']));
|
186 |
+
|
187 |
+
$result = true;
|
188 |
+
} else {
|
189 |
+
$result = false;
|
190 |
+
}
|
191 |
+
}
|
192 |
+
|
193 |
+
return array('result' => $result);
|
194 |
+
}
|
195 |
+
|
196 |
+
function save_IQS() {
|
197 |
+
// decode json data and convert to array
|
198 |
+
$wysijaIMG = '';
|
199 |
+
if(isset($_POST['wysijaIMG'])) {
|
200 |
+
$wysijaIMG = json_decode(stripslashes($_POST['wysijaIMG']), TRUE);
|
201 |
+
}
|
202 |
+
$values = array(
|
203 |
+
'params' => array('quickselection'=>$wysijaIMG)
|
204 |
+
);
|
205 |
+
|
206 |
+
// get email id
|
207 |
+
$email_id = (int)$_REQUEST['id'];
|
208 |
+
$values['email_id']=$email_id;
|
209 |
+
|
210 |
+
// update data in DB
|
211 |
+
$modelEmail = WYSIJA::get('email', 'model');
|
212 |
+
$result = $modelEmail->update($values, array('email_id' => $email_id));
|
213 |
+
|
214 |
+
if(!$result) {
|
215 |
+
// throw error
|
216 |
+
$this->error(__('Image selection has not been saved.', WYSIJA));
|
217 |
+
} else {
|
218 |
+
// save successful
|
219 |
+
$this->notice(__('Image selection has been saved.', WYSIJA));
|
220 |
+
}
|
221 |
+
|
222 |
+
return array('result' => $result);
|
223 |
+
}
|
224 |
+
|
225 |
+
|
226 |
+
function view_NL() {
|
227 |
+
// get campaign id
|
228 |
+
$email_id = (int)$_REQUEST['id'];
|
229 |
+
|
230 |
+
// update data in DB
|
231 |
+
$modelEmail = WYSIJA::get('email', 'model');
|
232 |
+
$result = $modelEmail->getOne(false,array('email_id' => $email_id));
|
233 |
+
|
234 |
+
echo $result['body'];
|
235 |
+
exit;
|
236 |
+
}
|
237 |
+
|
238 |
+
function display_NL() {
|
239 |
+
// get email id
|
240 |
+
$email_id = (int)$_REQUEST['id'];
|
241 |
+
|
242 |
+
// update data in DB
|
243 |
+
$modelEmail = WYSIJA::get('email', 'model');
|
244 |
+
$email= $modelEmail->getOne(false,array('email_id' => $email_id));
|
245 |
+
|
246 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
247 |
+
$wjEngine->setStyles($result['wj_styles'], true);
|
248 |
+
$wjEngine->setData($result['wj_data'], true);
|
249 |
+
$html = $wjEngine->renderEmail($email);
|
250 |
+
print $html;
|
251 |
+
exit;
|
252 |
+
}
|
253 |
+
|
254 |
+
/**
|
255 |
+
* returns a list of articles to the popup in the visual editor
|
256 |
+
* @global type $wpdb
|
257 |
+
* @return boolean
|
258 |
+
*/
|
259 |
+
function get_articles(){
|
260 |
+
// fixes issue with pcre functions
|
261 |
+
@ini_set('pcre.backtrack_limit', 1000000);
|
262 |
+
|
263 |
+
$model=WYSIJA::get('user','model');
|
264 |
+
|
265 |
+
//Carefull WordPress global
|
266 |
+
global $wpdb;
|
267 |
+
$mConfig=WYSIJA::get('config','model');
|
268 |
+
$isFullArticle=$mConfig->getValue('editor_fullarticle');
|
269 |
+
|
270 |
+
//test to set the default value
|
271 |
+
if(!$isFullArticle && isset($_REQUEST['fullarticle'])){
|
272 |
+
$mConfig->save(array('editor_fullarticle'=>true));
|
273 |
+
}
|
274 |
+
|
275 |
+
if($isFullArticle && !isset($_REQUEST['fullarticle'])){
|
276 |
+
$mConfig->save(array('editor_fullarticle'=>false));
|
277 |
+
}
|
278 |
+
$cpt = array('post');
|
279 |
+
if(isset($_REQUEST['cpt'])){
|
280 |
+
$cpt = array();
|
281 |
+
if($_REQUEST['cpt'] === 'all') {
|
282 |
+
$hWPTools = WYSIJA::get('wp_tools','helper');
|
283 |
+
$post_types = $hWPTools->get_post_types();
|
284 |
+
$cpt = array_keys($post_types);
|
285 |
+
$cpt[] = 'post';
|
286 |
+
$cpt[] = 'page';
|
287 |
+
} else {
|
288 |
+
$cpt = $_REQUEST['cpt'];
|
289 |
+
}
|
290 |
+
|
291 |
+
$query_cpt = '';
|
292 |
+
if(is_array($cpt)) {
|
293 |
+
$query_cpt = ' '.$wpdb->posts.'.post_type IN ("'. implode('", "', $cpt).'")';
|
294 |
+
} else {
|
295 |
+
$query_cpt = ' '.$wpdb->posts.'.post_type="'.$cpt.'"';
|
296 |
+
}
|
297 |
+
}
|
298 |
+
$hWPTools = WYSIJA::get('wp_tools','helper');
|
299 |
+
$post_statuses = $hWPTools->get_post_statuses();
|
300 |
+
if(isset($_REQUEST['status'])){
|
301 |
+
$statuses = array();
|
302 |
+
if($_REQUEST['status'] === 'all') {
|
303 |
+
|
304 |
+
$statuses = array_keys($post_statuses);
|
305 |
+
$statuses[] = 'future';
|
306 |
+
} else {
|
307 |
+
$statuses = $_REQUEST['status'];
|
308 |
+
}
|
309 |
+
|
310 |
+
$query_statuses = '';
|
311 |
+
if(is_array($statuses)) {
|
312 |
+
$query_statuses = ' AND '.$wpdb->posts.'.post_status IN ("'. implode('", "', $statuses).'")';
|
313 |
+
} else {
|
314 |
+
$query_statuses = ' AND '.$wpdb->posts.'.post_status="'.$statuses.'"';
|
315 |
+
}
|
316 |
+
}
|
317 |
+
|
318 |
+
$limitquery='';
|
319 |
+
$res=array();
|
320 |
+
$res['append']=false;
|
321 |
+
|
322 |
+
if(isset($_REQUEST['query_offset']) && (int)$_REQUEST['query_offset']){
|
323 |
+
$res['append']=true;
|
324 |
+
$limitquery = ' LIMIT '.(int)($_REQUEST['query_offset']).',10';
|
325 |
+
} else {
|
326 |
+
$limitquery = ' LIMIT 0,10';
|
327 |
+
}
|
328 |
+
|
329 |
+
if(isset($_REQUEST['search']) && strlen(trim($_REQUEST['search'])) > 0) {
|
330 |
+
$querystr = "SELECT $wpdb->posts.ID , $wpdb->posts.post_type, $wpdb->posts.post_title, $wpdb->posts.post_content, $wpdb->posts.post_excerpt , $wpdb->posts.post_status
|
331 |
+
FROM $wpdb->posts
|
332 |
+
WHERE $wpdb->posts.post_title like '%".addcslashes(mysql_real_escape_string($_REQUEST['search'],$wpdb->dbh), '%_' )."%'";
|
333 |
+
|
334 |
+
$querystr.= ' AND '.$query_cpt.$query_statuses;
|
335 |
+
|
336 |
+
$querystr.=" ORDER BY $wpdb->posts.post_date DESC";
|
337 |
+
$querystr.=$limitquery;
|
338 |
+
// query to count total rows
|
339 |
+
$queryCount = "SELECT COUNT(*) as total FROM $wpdb->posts WHERE $wpdb->posts.post_title like '%".addcslashes(mysql_real_escape_string($_REQUEST['search'],$wpdb->dbh), '%_' )."%' AND ".$query_cpt.$query_statuses;
|
340 |
+
}else{
|
341 |
+
$querystr = "SELECT $wpdb->posts.ID , $wpdb->posts.post_type, $wpdb->posts.post_title, $wpdb->posts.post_content, $wpdb->posts.post_excerpt , $wpdb->posts.post_status
|
342 |
+
FROM $wpdb->posts WHERE";
|
343 |
+
|
344 |
+
$querystr.= $query_cpt.$query_statuses;
|
345 |
+
|
346 |
+
$querystr.= " ORDER BY $wpdb->posts.post_date DESC";
|
347 |
+
$querystr.=$limitquery;
|
348 |
+
|
349 |
+
// query to count total rows
|
350 |
+
$queryCount = "SELECT COUNT(*) as total FROM $wpdb->posts WHERE ".$query_cpt.$query_statuses;
|
351 |
+
}
|
352 |
+
|
353 |
+
$res['posts']=$model->query('get_res',$querystr);
|
354 |
+
$count = $model->query('get_row', $queryCount);
|
355 |
+
$res['total'] = (int)$count['total'];
|
356 |
+
|
357 |
+
$helper_engine=WYSIJA::get('wj_engine','helper');
|
358 |
+
$helper_articles = WYSIJA::get('articles', 'helper');
|
359 |
+
|
360 |
+
// set params for post format
|
361 |
+
$params = array('post_content' => 'full');
|
362 |
+
|
363 |
+
//if excerpt has been requested then we try to provide it */
|
364 |
+
if(!isset($_REQUEST['fullarticle'])) {
|
365 |
+
$params['post_content'] = 'excerpt';
|
366 |
+
}
|
367 |
+
|
368 |
+
if($res['posts']){
|
369 |
+
$res['result'] = true;
|
370 |
+
foreach($res['posts'] as $k =>$v){
|
371 |
+
if($mConfig->getValue('interp_shortcode')) $res['posts'][$k]['post_content']=apply_filters('the_content',$res['posts'][$k]['post_content']);
|
372 |
+
|
373 |
+
$res['posts'][$k]['post_status']=$post_statuses[$res['posts'][$k]['post_status']];
|
374 |
+
|
375 |
+
|
376 |
+
// get thumbnail
|
377 |
+
$res['posts'][$k]['post_image'] = $helper_articles->getImage($v);
|
378 |
+
|
379 |
+
// convert post data into block data
|
380 |
+
$block = $helper_articles->convertPostToBlock($res['posts'][$k], $params);
|
381 |
+
|
382 |
+
// make editor block from post data
|
383 |
+
$res['posts'][$k]['html'] = base64_encode($helper_engine->renderEditorBlock($block));
|
384 |
+
}
|
385 |
+
}else {
|
386 |
+
$res['msg'] = __('There are no posts corresponding to that search.',WYSIJA);
|
387 |
+
$res['result'] = false;
|
388 |
+
}
|
389 |
+
|
390 |
+
return $res;
|
391 |
+
}
|
392 |
+
|
393 |
+
function send_preview($spamtest=false){
|
394 |
+
$mailer=WYSIJA::get('mailer','helper');
|
395 |
+
$email_id = $_REQUEST['id'];
|
396 |
+
$resultarray=array();
|
397 |
+
|
398 |
+
// update data in DB
|
399 |
+
$model_email = WYSIJA::get('email', 'model');
|
400 |
+
$model_email->getFormat=OBJECT;
|
401 |
+
$email_object = $model_email->getOne(false,array('email_id' => $email_id));
|
402 |
+
$mailer->testemail=true;
|
403 |
+
|
404 |
+
|
405 |
+
if(isset($_REQUEST['data'])){
|
406 |
+
$dataTemp=$_REQUEST['data'];
|
407 |
+
$_REQUEST['data']=array();
|
408 |
+
foreach($dataTemp as $val) $_REQUEST['data'][$val['name']]=$val['value'];
|
409 |
+
unset($dataTemp);
|
410 |
+
foreach($_REQUEST['data'] as $k =>$v){
|
411 |
+
$newkey=str_replace(array('wysija[email][',']'),'',$k);
|
412 |
+
$configVal[$newkey]=$v;
|
413 |
+
}
|
414 |
+
if(isset($configVal['from_name'])){
|
415 |
+
$params=array(
|
416 |
+
'from_name'=>$configVal['from_name'],
|
417 |
+
'from_email'=>$configVal['from_email'],
|
418 |
+
'replyto_name'=>$configVal['replyto_name'],
|
419 |
+
'replyto_email'=>$configVal['replyto_email']);
|
420 |
+
if(isset($configVal['subject'])) $email_object->subject=$configVal['subject'];
|
421 |
+
}
|
422 |
+
|
423 |
+
}else{
|
424 |
+
$params=array(
|
425 |
+
'from_name'=>$email_object->from_name,
|
426 |
+
'from_email'=>$email_object->from_email,
|
427 |
+
'replyto_name'=>$email_object->replyto_name,
|
428 |
+
'replyto_email'=>$email_object->replyto_email
|
429 |
+
);
|
430 |
+
}
|
431 |
+
if(strpos($_REQUEST['receiver'], ',')) {
|
432 |
+
$receivers = explode(',',$_REQUEST['receiver']);
|
433 |
+
} else if(strpos($_REQUEST['receiver'], ';')) {
|
434 |
+
$receivers = explode(';',$_REQUEST['receiver']);
|
435 |
+
} else {
|
436 |
+
$receivers = array($_REQUEST['receiver']);
|
437 |
+
}
|
438 |
+
|
439 |
+
$user_model = WYSIJA::get('user', 'model');
|
440 |
+
foreach($receivers as $key => $receiver){
|
441 |
+
$receiver = trim($receiver);
|
442 |
+
$dummy_receiver = $user_model->get_object_by_email($receiver);
|
443 |
+
if(empty($dummy_receiver)){
|
444 |
+
$dummy_receiver = new stdClass();
|
445 |
+
$dummy_receiver->user_id = 0;
|
446 |
+
$dummy_receiver->email = $receiver;
|
447 |
+
$dummy_receiver->status = 1;
|
448 |
+
$dummy_receiver->lastname = $dummy_receiver->firstname = '';
|
449 |
+
}
|
450 |
+
|
451 |
+
if($spamtest){
|
452 |
+
$langextra = '';
|
453 |
+
$dummy_receiver->firstname ='Mail Tester';
|
454 |
+
|
455 |
+
$wp_lang = get_locale();
|
456 |
+
if(!empty($wp_lang)) $langextra ='&lang='.$wp_lang;
|
457 |
+
$resultarray['urlredirect']='http://www.mail-tester.com/check.php?id='.urlencode($dummy_receiver->email).$langextra;
|
458 |
+
}
|
459 |
+
$receivers[$key] = $dummy_receiver;
|
460 |
+
|
461 |
+
}
|
462 |
+
|
463 |
+
$email_clone=array();
|
464 |
+
foreach($email_object as $kk=>$vv) $email_clone[$kk]=$vv;
|
465 |
+
|
466 |
+
|
467 |
+
$wj_engine = WYSIJA::get('wj_engine', 'helper');
|
468 |
+
// set data & styles
|
469 |
+
if(isset($email_clone['wj_data'])) { $wj_engine->setData($email_clone['wj_data'], true); } else { $wj_engine->setData(); }
|
470 |
+
if(isset($email_clone['wj_styles'])) { $wj_engine->setStyles($email_clone['wj_styles'], true); } else { $wj_engine->setStyles(); }
|
471 |
+
|
472 |
+
// generate email html body
|
473 |
+
$body = $wj_engine->renderEmail($email_clone);
|
474 |
+
|
475 |
+
// get back email data as it will be updated during the rendering (articles ids + articles count)
|
476 |
+
$email_child = $wj_engine->getEmailData();
|
477 |
+
|
478 |
+
// [total] [number] and [post_title] are only valid for post notifications newsletter
|
479 |
+
if((int)$email_child['type'] === 2 && isset($email_child['params']['autonl']['event']) &&
|
480 |
+
$email_child['params']['autonl']['event'] === 'new-articles' && isset($email_child['params']['autonl']['articles'])){
|
481 |
+
|
482 |
+
$item_count = 0;
|
483 |
+
$total_count = 1;
|
484 |
+
$first_subject = '';
|
485 |
+
|
486 |
+
if(isset($email_child['params']['autonl']['articles']['count'])) $item_count = (int)$email_child['params']['autonl']['articles']['count'];
|
487 |
+
if(isset($email_child['params']['autonl']['articles']['first_subject'])) $first_subject = $email_child['params']['autonl']['articles']['first_subject'];
|
488 |
+
if(isset($email_child['params']['autonl']['total_child'])) $total_count = (int)$email_child['params']['autonl']['total_child'] + 1;
|
489 |
+
|
490 |
+
if(empty($first_subject)) {
|
491 |
+
$this->error(__('There are no articles to be sent in this email.',WYSIJA),1);
|
492 |
+
return array('result' => false);
|
493 |
+
}
|
494 |
+
$email_object->subject = str_replace(
|
495 |
+
array('[total]','[number]','[post_title]'),
|
496 |
+
array($item_count, $total_count, $first_subject),
|
497 |
+
$email_child['subject']);
|
498 |
+
}
|
499 |
+
|
500 |
+
$successmsg = __('Your email preview has been sent to %1$s', WYSIJA);
|
501 |
+
|
502 |
+
// correction added for post notifications with the tag [newsletter:post_title] failing to send
|
503 |
+
if(isset($email_object->params['autonl']) && isset($email_child['params']['autonl'])){
|
504 |
+
$email_object->params['autonl']=$email_child['params']['autonl'];
|
505 |
+
}
|
506 |
+
|
507 |
+
if(isset($email_object->params)) {
|
508 |
+
$params['params']=$email_object->params;
|
509 |
+
|
510 |
+
if(isset($configVal['params[googletrackingcode'])){
|
511 |
+
$paramsemail=array();
|
512 |
+
if(!is_array($email_object->params)) $paramsemail=unserialize(base64_decode($email_object->params));
|
513 |
+
|
514 |
+
if(trim($configVal['params[googletrackingcode'])) {
|
515 |
+
$paramsemail['googletrackingcode']=$configVal['params[googletrackingcode'];
|
516 |
+
}
|
517 |
+
else {
|
518 |
+
unset($paramsemail['googletrackingcode']);
|
519 |
+
}
|
520 |
+
$params['params'] = base64_encode(serialize($paramsemail));
|
521 |
+
}
|
522 |
+
}
|
523 |
+
|
524 |
+
$params['email_id'] = $email_object->email_id;
|
525 |
+
$receiversList = array();
|
526 |
+
$res = false;
|
527 |
+
foreach($receivers as $receiver){
|
528 |
+
if($mailer->sendSimple($receiver, stripslashes($email_object->subject),$email_object->body,$params)) {
|
529 |
+
$res = true;
|
530 |
+
$receiversList[] = $receiver->email;
|
531 |
+
}
|
532 |
+
WYSIJA::log('preview_sent', $mailer, 'manual');
|
533 |
+
}
|
534 |
+
|
535 |
+
if($res === true) {
|
536 |
+
$this->notice(sprintf($successmsg, implode(', ', $receiversList)));
|
537 |
+
}
|
538 |
+
|
539 |
+
$resultarray['result'] = $res;
|
540 |
+
|
541 |
+
return $resultarray;
|
542 |
+
}
|
543 |
+
|
544 |
+
/**
|
545 |
+
* send spam test function step 2 of the newsletter edition process
|
546 |
+
*/
|
547 |
+
function send_spamtest(){
|
548 |
+
return apply_filters('wysija_send_spam_test','',$this);
|
549 |
+
}
|
550 |
+
|
551 |
+
function set_divider()
|
552 |
+
{
|
553 |
+
$src = isset($_POST['wysijaData']['src']) ? $_POST['wysijaData']['src'] : NULL;
|
554 |
+
$width = isset($_POST['wysijaData']['width']) ? (int)$_POST['wysijaData']['width'] : NULL;
|
555 |
+
$height = isset($_POST['wysijaData']['height']) ? (int)$_POST['wysijaData']['height'] : NULL;
|
556 |
+
|
557 |
+
if($src === NULL OR $width === NULL OR $height === NULL) {
|
558 |
+
// there is a least one missing parameter, fallback to default divider
|
559 |
+
$dividersHelper = WYSIJA::get('dividers', 'helper');
|
560 |
+
$divider = $dividersHelper->getDefault();
|
561 |
+
} else {
|
562 |
+
// use provided params
|
563 |
+
$divider = array(
|
564 |
+
'src' => $src,
|
565 |
+
'width' => $width,
|
566 |
+
'height' => $height
|
567 |
+
);
|
568 |
+
}
|
569 |
+
|
570 |
+
// update campaign parameters
|
571 |
+
$email_id = (int)$_REQUEST['id'];
|
572 |
+
$campaignsHelper = WYSIJA::get('campaigns', 'helper');
|
573 |
+
$campaignsHelper->saveParameters($email_id, 'divider', $divider);
|
574 |
+
|
575 |
+
// set params
|
576 |
+
$block = array_merge(array('no-block' => true, 'type' => 'divider'), $divider);
|
577 |
+
|
578 |
+
$helper_engine=WYSIJA::get('wj_engine','helper');
|
579 |
+
return base64_encode($helper_engine->renderEditorBlock($block));
|
580 |
+
}
|
581 |
+
|
582 |
+
function get_social_bookmarks() {
|
583 |
+
$size = isset($_POST['wysijaData']['size']) ? $_POST['wysijaData']['size'] : NULL;
|
584 |
+
$theme = isset($_POST['wysijaData']['theme']) ? $_POST['wysijaData']['theme'] : NULL;
|
585 |
+
|
586 |
+
$bookmarksHelper = WYSIJA::get('bookmarks', 'helper');
|
587 |
+
$bookmarks = $bookmarksHelper->getAll($size, $theme);
|
588 |
+
return json_encode(array('icons' => $bookmarks));
|
589 |
+
}
|
590 |
+
|
591 |
+
function generate_social_bookmarks() {
|
592 |
+
|
593 |
+
$size = 'medium';
|
594 |
+
$iconset = '01';
|
595 |
+
|
596 |
+
if(isset($_POST['wysijaData']) && !empty($_POST['wysijaData'])) {
|
597 |
+
$data = $_POST['wysijaData'];
|
598 |
+
$items = array();
|
599 |
+
|
600 |
+
foreach($data as $key => $values) {
|
601 |
+
if($values['name'] === 'bookmarks-size') {
|
602 |
+
// get size
|
603 |
+
$size = $values['value'];
|
604 |
+
} else if($values['name'] === 'bookmarks-theme') {
|
605 |
+
// get theme name
|
606 |
+
$theme = $values['value'];
|
607 |
+
} else if($values['name'] === 'bookmarks-iconset') {
|
608 |
+
// get iconset
|
609 |
+
$iconset = $values['value'];
|
610 |
+
if(strlen(trim($iconset)) === 0) {
|
611 |
+
$this->error('No iconset specified', false);
|
612 |
+
return false;
|
613 |
+
}
|
614 |
+
} else {
|
615 |
+
$keys = explode('-', $values['name']);
|
616 |
+
$network = $keys[1];
|
617 |
+
$property = $keys[2];
|
618 |
+
if(array_key_exists($network, $items)) {
|
619 |
+
$items[$network][$property] = $values['value'];
|
620 |
+
} else {
|
621 |
+
$items[$network] = array($property => $values['value']);
|
622 |
+
}
|
623 |
+
}
|
624 |
+
}
|
625 |
+
}
|
626 |
+
|
627 |
+
$urls = array();
|
628 |
+
// check data and remove network with an empty url
|
629 |
+
foreach($items as $network => $item) {
|
630 |
+
if(strlen(trim($item['url'])) === 0) {
|
631 |
+
// empty url
|
632 |
+
unset($items[$network]);
|
633 |
+
} else {
|
634 |
+
// url specified
|
635 |
+
$urls[$network] = $item['url'];
|
636 |
+
}
|
637 |
+
}
|
638 |
+
|
639 |
+
// check if there's at least one url left
|
640 |
+
if(empty($urls)) {
|
641 |
+
$this->error('No url specified', false);
|
642 |
+
return false;
|
643 |
+
}
|
644 |
+
|
645 |
+
// save url in config
|
646 |
+
$config=WYSIJA::get('config','model');
|
647 |
+
$config->save(array('social_bookmarks' => $urls));
|
648 |
+
|
649 |
+
// get iconset icons
|
650 |
+
$bookmarksHelper = WYSIJA::get('bookmarks', 'helper');
|
651 |
+
|
652 |
+
// if the iconset is 00, then it's the theme's bookmarks
|
653 |
+
if($iconset === '00') {
|
654 |
+
$icons = $bookmarksHelper->getAllByTheme($theme);
|
655 |
+
} else {
|
656 |
+
// otherwise it's a basic iconset
|
657 |
+
$icons = $bookmarksHelper->getAllByIconset($size, $iconset);
|
658 |
+
}
|
659 |
+
|
660 |
+
|
661 |
+
// format data
|
662 |
+
$block = array(
|
663 |
+
'position' => 1,
|
664 |
+
'type' => 'gallery',
|
665 |
+
'items' => array(),
|
666 |
+
'alignment' => 'center'
|
667 |
+
);
|
668 |
+
|
669 |
+
$width = 0;
|
670 |
+
foreach($items as $key => $item) {
|
671 |
+
$block['items'][] = array_merge($item, $icons[$key], array('alt' => ucfirst($key)));
|
672 |
+
$width += (int)$icons[$key]['width'];
|
673 |
+
}
|
674 |
+
// add margin between icons
|
675 |
+
$width += (count($block['items']) - 1) * 10;
|
676 |
+
// set optimal width
|
677 |
+
$block['width'] = max(0, min($width, 564));
|
678 |
+
|
679 |
+
$helper_engine=WYSIJA::get('wj_engine','helper');
|
680 |
+
return base64_encode($helper_engine->renderEditorBlock($block));
|
681 |
+
}
|
682 |
+
|
683 |
+
function install_theme() {
|
684 |
+
if( isset($_REQUEST['theme_id'])){
|
685 |
+
|
686 |
+
//check if theme is premium if you have the premium licence
|
687 |
+
if(isset($_REQUEST['premium']) && $_REQUEST['premium']){
|
688 |
+
$getpremiumtheme=apply_filters('wysija_install_theme_premium', false);
|
689 |
+
|
690 |
+
if(!$getpremiumtheme){
|
691 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
692 |
+
$themes = $wjEngine->renderThemes();
|
693 |
+
return array('result'=>false, 'themes' => $themes);
|
694 |
+
}
|
695 |
+
}
|
696 |
+
|
697 |
+
|
698 |
+
$httpHelp=WYSIJA::get('http','helper');
|
699 |
+
$url=admin_url('admin.php');
|
700 |
+
|
701 |
+
$helperToolbox=WYSIJA::get('toolbox','helper');
|
702 |
+
$domain_name=$helperToolbox->_make_domain_name($url);
|
703 |
+
|
704 |
+
$request='http://api.wysija.com/download/zip/'.$_REQUEST['theme_id'].'?domain='.$domain_name;
|
705 |
+
|
706 |
+
$ZipfileResult = $httpHelp->wp_request($request);
|
707 |
+
|
708 |
+
if($ZipfileResult === false){
|
709 |
+
$result=false;
|
710 |
+
$this->error(__('We were unable to contact the API, the site may be down. Please try again later.',WYSIJA),true);
|
711 |
+
}else{
|
712 |
+
$themesHelp=WYSIJA::get('themes','helper');
|
713 |
+
$result = $themesHelp->installTheme($ZipfileResult);
|
714 |
+
|
715 |
+
// refresh themes list
|
716 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
717 |
+
$themes = $wjEngine->renderThemes();
|
718 |
+
}
|
719 |
+
}else{
|
720 |
+
$result=false;
|
721 |
+
$this->notice('missing info');
|
722 |
+
}
|
723 |
+
|
724 |
+
return array('result'=>$result, 'themes' => $themes);
|
725 |
+
}
|
726 |
+
|
727 |
+
function refresh_themes() {
|
728 |
+
// refresh themes list
|
729 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
730 |
+
return array('result'=>true, 'themes' => $wjEngine->renderThemes());
|
731 |
+
}
|
732 |
+
|
733 |
+
function generate_auto_post() {
|
734 |
+
// get params and generate html
|
735 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
736 |
+
$helper_articles = WYSIJA::get('articles', 'helper');
|
737 |
+
|
738 |
+
// get parameters
|
739 |
+
$block_params = array();
|
740 |
+
if(isset($_POST['wysijaData'])) {
|
741 |
+
foreach($_POST['wysijaData'] as $pairs) {
|
742 |
+
// special cases
|
743 |
+
switch($pairs['name']) {
|
744 |
+
case 'readmore':
|
745 |
+
case 'nopost_message':
|
746 |
+
$block_params[] = array('key' => $pairs['name'], 'value' => base64_encode(stripslashes($pairs['value'])));
|
747 |
+
break;
|
748 |
+
default:
|
749 |
+
$block_params[] = array('key' => $pairs['name'], 'value' => $pairs['value']);
|
750 |
+
}
|
751 |
+
}
|
752 |
+
}
|
753 |
+
|
754 |
+
if(empty($block_params)) {
|
755 |
+
// an error occurred, do something!
|
756 |
+
return false;
|
757 |
+
} else {
|
758 |
+
$data = array(
|
759 |
+
'type' => 'auto-post',
|
760 |
+
'params' => $block_params
|
761 |
+
);
|
762 |
+
return base64_encode($wjEngine->renderEditorBlock($data));
|
763 |
+
}
|
764 |
+
}
|
765 |
+
|
766 |
+
function load_auto_post() {
|
767 |
+
$params = array();
|
768 |
+
|
769 |
+
if(isset($_POST['wysijaData'])) {
|
770 |
+
|
771 |
+
$pairs = explode('&', $_POST['wysijaData']);
|
772 |
+
|
773 |
+
foreach($pairs as $pair) {
|
774 |
+
list($key, $value) = explode('=', $pair);
|
775 |
+
|
776 |
+
|
777 |
+
switch($key) {
|
778 |
+
case 'autopost_count':
|
779 |
+
$params[$key] = (int)$value;
|
780 |
+
break;
|
781 |
+
case 'readmore':
|
782 |
+
case 'nopost_message':
|
783 |
+
$params[$key] = base64_decode($value);
|
784 |
+
break;
|
785 |
+
case 'exclude':
|
786 |
+
$params[$key] = explode(',', $value);
|
787 |
+
break;
|
788 |
+
default:
|
789 |
+
$params[$key] = $value;
|
790 |
+
}
|
791 |
+
}
|
792 |
+
}
|
793 |
+
|
794 |
+
if(empty($params)) {
|
795 |
+
// an error occurred, do something!
|
796 |
+
return false;
|
797 |
+
} else {
|
798 |
+
// get email params
|
799 |
+
$email_id = (int)$_REQUEST['id'];
|
800 |
+
$modelEmail = WYSIJA::get('email', 'model');
|
801 |
+
$email = $modelEmail->getOne(array('params','sent_at','campaign_id'), array('email_id' => $email_id));
|
802 |
+
|
803 |
+
$articlesHelper = WYSIJA::get('articles', 'helper');
|
804 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
805 |
+
|
806 |
+
// see if posts have already been sent
|
807 |
+
if(!empty($email['params']['autonl']['articles']['ids'])) {
|
808 |
+
|
809 |
+
if(!isset($params['exclude'])) { $params['exclude'] = array(); }
|
810 |
+
|
811 |
+
$params['exclude'] = array_unique(array_merge($email['params']['autonl']['articles']['ids'], $params['exclude']));
|
812 |
+
}
|
813 |
+
|
814 |
+
//we set the post_date to filter articles only older than that one
|
815 |
+
if(isset($email['params']['autonl']['firstSend'])){
|
816 |
+
$params['post_date'] = $email['params']['autonl']['firstSend'];
|
817 |
+
}
|
818 |
+
|
819 |
+
// if immediate let it know to the get post
|
820 |
+
if(isset($email['params']['autonl']['articles']['immediatepostid'])){
|
821 |
+
$params['include'] = $email['params']['autonl']['articles']['immediatepostid'];
|
822 |
+
$params['post_limit'] = 1;
|
823 |
+
}else{
|
824 |
+
//we set the post_date to filter articles only older than the last time we sent articles
|
825 |
+
if(isset($email['params']['autonl']['lastSend'])){
|
826 |
+
$params['post_date'] = $email['params']['autonl']['lastSend'];
|
827 |
+
}else{
|
828 |
+
//get the latest child newsletter sent_at value
|
829 |
+
$mEmail=WYSIJA::get('email','model');
|
830 |
+
$mEmail->reset();
|
831 |
+
$mEmail->orderBy('email_id','DESC');
|
832 |
+
$lastEmailSent=$mEmail->getOne(false,array('campaign_id'=>$email['campaign_id'],'type'=>'1'));
|
833 |
+
|
834 |
+
if(isset($data['sent_at'])) $params['post_date'] = $lastEmailSent['sent_at'];
|
835 |
+
}
|
836 |
+
}
|
837 |
+
|
838 |
+
|
839 |
+
|
840 |
+
$posts = $articlesHelper->getPosts($params);
|
841 |
+
|
842 |
+
// used to keep track of post ids present in the auto post
|
843 |
+
$post_ids = array();
|
844 |
+
|
845 |
+
// cleanup post and get image
|
846 |
+
foreach($posts as $key => $post) {
|
847 |
+
if($params['image_alignment'] !== 'none') {
|
848 |
+
// attempt to get post image
|
849 |
+
$posts[$key]['post_image'] = $articlesHelper->getImage($post);
|
850 |
+
}
|
851 |
+
|
852 |
+
$posts[$key] = $articlesHelper->convertPostToBlock($posts[$key], $params);
|
853 |
+
|
854 |
+
// store article id
|
855 |
+
$post_ids[] = $post['ID'];
|
856 |
+
}
|
857 |
+
// store article ids
|
858 |
+
$params['post_ids'] = join(',', $post_ids);
|
859 |
+
|
860 |
+
// get divider if necessary
|
861 |
+
if($params['show_divider'] === 'yes') {
|
862 |
+
if(isset($email['params']['divider'])) {
|
863 |
+
$params['divider'] = $email['params']['divider'];
|
864 |
+
} else {
|
865 |
+
$dividersHelper = WYSIJA::get('dividers', 'helper');
|
866 |
+
$params['divider'] = $dividersHelper->getDefault();
|
867 |
+
}
|
868 |
+
}
|
869 |
+
|
870 |
+
return base64_encode($wjEngine->renderEditorAutoPost($posts, $params));
|
871 |
+
}
|
872 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
873 |
}
|
controllers/ajax/config.php
CHANGED
@@ -173,154 +173,18 @@ class WYSIJA_control_back_config extends WYSIJA_control{
|
|
173 |
|
174 |
// WYSIJA Form Editor
|
175 |
function wysija_form_generate_template() {
|
176 |
-
$
|
177 |
|
178 |
-
$helper_form_engine = WYSIJA::get('form_engine', 'helper');
|
179 |
-
return base64_encode($helper_form_engine->render_editor_template($data));
|
180 |
-
}
|
181 |
-
|
182 |
-
function wysija_form_manage_field() {
|
183 |
-
$response = array('result' => true, 'error' => null);
|
184 |
-
|
185 |
-
// get data
|
186 |
-
$data = $this->_wysija_form_get_data();
|
187 |
-
$form_id = (int)$_REQUEST['form_id'];
|
188 |
-
|
189 |
-
// check for required fields
|
190 |
-
if(!isset($data['type']) || isset($data['type']) && strlen(trim($data['type'])) === 0) {
|
191 |
-
$response['error'] = __('You need to select a type for this field', WYSIJA);
|
192 |
-
$response['result'] = false;
|
193 |
-
}
|
194 |
-
if(!isset($data['name']) || isset($data['name']) && strlen(trim($data['name'])) === 0) {
|
195 |
-
$response['error'] = __('You need to specify a name for this field', WYSIJA);
|
196 |
-
$response['result'] = false;
|
197 |
-
}
|
198 |
-
|
199 |
-
// only proceed if there is no error
|
200 |
-
if($response['error'] === null) {
|
201 |
-
$is_required = (isset($data['params']['required']) ? WJ_Utils::to_bool($data['params']['required']) : false);
|
202 |
-
|
203 |
-
if(isset($data['field_id']) && (int)$data['field_id'] > 0) {
|
204 |
-
// it's an update
|
205 |
-
$custom_field = WJ_Field::get($data['field_id']);
|
206 |
-
|
207 |
-
if($custom_field !== NULL) {
|
208 |
-
$data['params'] = array_merge($custom_field->settings, $data['params']);
|
209 |
-
// update fields
|
210 |
-
$custom_field->name = $data['name'];
|
211 |
-
$custom_field->type = $data['type'];
|
212 |
-
$custom_field->required = $is_required;
|
213 |
-
$custom_field->settings = $data['params'];
|
214 |
-
$custom_field->save();
|
215 |
-
} else {
|
216 |
-
// throw error if field does not exist
|
217 |
-
$response['error'] = __('This field does not exist', WYSIJA);
|
218 |
-
$response['result'] = false;
|
219 |
-
}
|
220 |
-
} else {
|
221 |
-
// create new custom field
|
222 |
-
$custom_field = new WJ_Field();
|
223 |
-
$custom_field->set(array(
|
224 |
-
'name' => $data['name'],
|
225 |
-
'type' => $data['type'],
|
226 |
-
'required' => $is_required,
|
227 |
-
'settings' => $data['params']
|
228 |
-
));
|
229 |
-
$custom_field->save();
|
230 |
-
}
|
231 |
-
|
232 |
-
if($response['error'] === null) {
|
233 |
-
$helper_form_engine = WYSIJA::get('form_engine', 'helper');
|
234 |
-
|
235 |
-
// need to update each block instance of this custom field
|
236 |
-
$block = $helper_form_engine->refresh_custom_field($form_id, array(
|
237 |
-
'name' => $data['name'],
|
238 |
-
'field' => $custom_field->user_column_name(),
|
239 |
-
'type' => $data['type'],
|
240 |
-
'required' => $is_required,
|
241 |
-
'settings' => $data['params']
|
242 |
-
));
|
243 |
-
|
244 |
-
// render editor toolbar & templates
|
245 |
-
$response['data'] = array(
|
246 |
-
'toolbar' => base64_encode($helper_form_engine->render_editor_toolbar()),
|
247 |
-
'templates' => base64_encode($helper_form_engine->render_editor_templates())
|
248 |
-
);
|
249 |
-
|
250 |
-
if($block !== null) {
|
251 |
-
// refresh block using this custom field in the current form
|
252 |
-
$block_template = $helper_form_engine->render_editor_template($block);
|
253 |
-
|
254 |
-
if($block_template !== null) {
|
255 |
-
$response['data']['block'] = base64_encode($block_template);
|
256 |
-
}
|
257 |
-
}
|
258 |
-
}
|
259 |
-
}
|
260 |
-
|
261 |
-
return $response;
|
262 |
-
}
|
263 |
-
|
264 |
-
// get wysija form data from post (auto decoding)
|
265 |
-
private function _wysija_form_get_data() {
|
266 |
if(isset($_POST['wysijaData'])) {
|
267 |
// decode the data string
|
268 |
$decoded_data = base64_decode($_POST['wysijaData']);
|
269 |
|
270 |
// avoid using stripslashes as it's not reliable depending on the magic quotes settings
|
271 |
$json_data = str_replace('\"', '"', $decoded_data);
|
272 |
-
|
273 |
-
}
|
274 |
-
return array();
|
275 |
-
}
|
276 |
|
277 |
-
|
278 |
-
|
279 |
-
$data = $this->_wysija_form_get_data();
|
280 |
-
|
281 |
-
// check for field_id parameter
|
282 |
-
if(isset($data['field_id']) && (int)$data['field_id'] > 0) {
|
283 |
-
// get custom field by id
|
284 |
-
$custom_field = WJ_Field::get($data['field_id']);
|
285 |
-
|
286 |
-
// if the custom field exists
|
287 |
-
if($custom_field !== null) {
|
288 |
-
// we need to remove the field in any form
|
289 |
-
// get all forms
|
290 |
-
$model_forms = WYSIJA::get('forms', 'model');
|
291 |
-
$forms = $model_forms->getRows();
|
292 |
-
|
293 |
-
// get custom field name
|
294 |
-
$field_name = $custom_field->user_column_name();
|
295 |
-
if(is_array($forms) && count($forms) > 0) {
|
296 |
-
// loop through each form
|
297 |
-
foreach ($forms as $i => $form) {
|
298 |
-
$requires_update = false;
|
299 |
-
|
300 |
-
// decode form data
|
301 |
-
$data = unserialize(base64_decode($form['data']));
|
302 |
-
|
303 |
-
// loop through each block
|
304 |
-
foreach($data['body'] as $j => $block) {
|
305 |
-
// in case we find a text block
|
306 |
-
if($block['field'] === $field_name) {
|
307 |
-
unset($data['body'][$j]);
|
308 |
-
// flag form to be updated
|
309 |
-
$requires_update = true;
|
310 |
-
}
|
311 |
-
}
|
312 |
-
|
313 |
-
// if the form requires update, let's do it
|
314 |
-
if($requires_update === true) {
|
315 |
-
$model_forms->reset();
|
316 |
-
$model_forms->update(array('data' => base64_encode(serialize($data))), array('form_id' => (int)$form['form_id']));
|
317 |
-
}
|
318 |
-
}
|
319 |
-
}
|
320 |
-
|
321 |
-
// delete custom field
|
322 |
-
$custom_field->delete();
|
323 |
-
}
|
324 |
}
|
325 |
}
|
326 |
|
@@ -433,7 +297,7 @@ class WYSIJA_control_back_config extends WYSIJA_control{
|
|
433 |
'<a href="'.admin_url('widgets.php').'" target="_blank">',
|
434 |
'</a>'
|
435 |
),
|
436 |
-
__('Saved! Add this form to [link_widget]a widget[/link_widget]
|
437 |
);
|
438 |
}
|
439 |
|
@@ -448,10 +312,10 @@ class WYSIJA_control_back_config extends WYSIJA_control{
|
|
448 |
// return response depending on db save result
|
449 |
if(!$result) {
|
450 |
// throw error
|
451 |
-
$this->error(__('Your form could not be saved
|
452 |
} else {
|
453 |
// save successful
|
454 |
-
$this->notice(__('Your form has been saved
|
455 |
}
|
456 |
}
|
457 |
|
173 |
|
174 |
// WYSIJA Form Editor
|
175 |
function wysija_form_generate_template() {
|
176 |
+
$field = array();
|
177 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
178 |
if(isset($_POST['wysijaData'])) {
|
179 |
// decode the data string
|
180 |
$decoded_data = base64_decode($_POST['wysijaData']);
|
181 |
|
182 |
// avoid using stripslashes as it's not reliable depending on the magic quotes settings
|
183 |
$json_data = str_replace('\"', '"', $decoded_data);
|
184 |
+
$field = json_decode($json_data, true);
|
|
|
|
|
|
|
185 |
|
186 |
+
$helper_form_engine = WYSIJA::get('form_engine', 'helper');
|
187 |
+
return base64_encode($helper_form_engine->render_editor_template($field));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
188 |
}
|
189 |
}
|
190 |
|
297 |
'<a href="'.admin_url('widgets.php').'" target="_blank">',
|
298 |
'</a>'
|
299 |
),
|
300 |
+
__('Saved! Add this form to [link_widget]a widget[/link_widget]', WYSIJA)
|
301 |
);
|
302 |
}
|
303 |
|
312 |
// return response depending on db save result
|
313 |
if(!$result) {
|
314 |
// throw error
|
315 |
+
$this->error(__('Your form could not be saved', WYSIJA));
|
316 |
} else {
|
317 |
// save successful
|
318 |
+
$this->notice(__('Your form has been saved', WYSIJA));
|
319 |
}
|
320 |
}
|
321 |
|
controllers/ajax/statistics.php
DELETED
@@ -1,95 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
defined('WYSIJA') or die('Restricted access');
|
3 |
-
|
4 |
-
require_once(WYSIJA_CORE.'module'.DS.'statistics.php'); // @todo
|
5 |
-
|
6 |
-
class WYSIJA_control_back_statistics extends WYSIJA_control
|
7 |
-
{
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Main model of this controller
|
11 |
-
* @var string
|
12 |
-
*/
|
13 |
-
public $model = 'statistics';
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Main view of this controller
|
17 |
-
* @var string
|
18 |
-
*/
|
19 |
-
public $view = 'statistics';
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Render a hook of a specific module
|
23 |
-
* @return string
|
24 |
-
*/
|
25 |
-
public function get_block()
|
26 |
-
{
|
27 |
-
if (empty($_REQUEST['block']))
|
28 |
-
return '';
|
29 |
-
$module = $_REQUEST['block'];
|
30 |
-
$hook_name = 'hook_stats';
|
31 |
-
return apply_filters('custom_module_hook', '', $module, $hook_name, $this->get_post_params());
|
32 |
-
}
|
33 |
-
|
34 |
-
protected function get_post_params()
|
35 |
-
{
|
36 |
-
$params = array( );
|
37 |
-
$order_by = !empty($_REQUEST['filter']['orderBy']) ? $_REQUEST['filter']['orderBy'] : null;
|
38 |
-
switch (strtolower($order_by))
|
39 |
-
{
|
40 |
-
case 'sent':
|
41 |
-
$order_by = WYSIJA_module_statistics::ORDER_BY_SENT;
|
42 |
-
break;
|
43 |
-
case 'open':
|
44 |
-
$order_by = WYSIJA_module_statistics::ORDER_BY_OPEN;
|
45 |
-
break;
|
46 |
-
case 'click':
|
47 |
-
$order_by = WYSIJA_module_statistics::ORDER_BY_CLICK;
|
48 |
-
break;
|
49 |
-
case 'unsubscribe':
|
50 |
-
$order_by = WYSIJA_module_statistics::ORDER_BY_UNSUBSCRIBE;
|
51 |
-
break;
|
52 |
-
default:
|
53 |
-
$order_by = null;
|
54 |
-
break;
|
55 |
-
}
|
56 |
-
$order_direction = !empty($_REQUEST['filter']['orderDirection']) ? $_REQUEST['filter']['orderDirection'] : null;
|
57 |
-
switch (strtolower($order_direction))
|
58 |
-
{
|
59 |
-
case 'asc':
|
60 |
-
$order_direction = WYSIJA_module_statistics::ORDER_DIRECTION_ASC;
|
61 |
-
break;
|
62 |
-
case 'desc':
|
63 |
-
default:
|
64 |
-
$order_direction = WYSIJA_module_statistics::ORDER_DIRECTION_DESC;
|
65 |
-
break;
|
66 |
-
}
|
67 |
-
$params['top'] = !empty($_REQUEST['filter']['itemPerPage']) ? (int)$_REQUEST['filter']['itemPerPage'] : WYSIJA_module_statistics::DEFAULT_TOP_RECORDS;
|
68 |
-
$params['from'] = !empty($_REQUEST['filter']['from']) ? $_REQUEST['filter']['from'] : null;
|
69 |
-
$params['to'] = !empty($_REQUEST['filter']['to']) ? $_REQUEST['filter']['to'] : null;
|
70 |
-
$params['order_by'] = $order_by;
|
71 |
-
$params['order_direction'] = $order_direction;
|
72 |
-
|
73 |
-
// this doesn't work when php is less than 5.3, this is the case on my host (ben) which is very popular in France, SPain and UK
|
74 |
-
// we cannot use functions from php 5.3
|
75 |
-
if (function_exists('date_diff'))
|
76 |
-
{
|
77 |
-
$this->data['date_interval'] = date_diff(date_create($params['from']), date_create($params['to']));
|
78 |
-
}
|
79 |
-
else
|
80 |
-
{
|
81 |
-
$duration = strtotime($params['to']) - strtotime($params['from']);
|
82 |
-
$helper_toolbox = WYSIJA::get('toolbox', 'helper');
|
83 |
-
$this->data['date_interval'] = (object)$helper_toolbox->convert_seconds_to_array($duration, false);
|
84 |
-
}
|
85 |
-
$params['group_by'] = ( $this->data['date_interval']->days == 0 || $this->data['date_interval']->days > WYSIJA_module_statistics::SWITCHING_DATE_TO_MONTH_THRESHOLD) ?
|
86 |
-
WYSIJA_module_statistics::GROUP_BY_MONTH :
|
87 |
-
WYSIJA_module_statistics::GROUP_BY_DATE; // $date_interval->days == 0, means, no begin date, no end date
|
88 |
-
|
89 |
-
// Hack!
|
90 |
-
$_REQUEST['limit_pp'] = $params['top'];// Pagination, mark current selected value
|
91 |
-
|
92 |
-
return $params;
|
93 |
-
}
|
94 |
-
|
95 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controllers/ajax/subscribers.php
CHANGED
@@ -36,19 +36,11 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_front{
|
|
36 |
|
37 |
$helperUser=WYSIJA::get('user','helper');
|
38 |
if(!$helperUser->checkData($data))return false;
|
39 |
-
$
|
40 |
-
|
41 |
-
if((int)$user_id > 0) {
|
42 |
-
// Handle custom fields
|
43 |
-
if(isset($data['user_field'])) {
|
44 |
-
WJ_FieldHandler::handle_all($data['user_field'], $user_id);
|
45 |
-
}
|
46 |
-
}
|
47 |
|
48 |
return true;
|
49 |
}
|
50 |
|
51 |
-
// REFACTOR: Insanely complicated and inefficient
|
52 |
function convertUserData($datarequested){
|
53 |
$data=array();
|
54 |
|
@@ -68,35 +60,22 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_front{
|
|
68 |
}
|
69 |
$data['user_list']['list_ids']=$listids;
|
70 |
|
71 |
-
// define array for custom user fields
|
72 |
-
$data['user_field'] = array();
|
73 |
-
|
74 |
//get the user info and the rest of the data posted
|
75 |
foreach($datarequested as $key => $val){
|
76 |
-
if(strpos($key, 'wysija[user]')!== false)
|
77 |
$keymodified=str_replace(array('wysija[','][',']'),array('','#',''),$key);
|
78 |
$keystabcol=explode('#',$keymodified);
|
79 |
switch(count($keystabcol)){
|
80 |
case 2:
|
81 |
$data[$keystabcol[0]][$keystabcol[1]]=$val;
|
82 |
-
|
83 |
case 3:
|
84 |
$data[$keystabcol[0]][$keystabcol[1]][$keystabcol[2]]=$val;
|
85 |
-
|
|
|
86 |
}
|
87 |
-
} else if(strpos($key, 'wysija[field]')!== false){
|
88 |
-
$keymodified=str_replace(array('wysija[','][',']'),array('','#',''),$key);
|
89 |
-
$keystabcol=explode('#',$keymodified);
|
90 |
|
91 |
-
|
92 |
-
case 2:
|
93 |
-
$data['user_field'][$keystabcol[1]] = $val;
|
94 |
-
break;
|
95 |
-
case 3:
|
96 |
-
$data['user_field'][$keystabcol[1]][$keystabcol[2]] = $val;
|
97 |
-
break;
|
98 |
-
}
|
99 |
-
} else {
|
100 |
if(!isset($data[$key])) $data[$key]=$val;
|
101 |
}
|
102 |
}
|
36 |
|
37 |
$helperUser=WYSIJA::get('user','helper');
|
38 |
if(!$helperUser->checkData($data))return false;
|
39 |
+
$helperUser->addSubscriber($data);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
|
41 |
return true;
|
42 |
}
|
43 |
|
|
|
44 |
function convertUserData($datarequested){
|
45 |
$data=array();
|
46 |
|
60 |
}
|
61 |
$data['user_list']['list_ids']=$listids;
|
62 |
|
|
|
|
|
|
|
63 |
//get the user info and the rest of the data posted
|
64 |
foreach($datarequested as $key => $val){
|
65 |
+
if(strpos($key, 'wysija[user]')!== false){
|
66 |
$keymodified=str_replace(array('wysija[','][',']'),array('','#',''),$key);
|
67 |
$keystabcol=explode('#',$keymodified);
|
68 |
switch(count($keystabcol)){
|
69 |
case 2:
|
70 |
$data[$keystabcol[0]][$keystabcol[1]]=$val;
|
71 |
+
break;
|
72 |
case 3:
|
73 |
$data[$keystabcol[0]][$keystabcol[1]][$keystabcol[2]]=$val;
|
74 |
+
break;
|
75 |
+
default:
|
76 |
}
|
|
|
|
|
|
|
77 |
|
78 |
+
}else{
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
if(!isset($data[$key])) $data[$key]=$val;
|
80 |
}
|
81 |
}
|
controllers/ajax/tmce.php
CHANGED
@@ -1,139 +1,140 @@
|
|
1 |
-
<?php
|
2 |
-
defined('WYSIJA') or die('Restricted access');
|
3 |
-
class WYSIJA_control_back_tmce extends WYSIJA_control{
|
4 |
-
|
5 |
-
function WYSIJA_control_back_tmce(){
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
$
|
13 |
-
$data
|
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 |
-
if
|
47 |
-
|
48 |
-
$
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
$model_forms
|
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 |
-
$custom_fields['email']['
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
|
|
|
139 |
}
|
1 |
+
<?php
|
2 |
+
defined('WYSIJA') or die('Restricted access');
|
3 |
+
class WYSIJA_control_back_tmce extends WYSIJA_control{
|
4 |
+
|
5 |
+
function WYSIJA_control_back_tmce(){
|
6 |
+
if(!WYSIJA::current_user_can('wysija_subscriwidget')) die('Action is forbidden.');
|
7 |
+
parent::WYSIJA_control();
|
8 |
+
$this->viewObj=WYSIJA::get('tmce','view');
|
9 |
+
}
|
10 |
+
|
11 |
+
function subscribersAdd(){
|
12 |
+
$this->viewObj->title=__('Insert Total of Subscribers',WYSIJA);
|
13 |
+
$data = array();
|
14 |
+
$data['lists'] = WYSIJA::get('list','model')->getLists();
|
15 |
+
foreach ($data['lists'] as $k => $list){
|
16 |
+
if (empty($list['is_enabled']) OR empty($list['is_public'])) unset($data['lists'][$k]);
|
17 |
+
}
|
18 |
+
$data['confirm_dbleoptin'] = WYSIJA::get('config','model')->getValue('confirm_dbleoptin');
|
19 |
+
|
20 |
+
$this->viewObj->subscribersAdd($data);
|
21 |
+
exit;
|
22 |
+
}
|
23 |
+
|
24 |
+
function subscribersEdit(){
|
25 |
+
|
26 |
+
}
|
27 |
+
|
28 |
+
function registerAdd(){
|
29 |
+
$this->viewObj->title=__('Insert Subscription Form',WYSIJA);
|
30 |
+
|
31 |
+
$this->viewObj->registerAdd($this->getData());
|
32 |
+
exit;
|
33 |
+
}
|
34 |
+
|
35 |
+
function registerEdit(){
|
36 |
+
$this->viewObj->title=__('Insert Subscription Form',WYSIJA);
|
37 |
+
|
38 |
+
$this->viewObj->registerAdd($this->getData(),true);
|
39 |
+
exit;
|
40 |
+
}
|
41 |
+
|
42 |
+
|
43 |
+
function getData(){
|
44 |
+
$data_widget=array();
|
45 |
+
|
46 |
+
// if this parameter is passed that means we have an old widget let's import it and select
|
47 |
+
if(isset($_REQUEST['widget-data64'])){
|
48 |
+
$data_widget=unserialize(base64_decode($_REQUEST['widget-data64']));
|
49 |
+
$post=get_post($_REQUEST['post_id']);
|
50 |
+
|
51 |
+
// we need a title to identify the form
|
52 |
+
$data_widget['title'] = 'Form on '.$post->post_type.': '.$post->post_title;
|
53 |
+
|
54 |
+
$model_forms = WYSIJA::get('forms', 'model');
|
55 |
+
$model_forms->reset();
|
56 |
+
$form = $model_forms->getOne(false,array('name' => $data_widget['title']));
|
57 |
+
|
58 |
+
// this form doesn't exist yet in the new format so let's try to import it
|
59 |
+
if(empty($form)){
|
60 |
+
$helper_update=WYSIJA::get('update','helper');
|
61 |
+
|
62 |
+
$form_id = $helper_update->convert_widget_to_form($data_widget);
|
63 |
+
if($form_id!==false) {
|
64 |
+
$data_widget['default_form'] = $form_id;
|
65 |
+
}
|
66 |
+
}
|
67 |
+
}
|
68 |
+
|
69 |
+
if(isset($_POST['widget-wysija'])){
|
70 |
+
$data_widget=array('widget_id'=>$_POST['widget_id'],'preview'=>true);
|
71 |
+
$custom_fields=array();
|
72 |
+
|
73 |
+
foreach($_POST['widget-wysija'] as $arra){
|
74 |
+
foreach($arra as $k => $v) {
|
75 |
+
switch($k){
|
76 |
+
case 'lists':
|
77 |
+
if(isset($data_widget[$k])) $data_widget[$k][]=$v[0];
|
78 |
+
else $data_widget[$k]=array($v[0]);
|
79 |
+
break;
|
80 |
+
case 'lists_name':
|
81 |
+
foreach($v as $kv=>$vv){
|
82 |
+
if(isset($data_widget[$k])) $data_widget[$k][$kv]=$vv;
|
83 |
+
else $data_widget[$k]=array($kv=>$vv);
|
84 |
+
}
|
85 |
+
|
86 |
+
break;
|
87 |
+
case 'customfields':
|
88 |
+
|
89 |
+
$found=false;
|
90 |
+
foreach($custom_fields as $keycol => $params){
|
91 |
+
if(isset($v[$keycol])){
|
92 |
+
$custom_fields[$keycol]= array_merge($custom_fields[$keycol],$v[$keycol]);
|
93 |
+
$found=true;
|
94 |
+
}
|
95 |
+
}
|
96 |
+
|
97 |
+
if(!$found) $custom_fields=array_merge($custom_fields,$v);
|
98 |
+
break;
|
99 |
+
|
100 |
+
default:
|
101 |
+
$data_widget[$k]=stripslashes($v);
|
102 |
+
}
|
103 |
+
|
104 |
+
}
|
105 |
+
}
|
106 |
+
|
107 |
+
|
108 |
+
$count=count($custom_fields);
|
109 |
+
if($count>1){
|
110 |
+
foreach($custom_fields as $keycol=>$paraval){
|
111 |
+
if($keycol!='email' && !isset($paraval['column_name'])) unset($custom_fields[$keycol]);
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
$count=count($custom_fields);
|
116 |
+
if($count>0){
|
117 |
+
if(!isset($custom_fields['email'])){
|
118 |
+
$custom_fields['email']['column_name']='email';
|
119 |
+
$custom_fields['email']['label']=__('Email',WYSIJA);
|
120 |
+
}
|
121 |
+
}
|
122 |
+
|
123 |
+
$count=count($custom_fields);
|
124 |
+
if($count==1 && isset($custom_fields['email'])){
|
125 |
+
|
126 |
+
$custom_fields=array();
|
127 |
+
}
|
128 |
+
|
129 |
+
if($custom_fields) $data_widget['customfields']=$custom_fields;
|
130 |
+
|
131 |
+
}
|
132 |
+
|
133 |
+
if(!isset($data_widget['customfields']) && isset($data_widget['labelswithin']) && $data_widget['labelswithin']=='labels_within'){
|
134 |
+
$data_widget['customfields']=array('email'=>array('label'=>__('Email',WYSIJA)));
|
135 |
+
}
|
136 |
+
|
137 |
+
return $data_widget;
|
138 |
+
}
|
139 |
+
|
140 |
}
|
controllers/back.php
CHANGED
@@ -17,7 +17,6 @@ class WYSIJA_control_back extends WYSIJA_control{
|
|
17 |
parent::WYSIJA_control();
|
18 |
global $wysija_msg,$wysija_queries,$wysija_queries_errors;
|
19 |
$wysija_msgTemp=get_option('wysija_msg');
|
20 |
-
|
21 |
if(is_array($wysija_msgTemp) && count($wysija_msgTemp)>0){
|
22 |
$wysija_msg=$wysija_msgTemp;
|
23 |
}
|
@@ -67,6 +66,9 @@ class WYSIJA_control_back extends WYSIJA_control{
|
|
67 |
add_action('wysija_various_check',array($this,'variousCheck'));
|
68 |
do_action('wysija_various_check');
|
69 |
|
|
|
|
|
|
|
70 |
$this->target_action_form = $this->data['target_action_form'] = $this->_getTargetActionForm(); // set default value of any form action
|
71 |
}
|
72 |
|
@@ -310,19 +312,17 @@ class WYSIJA_control_back extends WYSIJA_control{
|
|
310 |
$this->_batch_select['query'] = $this->modelObj->get_subscribers( $select, $filters, '', true );
|
311 |
$this->_batch_select['query_count'] = $this->modelObj->get_subscribers( array( 'COUNT(DISTINCT([wysija]user.user_id))'), $filters, '', true );
|
312 |
|
313 |
-
|
314 |
//Create a temporary table
|
315 |
-
$temp_table_name = '
|
316 |
-
$temp_table_create = 'CREATE TEMPORARY TABLE
|
317 |
-
$temp_table_insert = 'INSERT
|
318 |
$model_user = WYSIJA::get('user','model');
|
319 |
-
|
320 |
-
|
321 |
-
$model_user->query($temp_table_insert);
|
322 |
|
323 |
//Override the queres with temporary table
|
324 |
unset($this->_batch_select['where']);
|
325 |
-
$row_count = $model_user->query('get_row', 'SELECT
|
326 |
$this->_batch_select['original_query'] = $this->_batch_select['query']; // useful for export feature; in this case, we don't use temporary table
|
327 |
$this->_batch_select['select'] = 'SELECT DISTINCT user_id';
|
328 |
$this->_batch_select['from'] = 'FROM '.$temp_table_name . ' A';
|
@@ -344,13 +344,13 @@ class WYSIJA_control_back extends WYSIJA_control{
|
|
344 |
$url_checkout = $helper_licence->get_url_checkout('over200');
|
345 |
$this->error(str_replace(array('[link]','[/link]'),
|
346 |
array('<a title="'.__('Get Premium now',WYSIJA).'" target="_blank" href="'.$url_checkout.'">','</a>'),
|
347 |
-
sprintf(__('Yikes. You\'re over the limit of 2000 subscribers for the free version of
|
348 |
,$totalSubscribers)),true);
|
349 |
}else{
|
350 |
$url_checkout = $helper_licence->get_url_checkout('near200');
|
351 |
$this->notice(str_replace(array('[link]','[/link]'),
|
352 |
array('<a title="'.__('Get Premium now',WYSIJA).'" target="_blank" href="'.$url_checkout.'">','</a>'),
|
353 |
-
sprintf(__('Yikes! You\'re near the limit of %1$s subscribers for
|
354 |
,"2000")));
|
355 |
}
|
356 |
}
|
@@ -540,12 +540,7 @@ class WYSIJA_control_back extends WYSIJA_control{
|
|
540 |
}
|
541 |
|
542 |
function popupContent(){
|
543 |
-
|
544 |
-
remove_action('admin_enqueue_scripts', 'wp_auth_check_load');
|
545 |
-
|
546 |
-
// add popup css
|
547 |
-
wp_enqueue_style('custom_popup_css', WYSIJA_URL.'css/adminPopup.css', array(), WYSIJA::get_version(), 'screen');
|
548 |
-
|
549 |
global $viewMedia;
|
550 |
$viewMedia=$this->viewObj;
|
551 |
$_GET['type']=$_REQUEST['type']='image';
|
@@ -635,6 +630,41 @@ class WYSIJA_control_back extends WYSIJA_control{
|
|
635 |
return $location;
|
636 |
}
|
637 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
638 |
/**
|
639 |
* to remove the conflicts in wysija's interfaces
|
640 |
* @param boolean $themes
|
17 |
parent::WYSIJA_control();
|
18 |
global $wysija_msg,$wysija_queries,$wysija_queries_errors;
|
19 |
$wysija_msgTemp=get_option('wysija_msg');
|
|
|
20 |
if(is_array($wysija_msgTemp) && count($wysija_msgTemp)>0){
|
21 |
$wysija_msg=$wysija_msgTemp;
|
22 |
}
|
66 |
add_action('wysija_various_check',array($this,'variousCheck'));
|
67 |
do_action('wysija_various_check');
|
68 |
|
69 |
+
// check if the plugin has an update available
|
70 |
+
$updateH=WYSIJA::get('update','helper');
|
71 |
+
$updateH->checkForNewVersion();
|
72 |
$this->target_action_form = $this->data['target_action_form'] = $this->_getTargetActionForm(); // set default value of any form action
|
73 |
}
|
74 |
|
312 |
$this->_batch_select['query'] = $this->modelObj->get_subscribers( $select, $filters, '', true );
|
313 |
$this->_batch_select['query_count'] = $this->modelObj->get_subscribers( array( 'COUNT(DISTINCT([wysija]user.user_id))'), $filters, '', true );
|
314 |
|
|
|
315 |
//Create a temporary table
|
316 |
+
$temp_table_name = 'user'. time();
|
317 |
+
$temp_table_create = 'CREATE TEMPORARY TABLE '.$temp_table_name . ' (user_id int (10) NOT NULL, PRIMARY KEY (user_id)) ENGINE=MyISAM';
|
318 |
+
$temp_table_insert = 'INSERT INTO '.$temp_table_name.' ' . $this->_batch_select['query'];
|
319 |
$model_user = WYSIJA::get('user','model');
|
320 |
+
$model_user->query($temp_table_create);
|
321 |
+
$model_user->query($temp_table_insert);
|
|
|
322 |
|
323 |
//Override the queres with temporary table
|
324 |
unset($this->_batch_select['where']);
|
325 |
+
$row_count = $model_user->query('get_row', 'SELECT ROW_COUNT() as row_count');
|
326 |
$this->_batch_select['original_query'] = $this->_batch_select['query']; // useful for export feature; in this case, we don't use temporary table
|
327 |
$this->_batch_select['select'] = 'SELECT DISTINCT user_id';
|
328 |
$this->_batch_select['from'] = 'FROM '.$temp_table_name . ' A';
|
344 |
$url_checkout = $helper_licence->get_url_checkout('over200');
|
345 |
$this->error(str_replace(array('[link]','[/link]'),
|
346 |
array('<a title="'.__('Get Premium now',WYSIJA).'" target="_blank" href="'.$url_checkout.'">','</a>'),
|
347 |
+
sprintf(__('Yikes. You\'re over the limit of 2000 subscribers for the free version of Wysija (%1$s in total). Sending is disabled now. Please upgrade your version to [link]premium[/link] to send without limits.',WYSIJA)
|
348 |
,$totalSubscribers)),true);
|
349 |
}else{
|
350 |
$url_checkout = $helper_licence->get_url_checkout('near200');
|
351 |
$this->notice(str_replace(array('[link]','[/link]'),
|
352 |
array('<a title="'.__('Get Premium now',WYSIJA).'" target="_blank" href="'.$url_checkout.'">','</a>'),
|
353 |
+
sprintf(__('Yikes! You\'re near the limit of %1$s subscribers for Wysija\'s free version. Upgrade to [link]Premium[/link] to send without limits, and more.',WYSIJA)
|
354 |
,"2000")));
|
355 |
}
|
356 |
}
|
540 |
}
|
541 |
|
542 |
function popupContent(){
|
543 |
+
wp_enqueue_style('custom_popup_css', WYSIJA_URL.'css/adminPopup.css');
|
|
|
|
|
|
|
|
|
|
|
544 |
global $viewMedia;
|
545 |
$viewMedia=$this->viewObj;
|
546 |
$_GET['type']=$_REQUEST['type']='image';
|
630 |
return $location;
|
631 |
}
|
632 |
|
633 |
+
function __get_social_buttons($inline=true){
|
634 |
+
|
635 |
+
if($inline){
|
636 |
+
$class=' class="socials removeme"';
|
637 |
+
}else{
|
638 |
+
$class=' id="socials-block"';
|
639 |
+
}
|
640 |
+
$wysijaversion='<div '.$class.'>
|
641 |
+
<div class="fb" >
|
642 |
+
<div id="fb-root"></div>
|
643 |
+
<script>(function(d, s, id) {
|
644 |
+
var js, fjs = d.getElementsByTagName(s)[0];
|
645 |
+
if (d.getElementById(id)) return;
|
646 |
+
js = d.createElement(s); js.id = id;
|
647 |
+
js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
|
648 |
+
fjs.parentNode.insertBefore(js, fjs);
|
649 |
+
}(document, \'script\', \'facebook-jssdk\'));</script>
|
650 |
+
<div class="fb-like" data-href="http://www.facebook.com/mailpoetplugin" data-send="false" data-layout="button_count" data-width="90" data-show-faces="false"></div></div>
|
651 |
+
<div class="twitter">
|
652 |
+
<a href="https://twitter.com/mail_poet" class="twitter-follow-button" data-show-count="true">Follow us</a>
|
653 |
+
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
654 |
+
</div>
|
655 |
+
<div class="gplus">
|
656 |
+
<!-- Place this tag in your head or just before your close body tag -->
|
657 |
+
<script type="text/javascript" src="https://apis.google.com/js/plusone.js"></script>
|
658 |
+
<!-- Place this tag where you want the +1 button to render -->
|
659 |
+
<g:plusone href="https://plus.google.com/104749849451537343615" size="medium"></g:plusone></div>
|
660 |
+
';
|
661 |
+
if($inline) $wysijaversion.='<div id="hidesocials">
|
662 |
+
<a class="linkignore socialfoot" href="javascript:;">'.__('Hide!',WYSIJA).'</a>
|
663 |
+
</div>';
|
664 |
+
$wysijaversion.= "<div style='clear:both;'></div></div><div style='clear:both;'></div>";
|
665 |
+
return $wysijaversion;
|
666 |
+
}
|
667 |
+
|
668 |
/**
|
669 |
* to remove the conflicts in wysija's interfaces
|
670 |
* @param boolean $themes
|
controllers/back/campaigns.php
CHANGED
@@ -2,2758 +2,2678 @@
|
|
2 |
|
3 |
global $viewMedia;
|
4 |
defined('WYSIJA') or die('Restricted access');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
6 |
-
|
|
|
|
|
7 |
|
8 |
-
var $model = 'campaign';
|
9 |
-
var $view = 'campaigns';
|
10 |
-
var $list_columns = array('campaign_id', 'name', 'description');
|
11 |
-
var $searchable = array('name', 'subject');
|
12 |
-
var $filters = array();
|
13 |
-
var $base_url = 'admin.php';
|
14 |
|
15 |
-
|
|
|
|
|
16 |
|
17 |
-
|
18 |
-
|
19 |
-
function installation(){
|
20 |
-
|
21 |
-
$start_time = time();
|
22 |
-
$check_max_execution_time = get_option( 'mpoet_check_max_execution_time' );
|
23 |
-
$ini_max_execution_time = ini_get( 'max_execution_time' );
|
24 |
-
|
25 |
-
// 1 - we haven't run the max execution time extension test yet, let's do it
|
26 |
-
// this test should be run in the background, it may take more than 5 minutes to validate
|
27 |
-
if( empty( $check_max_execution_time ) ){
|
28 |
-
|
29 |
-
// we set the max_execution_time to infinite
|
30 |
-
@ini_set( 'max_execution_time' , 0 );
|
31 |
-
// we keep running the script even if the user abort his request
|
32 |
-
@ignore_user_abort( true );
|
33 |
-
|
34 |
-
$reset_max_execution_time = ini_get( 'max_execution_time' );
|
35 |
-
|
36 |
-
// FAILURE some servers the "max execution time" returned is Array we make sure our value is numeric
|
37 |
-
if( !is_numeric( $ini_max_execution_time ) ){
|
38 |
-
WYSIJA::update_option( 'mpoet_check_max_execution_time' , $ini_max_execution_time-1 );
|
39 |
-
return;
|
40 |
-
}
|
41 |
-
|
42 |
-
// FAILURE this server doesn't allow us to set the max_execution_time
|
43 |
-
if( $reset_max_execution_time == $ini_max_execution_time ){
|
44 |
-
WYSIJA::update_option( 'mpoet_check_max_execution_time' , $ini_max_execution_time-1 );
|
45 |
-
return;
|
46 |
-
}
|
47 |
-
|
48 |
-
// we set a FAILURE value to our flag so we know if the process crash while executing
|
49 |
-
WYSIJA::update_option( 'mpoet_check_max_execution_time' , $ini_max_execution_time );
|
50 |
-
|
51 |
-
// the common default timeout value is 300, so if by default the timelimit is 0 (which might have been set by another application)
|
52 |
-
// we default it to 300 known as a common default value and we run the extension test
|
53 |
-
if( $ini_max_execution_time == 0 ) $ini_max_execution_time = 300;
|
54 |
-
|
55 |
-
// we run asleep script during the initial max execution time to a larger value
|
56 |
-
$total_time_to_run_script = $ini_max_execution_time + 20;
|
57 |
-
$sleeping_intervals = 5;
|
58 |
-
$duration_so_far = 0;
|
59 |
-
|
60 |
-
// we sleep until the extended total timeout value is reached or it breaks before but we have the value we need
|
61 |
-
while($total_time_to_run_script >0){
|
62 |
-
$total_time_to_run_script = $total_time_to_run_script - $sleeping_intervals;
|
63 |
-
sleep( $sleeping_intervals );
|
64 |
-
|
65 |
-
$duration_so_far = time() - $start_time;
|
66 |
-
WYSIJA::update_option( 'mpoet_check_max_execution_time' , $duration_so_far );
|
67 |
-
}
|
68 |
-
|
69 |
-
// SUCCESS the scripts didn't die we set our flag in the db so that we know the test is a success
|
70 |
-
WYSIJA::update_option( 'mpoet_check_max_execution_time' , $duration_so_far );
|
71 |
-
|
72 |
-
}else{
|
73 |
-
// 2 - the max execution time extension test has been run, this is the results we get
|
74 |
-
if( $check_max_execution_time > $ini_max_execution_time ){
|
75 |
-
echo 'max_execution_time('.$ini_max_execution_time.') can be extended('.$check_max_execution_time.')';
|
76 |
-
}else{
|
77 |
-
echo 'max_execution_time('.$ini_max_execution_time.') cannot be extended( max value : '.$check_max_execution_time.')';
|
78 |
-
}
|
79 |
-
}
|
80 |
-
exit;
|
81 |
-
}
|
82 |
-
|
83 |
-
/**
|
84 |
-
* Welcome page first time install
|
85 |
-
* @return boolean
|
86 |
-
*/
|
87 |
-
function welcome_new() {
|
88 |
-
$this->title = $this->viewObj->title = __('Welcome Page!', WYSIJA);
|
89 |
-
$this->jsTrans['instalwjp'] = __('Installing MailPoet Newsletter Premium plugin', WYSIJA);
|
90 |
-
$helper_readme = WYSIJA::get('readme', 'helper');
|
91 |
-
$helper_readme->scan();
|
92 |
-
$this->data = array();
|
93 |
-
$this->data['abouttext'] = __('A Brand New MailPoet. Let the Fun Begin.', WYSIJA);
|
94 |
-
|
95 |
-
$model_config = WYSIJA::get('config', 'model');
|
96 |
-
$is_multisite = is_multisite();
|
97 |
-
$is_network_admin = WYSIJA::current_user_can('manage_network');
|
98 |
-
if ($is_multisite && $is_network_admin) {
|
99 |
-
$model_config->save(array('ms_wysija_whats_new' => WYSIJA::get_version()));
|
100 |
-
} else {
|
101 |
-
$model_config->save(array('wysija_whats_new' => WYSIJA::get_version()));
|
102 |
-
}
|
103 |
-
|
104 |
-
//add a new language code with a new video
|
105 |
-
$video_language=array();
|
106 |
-
//$video_language['en_EN'] = '<iframe width="853" height="480" src="http://www.youtube.com/embed/pYzaHDTg5Jk" frameborder="0" allowfullscreen></iframe>';
|
107 |
-
$video_language['en_EN'] = '<iframe src="//player.vimeo.com/video/81479899" width="500" height="281" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>';
|
108 |
-
//$video_language['fr_FR'] = '<iframe width="853" height="480" src="http://www.youtube.com/embed/W5EyW5w7aWQ" frameborder="0" allowfullscreen></iframe>';
|
109 |
-
// $video_language['sv_SE']='<iframe width="853" height="480" src="http://www.youtube.com/embed/O8_t_dekx74" frameborder="0" allowfullscreen></iframe>';
|
110 |
-
//$video_language['ar']='<iframe width="853" height="480" src="http://www.youtube.com/embed/cyDHlX_qgOo" frameborder="0" allowfullscreen></iframe>';
|
111 |
-
|
112 |
-
$wp_lang = get_locale();
|
113 |
-
if (!empty($wp_lang) && isset($video_language[$wp_lang])) {
|
114 |
-
$welcome_video_link = $video_language[$wp_lang];
|
115 |
-
} else {
|
116 |
-
$welcome_video_link = $video_language['en_EN'];
|
117 |
-
}
|
118 |
-
|
119 |
-
$this->data['sections'][] = array(
|
120 |
-
'title' => __('Hey, we\'re curious! How did you find out about us?', WYSIJA) . '<span id="poll_result"></span>',
|
121 |
-
'format' => 'normal',
|
122 |
-
'paragraphs' => array(
|
123 |
-
'<ul class="welcome_poll">
|
124 |
-
<li>
|
125 |
-
<input type="radio" id="how_did_you_find_us_1" value="repository" name="how_did_you_find_us">
|
126 |
-
<label value="lab1" for="how_did_you_find_us_1">' . __('WordPress.org plugin repository', WYSIJA) . '</label>
|
127 |
-
</li>
|
128 |
-
<li>
|
129 |
-
<input type="radio" id="how_did_you_find_us_2" value="search_engine" name="how_did_you_find_us">
|
130 |
-
<label value="lab2" for="how_did_you_find_us_2">' . __('Google or other search engine', WYSIJA) . '</label>
|
131 |
-
</li>
|
132 |
-
<li>
|
133 |
-
<input type="radio" id="how_did_you_find_us_3" value="friend" name="how_did_you_find_us">
|
134 |
-
<label value="lab3" for="how_did_you_find_us_3">' . __('Friend recommendation', WYSIJA) . '</label>
|
135 |
-
</li>
|
136 |
-
<li>
|
137 |
-
<input type="radio" id="how_did_you_find_us_4" value="url" name="how_did_you_find_us">
|
138 |
-
<label value="lab4" for="how_did_you_find_us_4">' . __('Blog post, online review, forum:', WYSIJA) . '</label>
|
139 |
-
<input type="text" id="how_did_you_find_us_4_url" name="how_did_you_find_us_url" placeholder="' . __('Please enter the address where you\'ve found out about us', WYSIJA) . '">
|
140 |
-
</li>
|
141 |
-
</ul>'
|
142 |
-
)
|
143 |
-
);
|
144 |
-
|
145 |
-
$this->data['sections'][]=array(
|
146 |
-
'title'=>__('First Time? See it in Action',WYSIJA),
|
147 |
-
'format'=>'normal',
|
148 |
-
'paragraphs'=>array(
|
149 |
-
__('You can start by watching this video by one of our users.',WYSIJA),
|
150 |
-
$welcome_video_link
|
151 |
-
)
|
152 |
-
);
|
153 |
-
|
154 |
-
// Check if user is already sharing data, and hide the share link.
|
155 |
-
if (!$model_config->getValue('analytics')) {
|
156 |
-
$share_section = array(
|
157 |
-
'title' => __('Share your data', WYSIJA),
|
158 |
-
'content' => str_replace(
|
159 |
-
array('[link]', '[/link]', '[ajaxlink]', '[/ajaxlink]'), array('<a title="Anonymous Data" target="_blank" href="http://support.mailpoet.com/knowledgebase/share-your-data/?utm_source=wpadmin&utm_campaign=welcome_page">', '</a>', '<a id="share_analytics" href="javascript:;">', '</a>'), __("We know too little about our users. We're looking for [link]anonymous data[/link] to build a better plugin. [ajaxlink]Yes, count me in![/ajaxlink]", WYSIJA))
|
160 |
-
);
|
161 |
-
} else {
|
162 |
-
$share_section = array(
|
163 |
-
'title' => __('Share your data', WYSIJA),
|
164 |
-
'content' => str_replace(
|
165 |
-
array('[link]', '[/link]'), array('<a title="Anonymous Data" target="_blank" href="http://support.mailpoet.com/knowledgebase/share-your-data/?utm_source=wpadmin&utm_campaign=welcome_page">', '</a>', '<a id="share_analytics" href="javascript:;">', '</a>'), __("We know too little about our users. We're looking for [link]anonymous data[/link] to build a better plugin. Thanks, you're already sharing!", WYSIJA))
|
166 |
-
);
|
167 |
-
}
|
168 |
-
|
169 |
-
$this->data['sections'][] = array(
|
170 |
-
'title' => __('What You Can Do', WYSIJA),
|
171 |
-
'cols' => array(
|
172 |
-
array(
|
173 |
-
'title' => __('5 minute newbie guide', WYSIJA),
|
174 |
-
'content' => __('Your MailPoet comes with an example newsletter. You\'ll see it when you close this welcome page. Edit it to start playing with it.', WYSIJA)
|
175 |
-
),
|
176 |
-
$share_section,
|
177 |
-
array(
|
178 |
-
'title' => __('Help yourself. Or let us help you.', WYSIJA),
|
179 |
-
'content' => str_replace(
|
180 |
-
array('[link]', '[/link]'), array('<a href="http://support.mailpoet.com/" target="_blank" title="On our blog!">', '</a>'), __('We got documentation and a ticket system on [link]support.mailpoet.com[/link]. We answer within 24h.', WYSIJA))
|
181 |
-
)
|
182 |
-
),
|
183 |
-
'format' => 'three-col',
|
184 |
-
);
|
185 |
-
|
186 |
-
$this->viewObj->skip_header = true;
|
187 |
-
|
188 |
-
return true;
|
189 |
-
}
|
190 |
-
|
191 |
-
/**
|
192 |
-
* Welcome page for updaters
|
193 |
-
* @return boolean
|
194 |
-
*/
|
195 |
-
function whats_new() {
|
196 |
-
|
197 |
-
$this->title = $this->viewObj->title = __('What\'s new?', WYSIJA);
|
198 |
-
$this->jsTrans['instalwjp'] = __('Installing MailPoet Newsletter Premium plugin', WYSIJA);
|
199 |
-
wp_enqueue_style('wysija-admin-css-premium', WYSIJA_URL.'css/admin-premium.css',array(),WYSIJA::get_version());
|
200 |
-
|
201 |
-
$this->viewObj->skip_header = true;
|
202 |
-
return true;
|
203 |
-
}
|
204 |
-
|
205 |
-
|
206 |
-
|
207 |
-
/* START prem check hook */
|
208 |
-
|
209 |
-
// when curl or any php remote function not available mailpoet.com returns lcheck to that function
|
210 |
-
function licok() {
|
211 |
-
parent::WYSIJA_control_back();
|
212 |
-
$dt = get_option('wysijey');
|
213 |
-
|
214 |
-
if (isset($_REQUEST['xtz']) && $dt === $_REQUEST['xtz']) {
|
215 |
-
$dataconf = array('premium_key' => base64_encode(get_option('home') . time()), 'premium_val' => time());
|
216 |
-
$this->notice(__('Premium version is valid for your site.', WYSIJA));
|
217 |
-
} else {
|
218 |
-
$dataconf = array('premium_key' => '', 'premium_val' => '');
|
219 |
-
|
220 |
-
$helper_licence = WYSIJA::get('licence', 'helper');
|
221 |
-
$url_premium = 'http://www.mailpoet.com/checkout/?wysijadomain=' . $dt . '&nc=1&utm_source=wpadmin&utm_campaign=error_licence_activation';
|
222 |
-
|
223 |
-
$this->error(str_replace(array('[link]', '[/link]'), array('<a href="' . $url_premium . '" target="_blank">', '</a>'), __('Premium licence does not exist for your site. Purchase it [link]here[/link].', WYSIJA)), 1);
|
224 |
-
}
|
225 |
-
WYSIJA::update_option('wysicheck', false);
|
226 |
-
$modelConf = WYSIJA::get('config', 'model');
|
227 |
-
$modelConf->save($dataconf);
|
228 |
-
|
229 |
-
$this->redirect('admin.php?page=wysija_config#tab-premium');
|
230 |
-
}
|
231 |
-
|
232 |
-
/* END prem check hook */
|
233 |
-
|
234 |
-
function validateLic() {
|
235 |
-
$helpLic = WYSIJA::get('licence', 'helper');
|
236 |
-
$res = $helpLic->check();
|
237 |
-
|
238 |
-
$this->redirect();
|
239 |
-
}
|
240 |
-
|
241 |
-
/**
|
242 |
-
* this function is triggered when sending manually the emails with the "Don't wait and send right now" button
|
243 |
-
* @param type $dataPost
|
244 |
-
*/
|
245 |
-
function manual_send($dataPost = false) {
|
246 |
-
$modelQ = WYSIJA::get('queue', 'model');
|
247 |
-
$config = WYSIJA::get('config', 'model');
|
248 |
-
if ((int) $config->getValue('total_subscribers') < 2000) {
|
249 |
-
if ($modelQ->count() > 0) {
|
250 |
-
$helperQ = WYSIJA::get('queue', 'helper');
|
251 |
-
$emailid = false;
|
252 |
-
if ($_REQUEST['emailid']) {
|
253 |
-
$emailid = $_REQUEST['emailid'];
|
254 |
-
}
|
255 |
-
$helperQ->process($emailid);
|
256 |
-
} else {
|
257 |
-
echo '<strong style="font-family: Arial; font-weight: bold; font-size: 12px;">' . __('Queue is empty!', WYSIJA) . '</strong>';
|
258 |
-
}
|
259 |
-
exit;
|
260 |
-
} else {
|
261 |
-
//deprecated
|
262 |
-
do_action('wysija_send_test_editor');
|
263 |
-
|
264 |
-
do_action('wysija_manual_send');
|
265 |
-
}
|
266 |
-
|
267 |
-
exit;
|
268 |
-
}
|
269 |
-
|
270 |
-
/**
|
271 |
-
* test the bounce handling maybe this should move somewhere else like config controller
|
272 |
-
* @return boolean
|
273 |
-
*/
|
274 |
-
function test_bounce() {
|
275 |
-
// bounce handling
|
276 |
-
$helper_bounce = WYSIJA::get('bounce', 'helper');
|
277 |
-
|
278 |
-
// in a multisite case we process first the bounce recording into the bounce table
|
279 |
-
if (is_multisite()) {
|
280 |
-
$helper_bounce->record_bounce_ms();
|
281 |
-
|
282 |
-
// then we take actions from what has been returned by the bounce
|
283 |
-
$helper_bounce->process_bounce_ms();
|
284 |
-
} else {
|
285 |
-
$helper_bounce->process_bounce();
|
286 |
-
}
|
287 |
-
exit;
|
288 |
-
}
|
289 |
-
|
290 |
-
function add($dataPost = false) {
|
291 |
-
$this->title = sprintf(__('Step %1$s', WYSIJA), 1);
|
292 |
-
$this->js[] = 'wysija-validator';
|
293 |
-
|
294 |
-
$this->js[] = 'wysija-edit-autonl';
|
295 |
-
$this->js['admin-campaigns-edit'] = 'admin-campaigns-edit';
|
296 |
-
$this->jsTrans['descauto'] = str_replace(array('[newsletter:number]', '[newsletter:total]', '[newsletter:post_title]'), array('<b>[newsletter:number]</b>', '<b>[newsletter:total]</b>', '<b>[newsletter:post_title]</b>'), __('Insert [newsletter:total] to show number of posts, [newsletter:post_title] to show the latest post\'s title & [newsletter:number] to display the issue number.', WYSIJA));
|
297 |
-
$this->jsTrans['descstandard'] = __('The first thing your subscribers see. Be creative and increase your open rate!', WYSIJA);
|
298 |
-
$this->immediateWarning();
|
299 |
-
$this->viewObj->title = __('First step: main details', WYSIJA);
|
300 |
-
$this->viewShow = 'add';
|
301 |
-
$this->data = array();
|
302 |
-
$this->data['campaign'] = array('name' => '', 'description' => '');
|
303 |
-
$modelConfig = WYSIJA::get('config', 'model');
|
304 |
-
$this->data['email'] = array('subject' => '', 'from_email' => $modelConfig->getValue('from_email'), 'from_name' => $modelConfig->getValue('from_name'));
|
305 |
-
$this->data['lists'] = $this->__getLists(false, true, true);
|
306 |
-
|
307 |
-
$this->dataAutoNl();
|
308 |
-
$this->jsLoc['admin-campaigns-edit']['autofields'] = $this->data['autonl']['fields'];
|
309 |
-
}
|
310 |
-
|
311 |
-
/**
|
312 |
-
* get the fields and fields value necessary when dealing with automatic newsletters
|
313 |
-
*/
|
314 |
-
function dataAutoNl() {
|
315 |
-
$dataFrequencyNoImmediate = $dataFrequency = array('daily' => __('once a day at...', WYSIJA),
|
316 |
-
'weekly' => __('weekly on...', WYSIJA),
|
317 |
-
'monthly' => __('monthly on the...', WYSIJA),
|
318 |
-
'monthlyevery' => __('monthly every...', WYSIJA),
|
319 |
-
'immediate' => __('immediately.', WYSIJA));
|
320 |
-
|
321 |
-
unset($dataFrequencyNoImmediate['immediate']);
|
322 |
-
|
323 |
-
$times = array();
|
324 |
-
$time = strtotime('00:00:00');
|
325 |
-
$toolboxH = WYSIJA::get('toolbox', 'helper');
|
326 |
-
$times['00:00:00'] = $toolboxH->localtime($time);
|
327 |
-
|
328 |
-
for ($i = 1; $i < 24; $i++) {
|
329 |
-
$time = strtotime('+ 1hour', $time);
|
330 |
-
$key = date('H:i:s', $time);
|
331 |
-
$times[$key] = $toolboxH->localtime($time);
|
332 |
-
}
|
333 |
-
|
334 |
-
$daysvalues = $toolboxH->getday();
|
335 |
-
|
336 |
-
$numberweeks = $toolboxH->getweeksnumber();
|
337 |
-
$daynumbers = $toolboxH->getdaynumber();
|
338 |
-
|
339 |
-
|
340 |
-
$dataLists = array();
|
341 |
-
|
342 |
-
foreach ($this->data['lists'] as $datal) {
|
343 |
-
if ($datal['is_enabled'])
|
344 |
-
$dataLists[$datal['list_id']] = $datal['name'];
|
345 |
-
}
|
346 |
-
|
347 |
-
// Get all available roles
|
348 |
-
$wptoolsH = WYSIJA::get('wp_tools', 'helper');
|
349 |
-
$roles = $wptoolsH->wp_get_all_roles();
|
350 |
-
$available_roles = array('any' => __('in any WordPress role', WYSIJA));
|
351 |
-
foreach ($roles as $role => $name) {
|
352 |
-
$available_roles[$role] = $name;
|
353 |
-
}
|
354 |
-
|
355 |
-
$this->data['autonl']['fields'] = array(
|
356 |
-
'event' => array(
|
357 |
-
'values' => array(
|
358 |
-
'new-articles' => __('When there\'s new content...', WYSIJA),
|
359 |
-
'subs-2-nl' => __('When someone subscribes to the list...', WYSIJA),
|
360 |
-
'new-user' => __('When a new WordPress user is added to your site...', WYSIJA),
|
361 |
-
),
|
362 |
-
'valueshow' => array(
|
363 |
-
'new-articles' => array('when-article'),
|
364 |
-
'subs-2-nl' => array('subscribetolist', 'numberafter', 'numberofwhat', 'unique_send'),
|
365 |
-
'new-user' => array('roles', 'numberafter', 'numberofwhat', 'unique_send'),
|
366 |
-
),
|
367 |
-
'style' => 'width:300px;'
|
368 |
-
),
|
369 |
-
'when-article' => array(
|
370 |
-
'values' => $dataFrequency,
|
371 |
-
'valueshow' => array(
|
372 |
-
'daily' => array('time'),
|
373 |
-
'weekly' => array('dayname', 'time'),
|
374 |
-
'monthly' => array('daynumber', 'time'),
|
375 |
-
'monthlyevery' => array('dayevery', 'dayname', 'time'),
|
376 |
-
)
|
377 |
-
),
|
378 |
-
'subscribetolist' => array(
|
379 |
-
'values' => $dataLists,
|
380 |
-
'style' => 'width:300px;'
|
381 |
-
),
|
382 |
-
'roles' => array(
|
383 |
-
'values' => $available_roles
|
384 |
-
),
|
385 |
-
'numberafter' => array(
|
386 |
-
'type' => 'input',
|
387 |
-
'style' => 'width:35px;',
|
388 |
-
'class' => 'validate[required,custom[integer],min[1]]',
|
389 |
-
),
|
390 |
-
'numberofwhat' => array(
|
391 |
-
'values' => array(
|
392 |
-
'immediate' => __('immediately.', WYSIJA),
|
393 |
-
'hours' => __('hour(s) after.', WYSIJA),
|
394 |
-
'days' => __('day(s) after.', WYSIJA),
|
395 |
-
'weeks' => __('week(s) after.', WYSIJA)
|
396 |
-
),
|
397 |
-
'valuesunit' => array(
|
398 |
-
'immediate' => __('immediately', WYSIJA),
|
399 |
-
'hours' => __('hour(s)', WYSIJA),
|
400 |
-
'days' => __('day(s)', WYSIJA),
|
401 |
-
'weeks' => __('week(s)', WYSIJA)
|
402 |
-
),
|
403 |
-
),
|
404 |
-
'dayevery' => array(
|
405 |
-
'values' => $numberweeks,
|
406 |
-
),
|
407 |
-
'dayname' => array(
|
408 |
-
'values' => $daysvalues,
|
409 |
-
),
|
410 |
-
'daynumber' => array(
|
411 |
-
'values' => $daynumbers,
|
412 |
-
),
|
413 |
-
'time' => array(
|
414 |
-
'values' => $times,
|
415 |
-
),
|
416 |
-
/* 'unique_send'=>array(
|
417 |
-
'label_before'=>__('Send this email only once.',WYSIJA),
|
418 |
-
'type'=>'checkbox'
|
419 |
-
), */
|
420 |
-
);
|
421 |
-
$helpersEvent = WYSIJA::get('autonews', 'helper');
|
422 |
-
$extraEvents = $helpersEvent->events();
|
423 |
-
|
424 |
-
/* if there are plugin to add autonewsletter event they are adding their customized field over here */
|
425 |
-
if ($extraEvents) {
|
426 |
-
foreach ($extraEvents as $k => $v) {
|
427 |
-
|
428 |
-
$this->data['autonl']['fields']['event']['values'][$k] = $v['title'];
|
429 |
-
foreach ($v['fields'] as $fieldCKEY => $fieldCVAL) {
|
430 |
-
if (isset($this->data['autonl']['fields'][$fieldCKEY]))
|
431 |
-
continue;
|
432 |
-
}
|
433 |
-
$this->data['autonl']['fields']['event']['valueshow'][$k] = array_keys($v['fields']);
|
434 |
-
}
|
435 |
-
}
|
436 |
-
}
|
437 |
-
|
438 |
-
function __getLists($enabled = true, $count = false, $notgetalllistid = false) {
|
439 |
-
$modelList = WYSIJA::get('list', 'model');
|
440 |
-
//get lists which have users and are enabled */
|
441 |
-
if ($enabled)
|
442 |
-
$enabledstrg = ' is_enabled>0 and';
|
443 |
-
else
|
444 |
-
$enabledstrg = '';
|
445 |
-
|
446 |
-
$extrasql = '';
|
447 |
-
if (!$notgetalllistid)
|
448 |
-
$extrasql = 'WHERE list_id in (SELECT distinct(list_id) from [wysija]user_list )';
|
449 |
-
$query = 'SELECT * FROM [wysija]list ' . $extrasql;
|
450 |
-
$listres = $modelList->query('get_res', $query);
|
451 |
-
|
452 |
-
if ($count) {
|
453 |
-
$mConfig = WYSIJA::get('config', 'model');
|
454 |
-
$condit = '>=';
|
455 |
-
if ($mConfig->getValue('confirm_dbleoptin'))
|
456 |
-
$condit = '>';
|
457 |
-
$qry1 = "SELECT count(distinct A.user_id) as nbsub,A.list_id FROM `[wysija]user_list` as A LEFT JOIN `[wysija]user` as B on A.user_id=B.user_id WHERE B.status $condit 0 and A.sub_date>0 and A.unsub_date=0 GROUP BY list_id";
|
458 |
-
|
459 |
-
$total = $modelList->getResults($qry1);
|
460 |
-
|
461 |
-
foreach ($total as $tot) {
|
462 |
-
foreach ($listres as $key => $res) {
|
463 |
-
if ($tot['list_id'] == $res['list_id'])
|
464 |
-
$listres[$key]['count'] = $tot['nbsub'];
|
465 |
-
}
|
466 |
-
}
|
467 |
-
}
|
468 |
-
foreach ($listres as $key => $res) {
|
469 |
-
if (!isset($res['count']))
|
470 |
-
$listres[$key]['count'] = 0;
|
471 |
-
}
|
472 |
-
return $listres;
|
473 |
-
}
|
474 |
-
|
475 |
-
function edit($dataPost = false) {
|
476 |
-
if (!$this->_checkEmailExists($_REQUEST['id']))
|
477 |
-
return;
|
478 |
-
$this->add();
|
479 |
-
|
480 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
481 |
-
|
482 |
-
$this->data['email'] = $modelEmail->getOne(false, array('email_id' => $_REQUEST['id']));
|
483 |
-
|
484 |
-
if ($this->data['email']['status'] > 0) {
|
485 |
-
$this->redirect();
|
486 |
-
}
|
487 |
-
$this->title = sprintf(__('Step %1$s', WYSIJA), 1) . ' | ' . $this->data['email']['subject'];
|
488 |
-
$modelCamp = WYSIJA::get('campaign', 'model');
|
489 |
-
$this->data['campaign'] = $modelCamp->getOne(false, array('campaign_id' => $this->data['email']['campaign_id']));
|
490 |
-
|
491 |
-
$modelCL = WYSIJA::get('campaign_list', 'model');
|
492 |
-
$this->data['campaign_list'] = $modelCL->get(false, array('campaign_id' => $this->data['email']['campaign_id']));
|
493 |
-
}
|
494 |
-
|
495 |
-
function editTemplate() {
|
496 |
-
// make sure the editor content is not cached
|
497 |
-
header('Cache-Control: no-cache, max-age=0, must-revalidate, no-store'); // HTTP/1.1
|
498 |
-
header('Expires: Fri, 9 Mar 1984 00:00:00 GMT');
|
499 |
-
|
500 |
-
if (!$this->_checkEmailExists($_REQUEST['id']))
|
501 |
-
return;
|
502 |
-
$this->viewShow = 'editTemplate';
|
503 |
-
|
504 |
-
wp_enqueue_style('thickbox');
|
505 |
-
|
506 |
-
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
507 |
-
/* WJ editor translations */
|
508 |
-
$this->jsTrans = array_merge($this->jsTrans, $wjEngine->getTranslations(), $wjEngine->getApplicationData());
|
509 |
-
|
510 |
-
$this->jsTrans['savingnl'] = __('Saving newsletter...', WYSIJA);
|
511 |
-
$this->jsTrans['errorsavingnl'] = __('Error Saving newsletter...', WYSIJA);
|
512 |
-
$this->jsTrans['savednl'] = __('Newsletter has been saved.', WYSIJA);
|
513 |
-
$this->jsTrans['previewemail'] = __('Sending preview...', WYSIJA);
|
514 |
-
$this->jsTrans['spamtestresult'] = __('Spam test results', WYSIJA);
|
515 |
-
|
516 |
-
/* WJ editor JS */
|
517 |
-
$this->js[] = 'wysija-editor';
|
518 |
-
$this->js[] = 'wysija-admin-ajax-proto';
|
519 |
-
$this->js[] = 'wysija-admin-ajax';
|
520 |
-
$this->js[] = 'wysija-base-script-64';
|
521 |
-
$this->js[] = 'media-upload';
|
522 |
-
$this->js['admin-campaigns-editDetails'] = 'admin-campaigns-editDetails';
|
523 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
524 |
-
$this->data = array();
|
525 |
-
$this->data['email'] = $modelEmail->getOne(false, array('email_id' => $_REQUEST['id']));
|
526 |
-
|
527 |
-
$this->checkIsEditable();
|
528 |
-
|
529 |
-
$this->viewObj->title = sprintf(__('Second step: "%1$s"', WYSIJA), $this->data['email']['subject']);
|
530 |
-
$this->title = sprintf(__('Step %1$s', WYSIJA), 2) . " | " . $this->data['email']['subject'];
|
531 |
-
|
532 |
-
// check if html source is enabled in the config (this will add the "html source" button in tinymce)
|
533 |
-
$model_config = WYSIJA::get('config', 'model');
|
534 |
-
$this->jsTrans['html_source_enabled'] = (int) $model_config->getValue('html_source');
|
535 |
-
}
|
536 |
-
|
537 |
-
function checkIsEditable() {
|
538 |
-
if (
|
539 |
-
!($this->data['email'] == 2 || isset($this->data['email']['params']['schedule']['isscheduled'])) && $this->data['email']['status'] > 0
|
540 |
-
) {
|
541 |
-
$this->redirect();
|
542 |
-
}
|
543 |
-
}
|
544 |
-
|
545 |
-
function pause() {
|
546 |
-
/* pause the campaign entry */
|
547 |
-
if (isset($_REQUEST['id']) && $_REQUEST['id']) {
|
548 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
549 |
-
$myemail = $modelEmail->getOne(false, array('email_id' => $_REQUEST['id']));
|
550 |
-
$modelEmail->reset();
|
551 |
-
$modelEmail->columns['modified_at']['autoup'] = 1;
|
552 |
-
$modelEmail->update(array('status' => -1), array('email_id' => $_REQUEST['id']));
|
553 |
-
|
554 |
-
if ($myemail['type'] == 2) {
|
555 |
-
return $this->redirect('admin.php?page=wysija_campaigns&id=' . $myemail['email_id'] . '&action=edit');
|
556 |
-
} else {
|
557 |
-
$this->notice(__('Sending is now paused.', WYSIJA));
|
558 |
-
}
|
559 |
-
}
|
560 |
-
|
561 |
-
$this->redirect();
|
562 |
-
}
|
563 |
-
|
564 |
-
function resume() {
|
565 |
-
/* pause the campaign entry */
|
566 |
-
if (isset($_REQUEST['id']) && $_REQUEST['id']) {
|
567 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
568 |
-
$modelEmail->columns['modified_at']['autoup'] = 1;
|
569 |
-
$modelEmail->update(array('status' => 99), array('email_id' => $_REQUEST['id']));
|
570 |
-
$this->notice(__('Sending has resumed.', WYSIJA));
|
571 |
-
}
|
572 |
-
|
573 |
-
$this->redirect();
|
574 |
-
}
|
575 |
-
|
576 |
-
function duplicate() {
|
577 |
-
|
578 |
-
/* 1 - copy the campaign entry */
|
579 |
-
|
580 |
-
$model = WYSIJA::get('campaign', 'model');
|
581 |
-
$query = 'INSERT INTO `[wysija]campaign` (`name`,`description`)
|
582 |
-
SELECT concat("' . stripslashes(__('Copy of ', WYSIJA)) . '",`name`),`description` FROM [wysija]campaign
|
583 |
-
WHERE campaign_id=' . (int) $_REQUEST['id'];
|
584 |
-
$campaignid = $model->query($query);
|
585 |
-
|
586 |
-
/* 2 - copy the email entry */
|
587 |
-
$query = 'INSERT INTO `[wysija]email` (`campaign_id`,`subject`,`body`,`type`,`params`,`wj_data`,`wj_styles`,`from_email`,`from_name`,`replyto_email`,`replyto_name`,`attachments`,`status`,`created_at`,`modified_at`)
|
588 |
-
SELECT ' . $campaignid . ', concat("' . stripslashes(__('Copy of ', WYSIJA)) . '",`subject`),`body`,`type`,`params`,`wj_data`,`wj_styles`,`from_email`,`from_name`,`replyto_email`,`replyto_name`,`attachments`,0,' . time() . ',' . time() . ' FROM [wysija]email
|
589 |
-
WHERE email_id=' . (int) $_REQUEST['email_id'];
|
590 |
-
$emailid = $model->query($query);
|
591 |
-
|
592 |
-
//let's reset the count of total childs for auto newsletter
|
593 |
-
$mEmail = WYSIJA::get('email', 'model');
|
594 |
-
$emailData = $mEmail->getOne(false, array('email_id' => $emailid));
|
595 |
-
|
596 |
-
if ($emailData['type'] == 2) {
|
597 |
-
$paramsReseted = $emailData['params'];
|
598 |
-
if (isset($paramsReseted['autonl']['total_child']))
|
599 |
-
$paramsReseted['autonl']['total_child'] = 0;
|
600 |
-
if (isset($paramsReseted['autonl']['nextSend']))
|
601 |
-
$paramsReseted['autonl']['nextSend'] = 0;
|
602 |
-
if (isset($paramsReseted['autonl']['firstSend']))
|
603 |
-
unset($paramsReseted['autonl']['firstSend']);
|
604 |
-
if (isset($paramsReseted['autonl']['lastSend']))
|
605 |
-
unset($paramsReseted['autonl']['lastSend']);
|
606 |
-
if (isset($paramsReseted['autonl']['articles']['ids']))
|
607 |
-
unset($paramsReseted['autonl']['articles']['ids']);
|
608 |
-
|
609 |
-
|
610 |
-
$mEmail->update(array('params' => $paramsReseted), array('email_id' => $emailid));
|
611 |
-
}
|
612 |
-
|
613 |
-
/* 3 - copy the campaign_list entry */
|
614 |
-
$query = "INSERT INTO `[wysija]campaign_list` (`campaign_id`,`list_id`,`filter`)
|
615 |
-
SELECT $campaignid,`list_id`,`filter` FROM [wysija]campaign_list
|
616 |
-
WHERE campaign_id=" . (int) $_REQUEST['id'];
|
617 |
-
$model->query($query);
|
618 |
-
|
619 |
-
$this->notice(__('The newsletter has been duplicated.', WYSIJA));
|
620 |
-
|
621 |
-
$this->redirect('admin.php?page=wysija_campaigns&id=' . $emailid . '&action=edit');
|
622 |
-
}
|
623 |
-
|
624 |
-
function duplicateEmail() {
|
625 |
-
if (!$this->_checkEmailExists($_REQUEST['id']))
|
626 |
-
return;
|
627 |
-
|
628 |
-
$model = WYSIJA::get('campaign', 'model');
|
629 |
-
/* 2 - copy the email entry */
|
630 |
-
$query = 'INSERT INTO `[wysija]email` (`campaign_id`,`subject`,`body`,`params`,`wj_data`,`wj_styles`,`from_email`,`from_name`,`replyto_email`,`replyto_name`,`attachments`,`status`,`created_at`,`modified_at`)
|
631 |
-
SELECT `campaign_id`, concat("' . stripslashes(__("Copy of ", WYSIJA)) . '",`subject`),`body`,`params`,`wj_data`,`wj_styles`,`from_email`,`from_name`,`replyto_email`,`replyto_name`,`attachments`,0,' . time() . ',' . time() . ' FROM [wysija]email
|
632 |
-
WHERE email_id=' . (int) $_REQUEST['id'];
|
633 |
-
$emailid = $model->query($query);
|
634 |
-
|
635 |
-
$this->notice(__('The newsletter has been duplicated.', WYSIJA));
|
636 |
-
|
637 |
-
$this->redirect('admin.php?page=wysija_campaigns&id=' . $emailid . '&action=edit');
|
638 |
-
}
|
639 |
-
|
640 |
-
function immediateWarning() {
|
641 |
-
$model_config = WYSIJA::get('config', 'model');
|
642 |
-
$is_multisite = is_multisite();
|
643 |
-
|
644 |
-
//$is_multisite=true;//PROD comment that line
|
645 |
-
if ($is_multisite && $model_config->getValue('sending_method') == 'network') {
|
646 |
-
$sending_emails_each = $model_config->getValue('ms_sending_emails_each');
|
647 |
-
$number = $model_config->getValue('ms_sending_emails_number');
|
648 |
-
} else {
|
649 |
-
$sending_emails_each = $model_config->getValue('sending_emails_each');
|
650 |
-
$number = $model_config->getValue('sending_emails_number');
|
651 |
-
}
|
652 |
-
|
653 |
-
$formsHelp = WYSIJA::get('forms', 'helper');
|
654 |
-
|
655 |
-
$timespan = $formsHelp->eachValuesSec[$sending_emails_each];
|
656 |
-
$tb = WYSIJA::get('toolbox', 'helper');
|
657 |
-
|
658 |
-
$this->immediatewarning = str_replace(
|
659 |
-
array('[link]', '[/link]', '[settings]'), array('<a href="#">', '</a>', sprintf(__('%1$s emails every %2$s', WYSIJA), $number, trim($tb->duration_string($timespan, true)))), __('Your sending settings ([settings]) can\'t send that quickly to [number] subscribers. Expect delivery delays. [link]Read more[/link]', WYSIJA));
|
660 |
-
$this->viewObj->immediatewarning = '<span class="warning-msg" id="immediatewarning">' . $this->immediatewarning . '</span>';
|
661 |
-
|
662 |
-
$this->jsTrans['immediatewarning'] = $this->immediatewarning;
|
663 |
-
|
664 |
-
//how many emails can be sent in 12 hours
|
665 |
-
//if the frequency is less than 12hours
|
666 |
-
if ($timespan < 43200) {
|
667 |
-
$ratio = floor(43200 / $timespan);
|
668 |
-
$this->jsTrans['possibleemails'] = $ratio * $number;
|
669 |
-
} else {
|
670 |
-
if ($timespan == 43200) {
|
671 |
-
$this->jsTrans['possibleemails'] = $number;
|
672 |
-
} else {
|
673 |
-
$ratio = floor($timespan / 43200);
|
674 |
-
$this->jsTrans['possibleemails'] = $number / $ratio;
|
675 |
-
}
|
676 |
-
}
|
677 |
-
}
|
678 |
-
|
679 |
-
function editDetails() {
|
680 |
-
if (!$this->_checkEmailExists($_REQUEST['id']))
|
681 |
-
return;
|
682 |
-
$this->viewObj->title = __('Final step: last details', WYSIJA);
|
683 |
-
$this->viewShow = 'editDetails';
|
684 |
-
$this->js[] = 'wysija-validator';
|
685 |
-
$this->jsTrans['previewemail'] = __('Sending preview...', WYSIJA);
|
686 |
-
$this->jsTrans['pickadate'] = __('Pick a date', WYSIJA);
|
687 |
-
$this->jsTrans['saveclose'] = __('Save & close', WYSIJA);
|
688 |
-
$this->jsTrans['sendlater'] = __('Send later', WYSIJA);
|
689 |
-
|
690 |
-
$this->jsTrans['schedule'] = __('Schedule', WYSIJA);
|
691 |
-
|
692 |
-
$this->jsTrans['emailCheck'] = WJ_Utils::get_tip_data();
|
693 |
-
|
694 |
-
|
695 |
-
$this->js[] = 'jquery-ui-datepicker';
|
696 |
-
$this->js[] = 'wysija-tooltip';
|
697 |
-
|
698 |
-
$model_list = WYSIJA::get('list', 'model');
|
699 |
-
$model_list->limitON = false;
|
700 |
-
$this->data = array();
|
701 |
-
$this->data['lists'] = $this->__getLists(false, true, true);
|
702 |
-
|
703 |
-
$model_email = WYSIJA::get('email', 'model');
|
704 |
-
$this->data['email'] = $model_email->getOne(false, array('email_id' => $_REQUEST['id']));
|
705 |
-
|
706 |
-
// The first newsletter, we don't have replyto_email and replyto_name
|
707 |
-
if (empty($this->data['email']['replyto_email']) || empty($this->data['email']['replyto_name'])) {
|
708 |
-
$current_user = wp_get_current_user();
|
709 |
-
$this->data['email']['replyto_email'] = $current_user->data->user_email;
|
710 |
-
$this->data['email']['replyto_name'] = $current_user->data->display_name;
|
711 |
-
}
|
712 |
-
|
713 |
-
|
714 |
-
if ((int) $this->data['email']['type'] == 2) {
|
715 |
-
$this->js['wysija-edit-autonl'] = 'wysija-edit-autonl';
|
716 |
-
$this->jsTrans['autonl'] = true;
|
717 |
-
$this->immediateWarning();
|
718 |
-
$this->jsTrans['send'] = __('Activate now', WYSIJA);
|
719 |
-
} else {
|
720 |
-
$this->jsTrans['autonl'] = true;
|
721 |
-
$this->viewObj->immediatewarning = '';
|
722 |
-
$this->jsTrans['send'] = __('Send', WYSIJA);
|
723 |
-
}
|
724 |
-
|
725 |
-
if ((int) $this->data['email']['type'] == 1) {
|
726 |
-
$this->jsTrans['alertsend'] = __('You are about to send this newsletter. Please confirm.', WYSIJA);
|
727 |
-
} else {
|
728 |
-
if (isset($this->data['email']['params']['autonl']['event']) && $this->data['email']['params']['autonl']['event'] == 'subs-2-nl') {
|
729 |
-
$this->data['autoresponder'] = 1;
|
730 |
-
foreach ($this->data['lists'] as $list) {
|
731 |
-
if ($list['list_id'] == $this->data['email']['params']['autonl']['subscribetolist']) {
|
732 |
-
break;
|
733 |
-
}
|
734 |
-
}
|
735 |
-
|
736 |
-
$this->jsTrans['ignoreprevious'] = sprintf(__('Are you sure you want to ignore the %1$s subscribers of the list %2$s?', WYSIJA), '"' . $list['count'] . '"', '"' . $list['name'] . '"');
|
737 |
-
}
|
738 |
-
}
|
739 |
-
|
740 |
-
$this->checkIsEditable();
|
741 |
-
|
742 |
-
$this->title = sprintf(__('Step %1$s', WYSIJA), 3) . " | " . $this->data['email']['subject'];
|
743 |
-
$this->dataAutoNl();
|
744 |
-
|
745 |
-
$this->jsLoc['wysija-edit-autonl']['autofields'] = $this->data['autonl']['fields'];
|
746 |
-
|
747 |
-
$modelCL = WYSIJA::get('campaign_list', 'model');
|
748 |
-
$this->data['campaign_list'] = $modelCL->get(false, array('campaign_id' => $this->data['email']['campaign_id']));
|
749 |
-
}
|
750 |
-
|
751 |
-
function delete() {
|
752 |
-
$this->requireSecurity();
|
753 |
-
|
754 |
-
$campaign_ids = array();
|
755 |
-
if(isset($_REQUEST['id'])) $campaign_ids[] = $_REQUEST['id'];
|
756 |
-
if(isset($_REQUEST['campaign']['campaign_id'])) $campaign_ids[] = $_REQUEST['campaign']['campaign_id'];
|
757 |
-
if(isset($_REQUEST['wysija']['campaign']['campaign_id'][0])){
|
758 |
-
$campaign_ids = array_merge($campaign_ids, $_REQUEST['wysija']['campaign']['campaign_id']);
|
759 |
-
}
|
760 |
-
|
761 |
-
if (!empty($campaign_ids)) {
|
762 |
-
foreach($campaign_ids as $campaign_id){
|
763 |
-
if($campaign_id > 0){
|
764 |
-
$model_campaign = WYSIJA::get('campaign', 'model');
|
765 |
-
$model_campaign->delete(array('campaign_id' => $campaign_id));
|
766 |
-
|
767 |
-
$model_campaign_list = WYSIJA::get('campaign_list', 'model');
|
768 |
-
$model_campaign_list->delete(array('campaign_id' => $campaign_id));
|
769 |
-
|
770 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
771 |
-
$modelEmail->delete(array('campaign_id' => $campaign_id));
|
772 |
-
}
|
773 |
-
}
|
774 |
-
|
775 |
-
$this->notice(_n(__('Newsletter deleted.', WYSIJA), __('Newsletters deleted.', WYSIJA), count($campaign_ids), WYSIJA));
|
776 |
-
} else {
|
777 |
-
$this->notice(__('Newsletter can\'t be deleted.', WYSIJA));
|
778 |
-
}
|
779 |
-
|
780 |
-
// retrieve saved filter
|
781 |
-
if (!empty($_REQUEST['action']))
|
782 |
-
unset($_REQUEST['action']);
|
783 |
-
if (!empty($_REQUEST['id']))
|
784 |
-
unset($_REQUEST['id']);
|
785 |
-
if (!empty($_REQUEST['_wpnonce']))
|
786 |
-
unset($_REQUEST['_wpnonce']);
|
787 |
-
$redirect = $this->base_url . '?' . http_build_query($_REQUEST);
|
788 |
-
$this->redirect($redirect);
|
789 |
-
}
|
790 |
-
|
791 |
-
/**
|
792 |
-
*
|
793 |
-
* this function is to delete an email that belongs to a campaign
|
794 |
-
* when we have a post notification all emails belong to the same campaign
|
795 |
-
* we don't want to delete an entire campaign when we delete a single email
|
796 |
-
*/
|
797 |
-
function deleteEmail(){
|
798 |
-
$this->requireSecurity();
|
799 |
-
if(!$this->_checkEmailExists($_REQUEST['id'])) return;
|
800 |
-
|
801 |
-
if(isset($_REQUEST['id'])){
|
802 |
-
$modelEmail=WYSIJA::get('email','model');
|
803 |
-
$modelEmail->delete(array('email_id'=>$_REQUEST['id']));
|
804 |
-
$this->notice(__('Newsletter deleted.',WYSIJA));
|
805 |
-
}else{
|
806 |
-
$this->notice(__('Newsletter can\'t be deleted.',WYSIJA));
|
807 |
-
}
|
808 |
-
|
809 |
-
$this->redirect();
|
810 |
-
}
|
811 |
-
|
812 |
-
function savecamp() {
|
813 |
-
$this->redirectAfterSave = false;
|
814 |
-
|
815 |
-
/* update email */
|
816 |
-
$data = array();
|
817 |
-
|
818 |
-
// in case the newsletter already exists
|
819 |
-
if (isset($_REQUEST['id'])) {
|
820 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
821 |
-
$modelEmail->fieldValid = false;
|
822 |
-
$emaildataarr = $modelEmail->getOne(false, array('email_id' => $_REQUEST['id']));
|
823 |
-
|
824 |
-
$model_campaign = WYSIJA::get('campaign', 'model');
|
825 |
-
$model_campaign->update(array('name' => $_POST['wysija']['email']['subject'], 'description' => ''), array('campaign_id' => $emaildataarr['campaign_id']));
|
826 |
-
|
827 |
-
$campaign_id = $emaildataarr['campaign_id'];
|
828 |
-
$email_id = $emaildataarr['email_id'];
|
829 |
-
$dataEmail = array(
|
830 |
-
'campaign_id' => $campaign_id,
|
831 |
-
'subject' => $_POST['wysija']['email']['subject'],
|
832 |
-
'type' => $_POST['wysija']['email']['type']);
|
833 |
-
|
834 |
-
if((int)$dataEmail['type'] === 2) {
|
835 |
-
// set autonl params
|
836 |
-
$dataEmail['params'] = array('autonl' => $_POST['wysija']['email']['params']['autonl']);
|
837 |
-
|
838 |
-
// WTF?
|
839 |
-
if(!isset($newparams['autonl']['unique_send'])) {
|
840 |
-
unset($dataEmail['params']['autonl']['unique_send']);
|
841 |
-
} else {
|
842 |
-
$dataEmail['params']['autonl']['unique_send'] = true;
|
843 |
-
}
|
844 |
-
}
|
845 |
-
|
846 |
-
// check if the newsletter used to be an automatic newsletter (if )
|
847 |
-
if((int)$dataEmail['type'] === 1 && (int)$emaildataarr['type'] === 2) {
|
848 |
-
// make sure we remove any kind of auto-post block
|
849 |
-
$helper_autonews = WYSIJA::get('autonews', 'helper');
|
850 |
-
$updated_email_data = $helper_autonews->remove_autopost_blocks($emaildataarr['wj_data']);
|
851 |
-
if($updated_email_data !== false) {
|
852 |
-
// if the email data has been changed, make sure to update it in the DB
|
853 |
-
$dataEmail['wj_data'] = $updated_email_data;
|
854 |
-
}
|
855 |
-
}
|
856 |
-
|
857 |
-
$modelEmail->columns['modified_at']['autoup'] = 1;
|
858 |
-
$modelEmail->debugupdate = true;
|
859 |
-
$dataEmail['email_id'] = $_REQUEST['id'];
|
860 |
-
|
861 |
-
if(isset($_REQUEST['save-reactivate'])) {
|
862 |
-
//if the button save and reactivate has been clicked then we reactivate and redirect to the newsletter page
|
863 |
-
$dataEmail['status'] = 99;
|
864 |
-
$_REQUEST['return'] = 1;
|
865 |
-
}
|
866 |
-
|
867 |
-
$data['email']['email_id'] = $modelEmail->update($dataEmail, array('email_id' => (int)$_REQUEST['id']));
|
868 |
-
} else {
|
869 |
-
// get default theme
|
870 |
-
$model_config = WYSIJA::get('config', 'model');
|
871 |
-
$default_theme = $model_config->getValue('newsletter_default_theme', 'default');
|
872 |
-
|
873 |
-
$helper_themes = WYSIJA::get('themes', 'helper');
|
874 |
-
$theme_data = $helper_themes->getData($default_theme);
|
875 |
-
|
876 |
-
// get campaign data
|
877 |
-
$model_campaign = WYSIJA::get('campaign', 'model');
|
878 |
-
$campaign_id = $model_campaign->insert(array('name' => $_POST['wysija']['email']['subject'], 'description' => ''));
|
879 |
-
|
880 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
881 |
-
$modelEmail->fieldValid = false;
|
882 |
-
$emaildata = array(
|
883 |
-
'campaign_id' => $campaign_id,
|
884 |
-
'subject' => $_POST['wysija']['email']['subject'],
|
885 |
-
'type' => (int) $_POST['wysija']['email']['type']
|
886 |
-
);
|
887 |
-
|
888 |
-
|
889 |
-
// create autonl parameters if necessary
|
890 |
-
if ((int) $_POST['wysija']['email']['type'] === 2 && isset($_POST['wysija']['email']['params']['autonl'])) {
|
891 |
-
$emaildata['params'] = array('autonl' => $_POST['wysija']['email']['params']['autonl']);
|
892 |
-
}
|
893 |
-
|
894 |
-
// create sample data depending on newsletter's type
|
895 |
-
if ((int) $_POST['wysija']['email']['type'] === 2 && $_POST['wysija']['email']['params']['autonl']['event'] === 'new-articles') {
|
896 |
-
|
897 |
-
// if immediate, post_limit is set to 1
|
898 |
-
if ($emaildata['params']['autonl']['when-article'] === 'immediate') {
|
899 |
-
$autopostParams = array(
|
900 |
-
array('key' => 'category_ids', 'value' => null),
|
901 |
-
array('key' => 'title_tag', 'value' => 'h2'),
|
902 |
-
array('key' => 'title_alignment', 'value' => 'left'),
|
903 |
-
array('key' => 'title_position', 'value' => 'inside'),
|
904 |
-
array('key' => 'image_alignment', 'value' => 'alternate'),
|
905 |
-
array('key' => 'image_width', 'value' => 325),
|
906 |
-
array('key' => 'post_content', 'value' => 'excerpt'),
|
907 |
-
array('key' => 'readmore', 'value' => base64_encode(__('Read more.', WYSIJA))),
|
908 |
-
array('key' => 'show_divider', 'value' => 'yes'),
|
909 |
-
array('key' => 'post_limit', 'value' => 1),
|
910 |
-
array('key' => 'post_type', 'value' => 'post'),
|
911 |
-
array('key' => 'author_show', 'value' => 'no'),
|
912 |
-
array('key' => 'author_label', 'value' => base64_encode(__('Author:', WYSIJA))),
|
913 |
-
array('key' => 'category_show', 'value' => 'no'),
|
914 |
-
array('key' => 'category_label', 'value' => base64_encode(__('Categories:', WYSIJA))),
|
915 |
-
array('key' => 'nopost_message', 'value' => base64_encode(__('Latest content already sent.', WYSIJA))),
|
916 |
-
array('key' => 'bgcolor1', 'value' => null),
|
917 |
-
array('key' => 'bgcolor2', 'value' => null),
|
918 |
-
array('key' => 'sort_by', 'value' => 'newest')
|
919 |
-
);
|
920 |
-
} else {
|
921 |
-
$autopostParams = array(
|
922 |
-
array('key' => 'category_ids', 'value' => null),
|
923 |
-
array('key' => 'title_tag', 'value' => 'h2'),
|
924 |
-
array('key' => 'title_alignment', 'value' => 'left'),
|
925 |
-
array('key' => 'title_position', 'value' => 'inside'),
|
926 |
-
array('key' => 'image_alignment', 'value' => 'alternate'),
|
927 |
-
array('key' => 'image_width', 'value' => 325),
|
928 |
-
array('key' => 'post_content', 'value' => 'excerpt'),
|
929 |
-
array('key' => 'readmore', 'value' => base64_encode(__('Read more.', WYSIJA))),
|
930 |
-
array('key' => 'show_divider', 'value' => 'yes'),
|
931 |
-
array('key' => 'post_limit', 'value' => 2),
|
932 |
-
array('key' => 'post_type', 'value' => 'post'),
|
933 |
-
array('key' => 'author_show', 'value' => 'no'),
|
934 |
-
array('key' => 'author_label', 'value' => base64_encode(__('Author:', WYSIJA))),
|
935 |
-
array('key' => 'category_show', 'value' => 'no'),
|
936 |
-
array('key' => 'category_label', 'value' => base64_encode(__('Categories:', WYSIJA))),
|
937 |
-
array('key' => 'nopost_message', 'value' => base64_encode(__('Latest content already sent.', WYSIJA))),
|
938 |
-
array('key' => 'bgcolor1', 'value' => null),
|
939 |
-
array('key' => 'bgcolor2', 'value' => null),
|
940 |
-
array('key' => 'sort_by', 'value' => 'newest')
|
941 |
-
);
|
942 |
-
}
|
943 |
-
|
944 |
-
// sample data for post notifications
|
945 |
-
$newwjdata = array(
|
946 |
-
'version' => WYSIJA::get_version(),
|
947 |
-
'header' => array(
|
948 |
-
'text' => NULL,
|
949 |
-
'image' => array(
|
950 |
-
'src' => WYSIJA_EDITOR_IMG . 'transparent.png',
|
951 |
-
'width' => 600,
|
952 |
-
'height' => 86,
|
953 |
-
'alignment' => 'center',
|
954 |
-
'static' => true,
|
955 |
-
),
|
956 |
-
'alignment' => 'center',
|
957 |
-
'static' => true,
|
958 |
-
'type' => 'header'
|
959 |
-
),
|
960 |
-
'body' => array(
|
961 |
-
'block-1' => array(
|
962 |
-
'text' => array(
|
963 |
-
'value' => '<h3 class="align-right">' . sprintf(__("The posts below were added with the widget %sAutomatic latest content%s", WYSIJA), '<strong>', '</strong>') . '</h3>'
|
964 |
-
),
|
965 |
-
'image' => array(
|
966 |
-
'src' => WYSIJA_EDITOR_IMG . 'default-newsletter/autonewsletter/arrow-up.png',
|
967 |
-
'width' => 45,
|
968 |
-
'height' => 45,
|
969 |
-
'alignment' => 'right',
|
970 |
-
'static' => false
|
971 |
-
),
|
972 |
-
'alignment' => 'right',
|
973 |
-
'static' => false,
|
974 |
-
'position' => '1',
|
975 |
-
'type' => 'content'
|
976 |
-
),
|
977 |
-
'block-2' => array(
|
978 |
-
'text' => array(
|
979 |
-
'value' => '<h3>' . sprintf(__('%sTo edit%s, mouse over to show edit button below.', WYSIJA), '<strong>', '</strong>') . '</h3>'
|
980 |
-
),
|
981 |
-
'image' => array(
|
982 |
-
'src' => WYSIJA_EDITOR_IMG . 'default-newsletter/autonewsletter/arrow-down.png',
|
983 |
-
'width' => 150,
|
984 |
-
'height' => 53,
|
985 |
-
'alignment' => 'left',
|
986 |
-
'static' => false
|
987 |
-
),
|
988 |
-
'alignment' => 'left',
|
989 |
-
'static' => false,
|
990 |
-
'position' => '2',
|
991 |
-
'type' => 'content'
|
992 |
-
),
|
993 |
-
'block-3' => array(
|
994 |
-
'params' => $autopostParams,
|
995 |
-
'position' => '3',
|
996 |
-
'type' => 'auto-post'
|
997 |
-
)
|
998 |
-
),
|
999 |
-
'footer' => array(
|
1000 |
-
'text' => NULL,
|
1001 |
-
'image' => array(
|
1002 |
-
'src' => WYSIJA_EDITOR_IMG . 'transparent.png',
|
1003 |
-
'width' => 600,
|
1004 |
-
'height' => 86,
|
1005 |
-
'alignment' => 'center',
|
1006 |
-
'static' => true,
|
1007 |
-
),
|
1008 |
-
'alignment' => 'center',
|
1009 |
-
'static' => true,
|
1010 |
-
'type' => 'footer'
|
1011 |
-
)
|
1012 |
-
);
|
1013 |
-
} else {
|
1014 |
-
if(!isset($emaildata['params'])) {
|
1015 |
-
$emaildata['params'] = array();
|
1016 |
-
}
|
1017 |
-
|
1018 |
-
$emaildata['params']['quickselection'] = array(
|
1019 |
-
'wp-301' => array(
|
1020 |
-
'identifier' => 'wp-301',
|
1021 |
-
'width' => 281,
|
1022 |
-
'height' => 190,
|
1023 |
-
'url' => WYSIJA_EDITOR_IMG . 'default-newsletter/newsletter/pigeon.png',
|
1024 |
-
'thumb_url' => WYSIJA_EDITOR_IMG . 'default-newsletter/newsletter/pigeon-150x150.png'
|
1025 |
-
)
|
1026 |
-
);
|
1027 |
-
|
1028 |
-
if($theme_data['divider'] === null) {
|
1029 |
-
// default theme does not exist anymore or there is no divider associated to the theme
|
1030 |
-
// we need to get the default divider in this case
|
1031 |
-
$helper_dividers = WYSIJA::get('dividers', 'helper');
|
1032 |
-
$default_divider = $helper_dividers->getDefault();
|
1033 |
-
} else {
|
1034 |
-
// set default divider
|
1035 |
-
$default_divider = $theme_data['divider'];
|
1036 |
-
}
|
1037 |
-
// set default divider in email parameters
|
1038 |
-
$emaildata['params']['divider'] = $default_divider;
|
1039 |
-
|
1040 |
-
// get bookmarks from iconset 2
|
1041 |
-
$helper_bookmarks = WYSIJA::get('bookmarks', 'helper');
|
1042 |
-
$bookmarks = $helper_bookmarks->getAllByIconset('medium', '02');
|
1043 |
-
|
1044 |
-
// sample data for regular newsletter
|
1045 |
-
$newwjdata = array(
|
1046 |
-
'version' => WYSIJA::get_version(),
|
1047 |
-
'header' => array(
|
1048 |
-
'text' => null,
|
1049 |
-
'image' => array(
|
1050 |
-
// 'src' => WYSIJA_EDITOR_IMG.'default-newsletter/newsletter/header.png',
|
1051 |
-
'src' => WYSIJA_EDITOR_IMG . 'transparent.png',
|
1052 |
-
'width' => 600,
|
1053 |
-
'height' => 86,
|
1054 |
-
'alignment' => 'center',
|
1055 |
-
'static' => true
|
1056 |
-
),
|
1057 |
-
'alignment' => 'center',
|
1058 |
-
'static' => true,
|
1059 |
-
'type' => 'header'
|
1060 |
-
),
|
1061 |
-
'body' => array(
|
1062 |
-
'block-1' => array(
|
1063 |
-
'text' => array(
|
1064 |
-
'value' => '<h2><strong>' . __('Step 1:', WYSIJA) . '</strong> ' . __('hey, click on this text!', WYSIJA) . '</h2>' . '<p>' . __('To edit, simply click on this block of text.', WYSIJA) . '</p>'
|
1065 |
-
),
|
1066 |
-
'image' => null,
|
1067 |
-
'alignment' => 'left',
|
1068 |
-
'static' => false,
|
1069 |
-
'position' => 1,
|
1070 |
-
'type' => 'content'
|
1071 |
-
),
|
1072 |
-
'block-2' => array_merge(array(
|
1073 |
-
'position' => 2,
|
1074 |
-
'type' => 'divider'
|
1075 |
-
),
|
1076 |
-
$default_divider
|
1077 |
-
),
|
1078 |
-
'block-3' => array(
|
1079 |
-
'text' => array(
|
1080 |
-
'value' => '<h2><strong>' . __('Step 2:', WYSIJA) . '</strong> ' . __('play with this image', WYSIJA) . '</h2>'
|
1081 |
-
),
|
1082 |
-
'image' => null,
|
1083 |
-
'alignment' => 'left',
|
1084 |
-
'static' => false,
|
1085 |
-
'position' => 3,
|
1086 |
-
'type' => 'content'
|
1087 |
-
),
|
1088 |
-
'block-4' => array(
|
1089 |
-
'text' => array(
|
1090 |
-
'value' => '<p>' . __('Position your mouse over the image to the left.', WYSIJA) . '</p>'
|
1091 |
-
),
|
1092 |
-
'image' => array(
|
1093 |
-
'src' => WYSIJA_EDITOR_IMG . 'default-newsletter/newsletter/pigeon.png',
|
1094 |
-
'width' => 281,
|
1095 |
-
'height' => 190,
|
1096 |
-
'alignment' => 'left',
|
1097 |
-
'static' => false
|
1098 |
-
),
|
1099 |
-
'alignment' => 'left',
|
1100 |
-
'static' => false,
|
1101 |
-
'position' => 4,
|
1102 |
-
'type' => 'content'
|
1103 |
-
),
|
1104 |
-
'block-5' => array_merge(array(
|
1105 |
-
'position' => 5,
|
1106 |
-
'type' => 'divider'
|
1107 |
-
), $default_divider
|
1108 |
-
),
|
1109 |
-
'block-6' => array(
|
1110 |
-
'text' => array(
|
1111 |
-
'value' => '<h2><strong>' . __('Step 3:', WYSIJA) . '</strong> ' . __('drop content here', WYSIJA) . '</h2>' .
|
1112 |
-
'<p>' . sprintf(__('Drag and drop %1$stext, posts, dividers.%2$s Look on the right!', WYSIJA), '<strong>', '</strong>') . '</p>' .
|
1113 |
-
'<p>' . sprintf(__('You can even %1$ssocial bookmarks%2$s like these:', WYSIJA), '<strong>', '</strong>') . '</p>'
|
1114 |
-
),
|
1115 |
-
'image' => null,
|
1116 |
-
'alignment' => 'left',
|
1117 |
-
'static' => false,
|
1118 |
-
'position' => 6,
|
1119 |
-
'type' => 'content'
|
1120 |
-
),
|
1121 |
-
'block-7' => array(
|
1122 |
-
'width' => 184,
|
1123 |
-
'alignment' => 'center',
|
1124 |
-
'items' => array(
|
1125 |
-
array_merge(array(
|
1126 |
-
'url' => 'http://www.facebook.com/mailpoetplugin',
|
1127 |
-
'alt' => 'Facebook',
|
1128 |
-
'cellWidth' => 61,
|
1129 |
-
'cellHeight' => 32
|
1130 |
-
), $bookmarks['facebook']),
|
1131 |
-
array_merge(array(
|
1132 |
-
'url' => 'http://www.twitter.com/mail_poet',
|
1133 |
-
'alt' => 'Twitter',
|
1134 |
-
'cellWidth' => 61,
|
1135 |
-
'cellHeight' => 32
|
1136 |
-
), $bookmarks['twitter']),
|
1137 |
-
array_merge(array(
|
1138 |
-
'url' => 'https://plus.google.com/+Mailpoet',
|
1139 |
-
'alt' => 'Google',
|
1140 |
-
'cellWidth' => 61,
|
1141 |
-
'cellHeight' => 32
|
1142 |
-
), $bookmarks['google'])
|
1143 |
-
),
|
1144 |
-
'position' => 7,
|
1145 |
-
'type' => 'gallery'
|
1146 |
-
),
|
1147 |
-
'block-8' => array_merge(array(
|
1148 |
-
'position' => 8,
|
1149 |
-
'type' => 'divider'
|
1150 |
-
), $default_divider
|
1151 |
-
),
|
1152 |
-
'block-9' => array(
|
1153 |
-
'text' => array(
|
1154 |
-
'value' => '<h2><strong>' . __('Step 4:', WYSIJA) . '</strong> ' . __('and the footer?', WYSIJA) . '</h2>' .
|
1155 |
-
'<p>' . sprintf(__('Change the footer\'s content in MailPoet\'s %1$sSettings%2$s page.', WYSIJA), '<strong>', '</strong>') . '</p>'
|
1156 |
-
),
|
1157 |
-
'image' => null,
|
1158 |
-
'alignment' => 'left',
|
1159 |
-
'static' => false,
|
1160 |
-
'position' => 9,
|
1161 |
-
'type' => 'content'
|
1162 |
-
)
|
1163 |
-
),
|
1164 |
-
'footer' => array(
|
1165 |
-
'text' => NULL,
|
1166 |
-
'image' => array(
|
1167 |
-
// 'src' => WYSIJA_EDITOR_IMG.'default-newsletter/newsletter/footer.png',
|
1168 |
-
'src' => WYSIJA_EDITOR_IMG . 'transparent.png',
|
1169 |
-
'width' => 600,
|
1170 |
-
'height' => 86,
|
1171 |
-
'alignment' => 'center',
|
1172 |
-
'static' => true,
|
1173 |
-
),
|
1174 |
-
'alignment' => 'center',
|
1175 |
-
'static' => true,
|
1176 |
-
'type' => 'footer'
|
1177 |
-
)
|
1178 |
-
);
|
1179 |
-
}
|
1180 |
-
|
1181 |
-
// set default styles
|
1182 |
-
$helper_engine = WYSIJA::get('wj_engine', 'helper');
|
1183 |
-
$styles = $helper_engine->getDefaultStyles();
|
1184 |
-
// end - set default styles
|
1185 |
-
|
1186 |
-
// set theme specific data
|
1187 |
-
if($theme_data['header'] !== null) {
|
1188 |
-
$newwjdata['header'] = $theme_data['header'];
|
1189 |
-
}
|
1190 |
-
if($theme_data['footer'] !== null) {
|
1191 |
-
$newwjdata['footer'] = $theme_data['footer'];
|
1192 |
-
}
|
1193 |
-
if($theme_data['divider'] !== null) {
|
1194 |
-
$newwjdata['widgets'] = array('divider' => $theme_data['divider']);
|
1195 |
-
}
|
1196 |
-
// end - set theme specific data
|
1197 |
-
|
1198 |
-
$emaildata['wj_data'] = base64_encode(serialize($newwjdata));
|
1199 |
-
$emaildata['wj_styles'] = base64_encode(serialize($styles));
|
1200 |
-
|
1201 |
-
$email_id = $data['email']['email_id'] = $modelEmail->insert($emaildata);
|
1202 |
-
|
1203 |
-
$this->notice(__('Newsletter successfully created.', WYSIJA));
|
1204 |
-
}
|
1205 |
-
|
1206 |
-
$this->_saveLists($campaign_id, true);
|
1207 |
-
|
1208 |
-
if (isset($_REQUEST['return']))
|
1209 |
-
$this->redirect();
|
1210 |
-
else {
|
1211 |
-
$this->redirect('admin.php?page=wysija_campaigns&action=editTemplate&id=' . $email_id);
|
1212 |
-
}
|
1213 |
-
}
|
1214 |
-
|
1215 |
-
function saveemail() {
|
1216 |
-
$this->redirectAfterSave = false;
|
1217 |
-
//$this->requireSecurity();
|
1218 |
-
$modelEmail = WYSIJA::get("email", "model");
|
1219 |
-
$modelEmail->fieldValid = false;
|
1220 |
-
$emaildataarr = $modelEmail->getOne(array('email_id' => $_REQUEST['id']));
|
1221 |
-
|
1222 |
-
if (isset($_REQUEST['save-reactivate'])) {
|
1223 |
-
//if the button save and reactivate has been clicked then we reactivate and redirect to the newsletter page
|
1224 |
-
$dataEmail['status'] = 99;
|
1225 |
-
$_REQUEST['return'] = 1;
|
1226 |
-
}
|
1227 |
-
|
1228 |
-
if (isset($_REQUEST['return']))
|
1229 |
-
$this->redirect();
|
1230 |
-
else {
|
1231 |
-
$this->redirect('admin.php?page=wysija_campaigns&action=editDetails&id=' . $emaildataarr['email_id']);
|
1232 |
-
}
|
1233 |
-
}
|
1234 |
-
|
1235 |
-
function savelast() {
|
1236 |
-
$this->redirectAfterSave = false;
|
1237 |
-
$post_notification = false;
|
1238 |
-
$this->requireSecurity();
|
1239 |
-
|
1240 |
-
if (!isset($_POST['wysija']['email']['from_name']) || !isset($_POST['wysija']['email']['from_email']) || !isset($_POST['wysija']['email']['replyto_name']) || !isset($_POST['wysija']['email']['replyto_email'])) {
|
1241 |
-
$this->error(__('Information is missing.', WYSIJA));
|
1242 |
-
return $this->editDetails();
|
1243 |
-
}
|
1244 |
-
if (isset($_REQUEST['wysija']['email']['params']['googletrackingcode']) && $_REQUEST['wysija']['email']['params']['googletrackingcode'] &&
|
1245 |
-
(!is_string($_REQUEST['wysija']['email']['params']['googletrackingcode']) OR
|
1246 |
-
preg_match('#[^a-z0-9_\-\s]#i', $_REQUEST['wysija']['email']['params']['googletrackingcode']) !== 0 )) {
|
1247 |
-
//force to simple text
|
1248 |
-
$_REQUEST['wysija']['email']['params']['googletrackingcode'] = preg_replace('#[^a-z0-9_\-\s]#i', '_', $_REQUEST['wysija']['email']['params']['googletrackingcode']);
|
1249 |
-
$this->error(__('Your Google Campaign can only contain latin characters, numbers, spaces and hyphens!', WYSIJA), 1);
|
1250 |
-
return $this->editDetails();
|
1251 |
-
}
|
1252 |
-
|
1253 |
-
$update_email = array(
|
1254 |
-
'email_id' => $_POST['wysija']['email']['email_id'],
|
1255 |
-
'from_name' => $_POST['wysija']['email']['from_name'],
|
1256 |
-
'from_email' => $_POST['wysija']['email']['from_email'],
|
1257 |
-
'replyto_name' => $_POST['wysija']['email']['replyto_name'],
|
1258 |
-
'replyto_email' => $_POST['wysija']['email']['replyto_email'],
|
1259 |
-
'subject' => $_POST['wysija']['email']['subject'],
|
1260 |
-
);
|
1261 |
-
$model_email = WYSIJA::get('email', 'model');
|
1262 |
-
if (isset($_POST['wysija']['email']['params']))
|
1263 |
-
$update_email['params'] = $_POST['wysija']['email']['params'];
|
1264 |
-
|
1265 |
-
//insert into campaigns lists
|
1266 |
-
$this->_saveLists($_POST['wysija']['campaign']['campaign_id']);
|
1267 |
-
$email_data = $model_email->getOne($_POST['wysija']['email']['email_id']);
|
1268 |
-
|
1269 |
-
// if we just save the draf we don't go through the big sending process setup
|
1270 |
-
if (isset($_POST['submit-draft']) || isset($_POST['submit-pause']) || (isset($_REQUEST['wj_redir']) && $_REQUEST['wj_redir'] == 'savelastback')) {
|
1271 |
-
if (isset($_POST['wysija']['email']['params']['schedule']['isscheduled']))
|
1272 |
-
$this->notice(__('Newsletter has been scheduled.', WYSIJA));
|
1273 |
-
else
|
1274 |
-
$this->notice(__('Newsletter has been saved as a draft.', WYSIJA));
|
1275 |
-
}else {
|
1276 |
-
// we update the param attribute with what's has been posted
|
1277 |
-
foreach ($update_email as $ki => $vi) {
|
1278 |
-
if ($ki == 'params') {
|
1279 |
-
foreach ($vi as $parake => $paraval) {
|
1280 |
-
$email_data['params'][$parake] = $paraval;
|
1281 |
-
}
|
1282 |
-
$update_email[$ki] = $email_data[$ki];
|
1283 |
-
}
|
1284 |
-
else
|
1285 |
-
$email_data[$ki] = $vi;
|
1286 |
-
}
|
1287 |
-
|
1288 |
-
// if the checkbox to ignore retroactivity is here we just tell the class
|
1289 |
-
if (isset($_POST['wysija']['email']['ignore_subscribers'])) {
|
1290 |
-
$model_email->retro_active_autoresponders = false;
|
1291 |
-
}
|
1292 |
-
|
1293 |
-
// activate or send the email depending on the typ
|
1294 |
-
$model_email->send_activate($email_data);
|
1295 |
-
}
|
1296 |
-
|
1297 |
-
// update email
|
1298 |
-
$update_email['type'] = $email_data['type'];
|
1299 |
-
|
1300 |
-
if ($post_notification) {
|
1301 |
-
$helper_autonews = WYSIJA::get('autonews', 'helper');
|
1302 |
-
$update_email['params']['autonl']['nextSend'] = $helper_autonews->getNextSend($update_email);
|
1303 |
-
}
|
1304 |
-
|
1305 |
-
$model_email->reset();
|
1306 |
-
$model_email->columns['modified_at']['autoup'] = 1;
|
1307 |
-
|
1308 |
-
// update some fields of the email
|
1309 |
-
$model_email->update($update_email);
|
1310 |
-
|
1311 |
-
// update the campaign subject which ispretty much useless but good to keep in sync with the email
|
1312 |
-
$model_campaign = WYSIJA::get('campaign', 'model');
|
1313 |
-
$model_campaign->reset();
|
1314 |
-
$update_campaign = array('campaign_id' => $_REQUEST['id'], 'name' => $_POST['wysija']['email']['subject']);
|
1315 |
-
$model_campaign->update($update_campaign);
|
1316 |
-
|
1317 |
-
if (isset($_REQUEST['wj_redir']) && $_REQUEST['wj_redir'] == 'savelastback') {
|
1318 |
-
return $this->redirect('admin.php?page=wysija_campaigns&action=editTemplate&id=' . $_POST['wysija']['email']['email_id']);
|
1319 |
-
}
|
1320 |
-
else
|
1321 |
-
return $this->redirect();
|
1322 |
-
}
|
1323 |
-
|
1324 |
-
function _saveLists($campaignId, $flagup = false) {
|
1325 |
-
//record the list that we have in that campaign
|
1326 |
-
$modelCampL = WYSIJA::get('campaign_list', 'model');
|
1327 |
-
if ($flagup || (int) $campaignId > 0) {
|
1328 |
-
$modelCampL->delete(array('equal' => array('campaign_id' => $campaignId)));
|
1329 |
-
$modelCampL->reset();
|
1330 |
-
}
|
1331 |
-
|
1332 |
-
if (isset($_POST['wysija']['campaign_list']['list_id'])) {
|
1333 |
-
//$modelCampL=WYSIJA::get("campaign_list","model");
|
1334 |
-
foreach ($_POST['wysija']['campaign_list']['list_id'] as $listid) {
|
1335 |
-
$modelCampL->insert(array('campaign_id' => $campaignId, "list_id" => $listid));
|
1336 |
-
}
|
1337 |
-
}
|
1338 |
-
}
|
1339 |
-
|
1340 |
-
function _addLinkFilter($status, $type = 'status') {
|
1341 |
-
switch ($type) {
|
1342 |
-
case 'status':
|
1343 |
-
switch ($status) {
|
1344 |
-
case 'draft':
|
1345 |
-
$this->filters['equal'] = array('status' => 0);
|
1346 |
-
break;
|
1347 |
-
case 'sending':
|
1348 |
-
$this->filters['equal'] = array('status' => 99);
|
1349 |
-
break;
|
1350 |
-
case 'sent':
|
1351 |
-
$this->filters['equal'] = array('status' => 2);
|
1352 |
-
break;
|
1353 |
-
case 'paused':
|
1354 |
-
$this->filters['equal'] = array('status' => -1);
|
1355 |
-
break;
|
1356 |
-
case 'scheduled':
|
1357 |
-
$this->filters['equal'] = array('status' => 4);
|
1358 |
-
break;
|
1359 |
-
}
|
1360 |
-
break;
|
1361 |
-
case 'type':
|
1362 |
-
switch ($status) {
|
1363 |
-
case 'regular':
|
1364 |
-
$this->filters['equal'] = array('type' => 1);
|
1365 |
-
break;
|
1366 |
-
case 'autonl':
|
1367 |
-
$this->filters['equal'] = array('type' => 2);
|
1368 |
-
break;
|
1369 |
-
}
|
1370 |
-
break;
|
1371 |
-
}
|
1372 |
-
}
|
1373 |
-
|
1374 |
-
/**
|
1375 |
-
* Get all campaigns, based on the filters
|
1376 |
-
*/
|
1377 |
-
protected function get_campaigns() {
|
1378 |
-
$order_by = ' ORDER BY ';
|
1379 |
-
|
1380 |
-
if (isset($_REQUEST['orderby'])) {
|
1381 |
-
if (!is_string($_REQUEST['orderby']) OR preg_match('|[^a-z0-9#_.-]|i', $_REQUEST['orderby']) !== 0) {
|
1382 |
-
$_REQUEST['orderby'] = '';
|
1383 |
-
}
|
1384 |
-
if (!in_array(strtoupper($_REQUEST['ordert']), array('DESC', 'ASC')))
|
1385 |
-
$_REQUEST['ordert'] = 'DESC';
|
1386 |
-
$order_by.=$_REQUEST['orderby'] . ' ' . $_REQUEST['ordert'];
|
1387 |
-
}else {
|
1388 |
-
$order_by.='FIELD(B.status, 99,3,1,0,2), ';
|
1389 |
-
$order_by.='B.status desc, ';
|
1390 |
-
$order_by.='B.modified_at desc, ';
|
1391 |
-
$order_by.='B.sent_at desc, ';
|
1392 |
-
$order_by.='B.type desc, ';
|
1393 |
-
$order_by.='A.' . $this->modelObj->getPk() . ' DESC';
|
1394 |
-
}
|
1395 |
-
|
1396 |
-
$query = '
|
1397 |
-
SELECT
|
1398 |
-
A.`campaign_id`,
|
1399 |
-
A.`name` as `campaign_name`,
|
1400 |
-
B.`subject` as `name`,
|
1401 |
-
A.`description`,
|
1402 |
-
B.`params`,
|
1403 |
-
B.`type`,
|
1404 |
-
B.`number_sent`,
|
1405 |
-
B.`number_opened`,
|
1406 |
-
B.`number_clicked`,
|
1407 |
-
B.`number_unsub`,
|
1408 |
-
(B.`number_sent` +
|
1409 |
-
B.`number_opened` +
|
1410 |
-
B.`number_clicked` +
|
1411 |
-
B.`number_unsub` +
|
1412 |
-
B.`number_bounce` +
|
1413 |
-
B.`number_forward`
|
1414 |
-
) AS `number_total`,
|
1415 |
-
B.`status`,
|
1416 |
-
B.`created_at`,
|
1417 |
-
B.`modified_at`,
|
1418 |
-
B.`sent_at`,
|
1419 |
-
B.`email_id`
|
1420 |
-
FROM
|
1421 |
-
`[wysija]' . $this->modelObj->table_name . '` AS A
|
1422 |
-
LEFT JOIN
|
1423 |
-
`[wysija]email` AS B on A.`campaign_id` = B.`campaign_id`
|
1424 |
-
LEFT JOIN
|
1425 |
-
`[wysija]campaign_list` AS C on A.`campaign_id` = C.`campaign_id`';
|
1426 |
-
$campaigns = $this->modelObj->getResults($query . $this->modelObj->makeWhere() . ' GROUP BY B.email_id' . $order_by . $this->modelObj->setLimit());
|
1427 |
-
|
1428 |
-
// calculate percetange of open / click / unsubscribe
|
1429 |
-
$helper_numbers = WYSIJA::get('numbers', 'helper');
|
1430 |
-
foreach ($campaigns as &$campaign) {
|
1431 |
-
// open rate, based on sent number
|
1432 |
-
$campaign['rate_opened'] = $helper_numbers->calculate_percetage($campaign['number_opened'], $campaign['number_total'], 1);
|
1433 |
-
// click rate, based on opened number
|
1434 |
-
$campaign['rate_clicked'] = $helper_numbers->calculate_percetage($campaign['number_clicked'], $campaign['number_total'], 1);
|
1435 |
-
// unsubscribe rate, based on opened number
|
1436 |
-
$campaign['rate_unsub'] = $helper_numbers->calculate_percetage($campaign['number_unsub'], $campaign['number_total'], 1);
|
1437 |
-
}
|
1438 |
-
return $campaigns;
|
1439 |
-
}
|
1440 |
-
|
1441 |
-
/**
|
1442 |
-
* Get the first campaign in history
|
1443 |
-
*/
|
1444 |
-
protected function get_oldest_compaign() {
|
1445 |
-
$query = '
|
1446 |
-
SELECT
|
1447 |
-
MIN(B.created_at) as datemin
|
1448 |
-
FROM `[wysija]' . $this->modelObj->table_name . '` as A
|
1449 |
-
LEFT JOIN
|
1450 |
-
`[wysija]email` AS B on A.campaign_id = B.campaign_id
|
1451 |
-
LEFT JOIN
|
1452 |
-
`[wysija]campaign_list` as C on A.campaign_id = C.campaign_id';
|
1453 |
-
|
1454 |
-
return $this->modelObj->query('get_row', $query . $this->modelObj->makeWhere());
|
1455 |
-
}
|
1456 |
-
|
1457 |
-
/**
|
1458 |
-
* Count ALL emails of each email-status
|
1459 |
-
* @todo: move to model
|
1460 |
-
*/
|
1461 |
-
protected function count_emails_by_status() {
|
1462 |
-
$query = '
|
1463 |
-
SELECT
|
1464 |
-
COUNT(`email_id`) AS `campaigns`,
|
1465 |
-
`status`
|
1466 |
-
FROM
|
1467 |
-
`[wysija]email`
|
1468 |
-
WHERE
|
1469 |
-
`campaign_id` > 0
|
1470 |
-
GROUP BY `status`';
|
1471 |
-
|
1472 |
-
$countss = $this->modelObj->query('get_res', $query);
|
1473 |
-
$counts = array();
|
1474 |
-
$total = 0;
|
1475 |
-
|
1476 |
-
foreach ($countss as $count) {
|
1477 |
-
switch ($count['status']) {
|
1478 |
-
case '0':
|
1479 |
-
$type = 'draft';
|
1480 |
-
break;
|
1481 |
-
case '1':
|
1482 |
-
case '3':
|
1483 |
-
case '99':
|
1484 |
-
$type = 'sending';
|
1485 |
-
break;
|
1486 |
-
case '2':
|
1487 |
-
$type = 'sent';
|
1488 |
-
break;
|
1489 |
-
case '-1':
|
1490 |
-
$type = 'paused';
|
1491 |
-
break;
|
1492 |
-
case '4':
|
1493 |
-
$type = 'scheduled';
|
1494 |
-
break;
|
1495 |
-
}
|
1496 |
-
$total = $total + $count['campaigns'];
|
1497 |
-
$counts['status-' . $type] = $count['campaigns'];
|
1498 |
-
}
|
1499 |
-
return $counts;
|
1500 |
-
}
|
1501 |
-
|
1502 |
-
/**
|
1503 |
-
* Count emails which matched the filters
|
1504 |
-
*/
|
1505 |
-
protected function count_emails() {
|
1506 |
-
$query = '
|
1507 |
-
SELECT
|
1508 |
-
COUNT(DISTINCT B.`email_id`) AS `campaigns`
|
1509 |
-
FROM
|
1510 |
-
`[wysija]' . $this->modelObj->table_name . '` AS A
|
1511 |
-
LEFT JOIN
|
1512 |
-
`[wysija]email` AS B ON A.`campaign_id` = B.`campaign_id`
|
1513 |
-
LEFT JOIN
|
1514 |
-
`[wysija]campaign_list` AS C ON A.`campaign_id` = C.`campaign_id`';
|
1515 |
-
return $this->modelObj->count($query . $this->modelObj->makeWhere(), 'campaigns');
|
1516 |
-
}
|
1517 |
-
|
1518 |
-
/**
|
1519 |
-
* Count ALL emails of each type of email
|
1520 |
-
*/
|
1521 |
-
protected function count_emails_by_type() {
|
1522 |
-
$query = '
|
1523 |
-
SELECT
|
1524 |
-
COUNT(`email_id`) AS `campaigns`,
|
1525 |
-
`type`
|
1526 |
-
FROM
|
1527 |
-
`[wysija]email`
|
1528 |
-
WHERE
|
1529 |
-
`campaign_id` > 0
|
1530 |
-
GROUP BY `type`';
|
1531 |
-
$countss = $this->modelObj->query('get_res', $query, ARRAY_A);
|
1532 |
-
$counts = array();
|
1533 |
-
foreach ($countss as $count) {
|
1534 |
-
switch ($count['type']) {
|
1535 |
-
case '1':
|
1536 |
-
$type = 'regular';
|
1537 |
-
break;
|
1538 |
-
case '2':
|
1539 |
-
$type = 'autonl';
|
1540 |
-
break;
|
1541 |
-
}
|
1542 |
-
$counts['type-' . $type] = $count['campaigns'];
|
1543 |
-
}
|
1544 |
-
return $counts;
|
1545 |
-
}
|
1546 |
-
|
1547 |
-
/**
|
1548 |
-
* Get all existing lists
|
1549 |
-
*/
|
1550 |
-
protected function get_lists() {
|
1551 |
-
$model_list = WYSIJA::get('list', 'model');
|
1552 |
-
$query = '
|
1553 |
-
SELECT
|
1554 |
-
A.`list_id`,
|
1555 |
-
A.`name`,
|
1556 |
-
A.`is_enabled`,
|
1557 |
-
COUNT( B.`campaign_id` ) AS `users`
|
1558 |
-
FROM
|
1559 |
-
`[wysija]' . $model_list->table_name . '` as A
|
1560 |
-
LEFT JOIN
|
1561 |
-
`[wysija]campaign_list` AS B on A.`list_id` = B.`list_id`
|
1562 |
-
GROUP BY A.`list_id`';
|
1563 |
-
$result = $model_list->getResults($query);
|
1564 |
-
$lists = array();
|
1565 |
-
foreach ($result as $list_obj) {
|
1566 |
-
$lists[$list_obj['list_id']] = $list_obj;
|
1567 |
-
}
|
1568 |
-
return $lists;
|
1569 |
-
}
|
1570 |
-
|
1571 |
-
function defaultDisplay() {
|
1572 |
-
$this->data['base_url'] = $this->base_url . '?' . http_build_query($_REQUEST); // saved filter
|
1573 |
-
$this->title = __('Newsletters', WYSIJA);
|
1574 |
-
$this->viewShow = $this->action = 'main';
|
1575 |
-
$this->js[] = 'wysija-admin-list';
|
1576 |
-
$this->jsTrans["selecmiss"] = __('Please select a newsletter.', WYSIJA);
|
1577 |
-
$this->jsTrans['suredelete'] = __('Delete this newsletter for ever?', WYSIJA);
|
1578 |
-
$this->jsTrans['suredelete_bulk'] = __('Delete these newsletters for ever?', WYSIJA);
|
1579 |
-
$this->jsTrans['processqueue'] = __('Sending batch of emails...', WYSIJA);
|
1580 |
-
$this->jsTrans['viewnews'] = __('View newsletter', WYSIJA);
|
1581 |
-
$this->jsTrans['confirmpauseedit'] = __('The newsletter will be deactivated, you will need to reactivate it once you\'re over editing it. Do you want to proceed?', WYSIJA);
|
1582 |
-
|
1583 |
-
|
1584 |
-
//get the filters
|
1585 |
-
if (isset($_REQUEST['search']) && $_REQUEST['search']) {
|
1586 |
-
$this->filters['like'] = array();
|
1587 |
-
foreach ($this->searchable as $field)
|
1588 |
-
$this->filters['like'][$field] = $_REQUEST['search'];
|
1589 |
-
}
|
1590 |
-
|
1591 |
-
if (isset($_REQUEST['filter-list']) && $_REQUEST['filter-list']) {
|
1592 |
-
$this->filters['equal'] = array('C.list_id' => $_REQUEST['filter-list']);
|
1593 |
-
}
|
1594 |
-
|
1595 |
-
if (isset($_REQUEST['filter-date']) && $_REQUEST['filter-date']) {
|
1596 |
-
$this->filters['greater_eq'] = array('created_at' => $_REQUEST['filter-date']);
|
1597 |
-
$this->filters['less_eq'] = array('created_at' => strtotime('+1 month', $_REQUEST['filter-date']));
|
1598 |
-
}
|
1599 |
-
|
1600 |
-
$this->filters['is'] = array('type' => 'IS NOT NULL');
|
1601 |
-
|
1602 |
-
|
1603 |
-
if (isset($_REQUEST['link_filter']) && $_REQUEST['link_filter']) {
|
1604 |
-
$linkfilters = explode('-', $_REQUEST['link_filter']);
|
1605 |
-
|
1606 |
-
if (count($linkfilters) > 1) {
|
1607 |
-
$this->_addLinkFilter($linkfilters[1], $linkfilters[0]);
|
1608 |
-
} else {
|
1609 |
-
$this->_addLinkFilter($_REQUEST['link_filter']);
|
1610 |
-
}
|
1611 |
-
}
|
1612 |
-
|
1613 |
-
$this->modelObj->noCheck = true;
|
1614 |
-
$this->modelObj->reset();
|
1615 |
-
if ($this->filters)
|
1616 |
-
$this->modelObj->setConditions($this->filters);
|
1617 |
-
|
1618 |
-
|
1619 |
-
// Count emails by status and type
|
1620 |
-
$emails_by_status = $this->count_emails_by_status();
|
1621 |
-
$emails_by_type = $this->count_emails_by_type();
|
1622 |
-
$counts = array_merge($emails_by_status, $emails_by_type);
|
1623 |
-
$counts['all'] = array_sum($emails_by_status);
|
1624 |
-
|
1625 |
-
// collect data
|
1626 |
-
$this->data['campaigns'] = $this->get_campaigns();
|
1627 |
-
$this->data['datemin'] = $this->get_oldest_compaign();
|
1628 |
-
$lists = $this->get_lists(); // $lists is in use later within this scope
|
1629 |
-
$this->data['lists'] = $lists;
|
1630 |
-
|
1631 |
-
// for paging
|
1632 |
-
$this->modelObj->countRows = $this->filters ? $this->count_emails () : $counts['all'];
|
1633 |
-
|
1634 |
-
|
1635 |
-
// count queue
|
1636 |
-
$email_ids = array();
|
1637 |
-
foreach ($this->data['campaigns'] as $emailcamp) {
|
1638 |
-
if (in_array($emailcamp['status'], array(1, 3, 99)))
|
1639 |
-
$email_ids[] = $emailcamp['email_id'];
|
1640 |
-
}
|
1641 |
-
$model_queue = WYSIJA::get('queue', 'model');
|
1642 |
-
$model_queue->setConditions(array("email_id" => $email_ids));
|
1643 |
-
$model_queue->groupBy('email_id');
|
1644 |
-
$queue = $model_queue->count();
|
1645 |
-
if ($queue) {
|
1646 |
-
$this->viewObj->queuedemails = $queue;
|
1647 |
-
}
|
1648 |
-
|
1649 |
-
$this->modelObj->reset();
|
1650 |
-
|
1651 |
-
//make a loop from the first created to now and increment an array of months
|
1652 |
-
$now = time();
|
1653 |
-
$this->data['dates'] = array();
|
1654 |
-
|
1655 |
-
if ((int) $this->data['datemin']['datemin'] > 1) {
|
1656 |
-
setlocale(LC_TIME, 'en_US');
|
1657 |
-
$formtlettres = "1 " . date('F', $this->data['datemin']['datemin']) . ' ' . date("Y", $this->data['datemin']['datemin']);
|
1658 |
-
$month_start = strtotime($formtlettres);
|
1659 |
-
|
1660 |
-
if ($month_start > 0) {
|
1661 |
-
for ($i = $month_start; $i < $now; $i = strtotime('+1 month', $i)) {
|
1662 |
-
$this->data['dates'][$i] = date_i18n('F Y', $i); //date('F Y',$i);
|
1663 |
-
}
|
1664 |
-
}
|
1665 |
-
}
|
1666 |
-
|
1667 |
-
|
1668 |
-
|
1669 |
-
$campaign_ids_sent = $campaign_ids = array();
|
1670 |
-
foreach ($this->data['campaigns'] as &$campaign) {
|
1671 |
-
$campaign_ids[] = $campaign['campaign_id'];
|
1672 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
1673 |
-
$modelEmail->getParams($campaign);
|
1674 |
-
if (in_array((int) $campaign['status'], array(-1, 1, 2, 3, 99)))
|
1675 |
-
$campaign_ids_sent[] = $campaign['campaign_id'];
|
1676 |
-
}
|
1677 |
-
|
1678 |
-
// 3 - campaign_list request & count request for queue */
|
1679 |
-
if ($campaign_ids) {
|
1680 |
-
$modeluList = WYSIJA::get('campaign_list', 'model');
|
1681 |
-
$userlists = $modeluList->get(array('list_id', 'campaign_id'), array('campaign_id' => $campaign_ids));
|
1682 |
-
|
1683 |
-
if ($campaign_ids_sent) {
|
1684 |
-
$modeluList = WYSIJA::get("email_user_stat", "model");
|
1685 |
-
$statstotal = $modeluList->getResults("SELECT COUNT(A.user_id) as count,B.email_id FROM `[wysija]queue` as A
|
1686 |
-
JOIN `[wysija]email` as B on A.email_id=B.email_id
|
1687 |
-
WHERE B.campaign_id IN (" . implode(",", $campaign_ids_sent) . ") group by B.email_id");
|
1688 |
-
|
1689 |
-
$senttotalgroupedby = $modeluList->getResults("SELECT COUNT(A.user_id) as count,B.campaign_id,B.email_id,B.type,B.status,A.status as statususer FROM `[wysija]" . $modeluList->table_name . "` as A
|
1690 |
-
JOIN `[wysija]email` as B on A.email_id=B.email_id
|
1691 |
-
WHERE B.campaign_id IN (" . implode(",", $campaign_ids_sent) . ") group by A.status,B.email_id"); //,A.status
|
1692 |
-
|
1693 |
-
|
1694 |
-
$updateEmail = array();
|
1695 |
-
$columnnamestatus = array(0 => "number_sent", 1 => "number_opened", 2 => "number_clicked", 3 => "number_unsub", -1 => "number_bounce");
|
1696 |
-
foreach ($senttotalgroupedby as $sentbystatus) {
|
1697 |
-
if ($sentbystatus['statususer'] != "-2")
|
1698 |
-
$updateEmail[$sentbystatus['email_id']][$columnnamestatus[$sentbystatus['statususer']]] = $sentbystatus['count'];
|
1699 |
-
if (isset($senttotal[$sentbystatus['email_id']])) {
|
1700 |
-
$senttotal[$sentbystatus['email_id']]['count'] = (int) $senttotal[$sentbystatus['email_id']]['count'] + (int) $sentbystatus['count'];
|
1701 |
-
} else {
|
1702 |
-
unset($sentbystatus['statususer']);
|
1703 |
-
$senttotal[$sentbystatus['email_id']] = $sentbystatus;
|
1704 |
-
}
|
1705 |
-
}
|
1706 |
-
|
1707 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
1708 |
-
|
1709 |
-
foreach ($updateEmail as $emailid => $update) {
|
1710 |
-
|
1711 |
-
foreach ($columnnamestatus as $v) {
|
1712 |
-
if (!isset($update[$v]))
|
1713 |
-
$update[$v] = 0;
|
1714 |
-
}
|
1715 |
-
|
1716 |
-
$modelEmail->update($update, array('email_id' => $emailid));
|
1717 |
-
$modelEmail->reset();
|
1718 |
-
}
|
1719 |
-
|
1720 |
-
|
1721 |
-
/**/
|
1722 |
-
$modelC = WYSIJA::get('config', 'model');
|
1723 |
-
$running = false;
|
1724 |
-
|
1725 |
-
$is_multisite = is_multisite();
|
1726 |
-
|
1727 |
-
//$is_multisite=true;//PROD comment that line
|
1728 |
-
if ($is_multisite && $modelC->getValue('sending_method') == 'network') {
|
1729 |
-
$sending_emails_each = $modelC->getValue('ms_sending_emails_each');
|
1730 |
-
} else {
|
1731 |
-
$sending_emails_each = $modelC->getValue('sending_emails_each');
|
1732 |
-
}
|
1733 |
-
|
1734 |
-
if ($modelC->getValue('cron_manual')) {
|
1735 |
-
$formsHelp = WYSIJA::get('forms', 'helper');
|
1736 |
-
$queue_frequency = $formsHelp->eachValuesSec[$sending_emails_each];
|
1737 |
-
$queue_scheduled = WYSIJA::get_cron_schedule('queue');
|
1738 |
-
|
1739 |
-
$next_scheduled_queue = $queue_scheduled['next_schedule'];
|
1740 |
-
$running = $queue_scheduled['running'];
|
1741 |
-
|
1742 |
-
if ($running) {
|
1743 |
-
$helperToolbox = WYSIJA::get('toolbox', 'helper');
|
1744 |
-
$running = time() - $running;
|
1745 |
-
$running = $helperToolbox->duration_string($running, true, 4);
|
1746 |
-
}
|
1747 |
-
} else {
|
1748 |
-
$schedules = wp_get_schedules();
|
1749 |
-
$queue_frequency = $schedules[wp_get_schedule('wysija_cron_queue')]['interval'];
|
1750 |
-
$next_scheduled_queue = wp_next_scheduled('wysija_cron_queue');
|
1751 |
-
}
|
1752 |
-
|
1753 |
-
|
1754 |
-
|
1755 |
-
$status_sent_complete = array();
|
1756 |
-
if (isset($senttotal) && $senttotal) {
|
1757 |
-
foreach ($senttotal as $sentot) {
|
1758 |
-
if ($sentot) {
|
1759 |
-
$this->data['sent'][$sentot['email_id']]['total'] = $sentot['count'];
|
1760 |
-
$this->data['sent'][$sentot['email_id']]['to'] = $sentot['count'];
|
1761 |
-
} else {
|
1762 |
-
$this->data['sent'][$sentot['email_id']]['total'] = $this->data['sent'][$sentot['email_id']]['to'] = 0;
|
1763 |
-
}
|
1764 |
-
$this->data['sent'][$sentot['email_id']]['status'] = $sentot['status'];
|
1765 |
-
$this->data['sent'][$sentot['email_id']]['type'] = $sentot['type'];
|
1766 |
-
$this->data['sent'][$sentot['email_id']]['left'] = (int) $this->data['sent'][$sentot['email_id']]['total'] - (int) $this->data['sent'][$sentot['email_id']]['to'];
|
1767 |
-
}
|
1768 |
-
}
|
1769 |
-
|
1770 |
-
foreach ($statstotal as $sentot) {
|
1771 |
-
if (!isset($this->data['sent'][$sentot['email_id']])) {
|
1772 |
-
$this->data['sent'][$sentot['email_id']]['total'] = 0;
|
1773 |
-
$this->data['sent'][$sentot['email_id']]['to'] = 0;
|
1774 |
-
}
|
1775 |
-
$this->data['sent'][$sentot['email_id']]['total'] = $this->data['sent'][$sentot['email_id']]['total'] + $sentot['count'];
|
1776 |
-
$this->data['sent'][$sentot['email_id']]['left'] = (int) $this->data['sent'][$sentot['email_id']]['total'] - (int) $this->data['sent'][$sentot['email_id']]['to'];
|
1777 |
-
}
|
1778 |
-
|
1779 |
-
//$is_multisite=true;//PROD comment that line
|
1780 |
-
if ($is_multisite && $modelC->getValue('sending_method') == 'network') {
|
1781 |
-
$sending_emails_number = $modelC->getValue('ms_sending_emails_number');
|
1782 |
-
} else {
|
1783 |
-
$sending_emails_number = $modelC->getValue('sending_emails_number');
|
1784 |
-
}
|
1785 |
-
|
1786 |
-
if (isset($this->data['sent'])) {
|
1787 |
-
foreach ($this->data['sent'] as $key => &$camp) {
|
1788 |
-
if ($this->data['sent'][$key]['left'] > 0) {
|
1789 |
-
$cronsneeded = ceil($this->data['sent'][$key]['left'] / $sending_emails_number);
|
1790 |
-
$this->data['sent'][$key]['remaining_time'] = $cronsneeded * $queue_frequency;
|
1791 |
-
$this->data['sent'][$key]['running_for'] = $running;
|
1792 |
-
$this->data['sent'][$key]['next_batch'] = $next_scheduled_queue - time();
|
1793 |
-
$this->data['sent'][$key]['remaining_time'] = $this->data['sent'][$key]['remaining_time'] - ($queue_frequency) + $this->data['sent'][$key]['next_batch'];
|
1794 |
-
} else {
|
1795 |
-
if ((in_array($this->data['sent'][$key]['status'], array(1, 3, 99))) && $this->data['sent'][$key]['type'] == 1)
|
1796 |
-
$status_sent_complete[] = $key;
|
1797 |
-
}
|
1798 |
-
}
|
1799 |
-
}
|
1800 |
-
|
1801 |
-
|
1802 |
-
// status update to sent for the one that are sent
|
1803 |
-
if (count($status_sent_complete) > 0) {
|
1804 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
1805 |
-
$modelEmail->noCheck = true;
|
1806 |
-
$modelEmail->reset();
|
1807 |
-
$modelEmail->update(array('status' => 2), array('equal' => array('email_id' => $status_sent_complete)));
|
1808 |
-
}
|
1809 |
-
}
|
1810 |
-
}
|
1811 |
-
|
1812 |
-
$this->data['counts'] = array_reverse($counts);
|
1813 |
-
|
1814 |
-
/* regrouping all the data in the same array */
|
1815 |
-
foreach ($this->data['campaigns'] as &$campaign) {
|
1816 |
-
/* default key while we don't have the data */
|
1817 |
-
//TODO add data for stats about emails opened clicked etc
|
1818 |
-
$campaign["emails"] = 0;
|
1819 |
-
$campaign["opened"] = 0;
|
1820 |
-
$campaign["clicked"] = 0;
|
1821 |
-
|
1822 |
-
if ($userlists) {
|
1823 |
-
foreach ($userlists as $key => $userlist) {
|
1824 |
-
if ($campaign["campaign_id"] == $userlist["campaign_id"] && isset($lists[$userlist["list_id"]])) {
|
1825 |
-
if (!isset($campaign["lists"]))
|
1826 |
-
$campaign["lists"] = $lists[$userlist["list_id"]]["name"];
|
1827 |
-
else
|
1828 |
-
$campaign["lists"].=", " . $lists[$userlist["list_id"]]["name"];
|
1829 |
-
}
|
1830 |
-
}
|
1831 |
-
}
|
1832 |
-
if (isset($campaign["lists"]) && !$campaign["lists"])
|
1833 |
-
unset($campaign["lists"]);
|
1834 |
-
|
1835 |
-
if (((isset($campaign['params']['schedule']['isscheduled']) ||
|
1836 |
-
($campaign['type'] == 2 && isset($campaign['params']['autonl']['event']) && in_array($campaign['params']['autonl']['event'], array('new-articles'/* ,'subs-2-nl' */)))
|
1837 |
-
) && $campaign['status'] != 2 && !isset($campaign["lists"])) || ($campaign['type'] == 2 && isset($campaign['params']['autonl']['event']) && in_array($campaign['params']['autonl']['event'], array('subs-2-nl')) && $campaign['status'] != 2 && (!isset($campaign['params']['autonl']['subscribetolist']) || !isset($lists[$campaign['params']['autonl']['subscribetolist']]) ))
|
1838 |
-
) {
|
1839 |
-
$campaign['classRow'] = " listmissing ";
|
1840 |
-
$campaign['msgListEdit'] = '<strong>' . __('The list has been deleted.', WYSIJA) . '</strong>';
|
1841 |
-
$campaign['msgSendSuspended'] = '<strong>' . __('Sending suspended.', WYSIJA) . '</strong>';
|
1842 |
-
}
|
1843 |
-
}
|
1844 |
-
|
1845 |
-
$this->dataAutoNl();
|
1846 |
-
if (!$this->data['campaigns']) {
|
1847 |
-
$this->notice(__('There are no newsletters.', WYSIJA));
|
1848 |
-
}
|
1849 |
-
}
|
1850 |
-
|
1851 |
-
function setviewStatsfilter() {
|
1852 |
-
/* get the filters */
|
1853 |
-
$this->searchable = array("email", "firstname", "lastname");
|
1854 |
-
$this->filters = array();
|
1855 |
-
if (isset($_REQUEST['search']) && $_REQUEST['search']) {
|
1856 |
-
$this->filters["like"] = array();
|
1857 |
-
foreach ($this->searchable as $field)
|
1858 |
-
$this->filters["like"][$field] = $_REQUEST['search'];
|
1859 |
-
}
|
1860 |
-
$this->tableQuery = 'email_user_stat';
|
1861 |
-
$this->statusemail = 'B.status as umstatus';
|
1862 |
-
if (isset($_REQUEST['link_filter']) && $_REQUEST['link_filter']) {
|
1863 |
-
switch ($_REQUEST['link_filter']) {
|
1864 |
-
case 'inqueue':
|
1865 |
-
$this->tableQuery = 'queue';
|
1866 |
-
$this->statusemail = '-2 as umstatus';
|
1867 |
-
break;
|
1868 |
-
case 'sent':
|
1869 |
-
$this->filters['equal'] = array('B.status' => 0);
|
1870 |
-
break;
|
1871 |
-
case 'bounced':
|
1872 |
-
$this->filters['equal'] = array('B.status' => -1);
|
1873 |
-
break;
|
1874 |
-
case 'opened':
|
1875 |
-
$this->filters['equal'] = array('B.status' => 1);
|
1876 |
-
break;
|
1877 |
-
case 'clicked':
|
1878 |
-
$this->filters['equal'] = array('B.status' => 2);
|
1879 |
-
break;
|
1880 |
-
case 'unsubscribe':
|
1881 |
-
$this->filters['equal'] = array('B.status' => 3);
|
1882 |
-
break;
|
1883 |
-
case 'notsent':
|
1884 |
-
$this->filters['equal'] = array('B.status' => -2);
|
1885 |
-
break;
|
1886 |
-
}
|
1887 |
-
}
|
1888 |
-
// filter by url id
|
1889 |
-
if (isset($_REQUEST['url_id']) && (int) $_REQUEST['url_id'] > 0) {
|
1890 |
-
$this->tableQuery = 'email_user_url';
|
1891 |
-
$this->filters['equal'] = array('B.url_id' => (int) $_REQUEST['url_id']);
|
1892 |
-
$this->statusemail = '2 as umstatus'; //by default, when filter by url_id, all subscribers had clicked
|
1893 |
-
}
|
1894 |
-
}
|
1895 |
-
|
1896 |
-
function viewstats() {
|
1897 |
-
$this->js[] = 'wysija-admin-list';
|
1898 |
-
$this->js[] = 'wysija-charts';
|
1899 |
-
$this->viewShow = 'viewstats';
|
1900 |
-
|
1901 |
-
$this->modelObj = WYSIJA::get("email", "model");
|
1902 |
-
$this->modelObj->limitON = false;
|
1903 |
-
|
1904 |
-
$email_object = $this->modelObj->getOne(false, array("email_id" => $_REQUEST['id']));
|
1905 |
-
$this->viewObj->model = $this->modelObj;
|
1906 |
-
$this->viewObj->namecampaign = $email_object['subject'];
|
1907 |
-
$this->viewObj->title = sprintf(__('Stats : %1$s', WYSIJA), $email_object['subject']);
|
1908 |
-
|
1909 |
-
$modelObjCamp = WYSIJA::get("campaign", "model");
|
1910 |
-
$limit_pp = false;
|
1911 |
-
if (isset($modelObjCamp->limit_pp))
|
1912 |
-
$limit_pp = $modelObjCamp->limit_pp;
|
1913 |
-
$modelObjCamp->limitON = false;
|
1914 |
-
$campaign = $modelObjCamp->getOne(false, array("campaign_id" => $email_object['campaign_id']));
|
1915 |
-
|
1916 |
-
|
1917 |
-
$this->setviewStatsfilter();
|
1918 |
-
|
1919 |
-
$this->modelObj->reset();
|
1920 |
-
$this->modelObj->noCheck = true;
|
1921 |
-
|
1922 |
-
/* 0 - counting request */
|
1923 |
-
$queryCmmonStart = 'SELECT count(distinct B.user_id) as users FROM `[wysija]user` as A';
|
1924 |
-
$queryCmmonStart.=' LEFT JOIN `[wysija]' . $this->tableQuery . '` as B on A.user_id=B.user_id';
|
1925 |
-
|
1926 |
-
/* all the counts query */
|
1927 |
-
$query = "SELECT count(user_id) as users, status FROM `[wysija]email_user_stat` as A
|
1928 |
-
WHERE A.email_id=" . $email_object['email_id'] . " GROUP BY status";
|
1929 |
-
$countss = $this->modelObj->query("get_res", $query, ARRAY_A);
|
1930 |
-
|
1931 |
-
/* we also count what is in the queue */
|
1932 |
-
$query = "SELECT count(user_id) as users FROM `[wysija]queue` as A
|
1933 |
-
WHERE A.email_id=" . $email_object['email_id'];
|
1934 |
-
$countss[-2]['status'] = -3;
|
1935 |
-
$countss[-2]['users'] = $this->modelObj->count($query, 'users');
|
1936 |
-
|
1937 |
-
$counts = array();
|
1938 |
-
$truetotal = $total = 0;
|
1939 |
-
|
1940 |
-
foreach ($countss as $count) {
|
1941 |
-
switch ($count['status']) {
|
1942 |
-
case "-3":
|
1943 |
-
$type = 'inqueue';
|
1944 |
-
break;
|
1945 |
-
case "-2":
|
1946 |
-
$type = 'notsent';
|
1947 |
-
break;
|
1948 |
-
case "-1":
|
1949 |
-
$type = 'bounced';
|
1950 |
-
break;
|
1951 |
-
case "0":
|
1952 |
-
$type = 'sent';
|
1953 |
-
break;
|
1954 |
-
case "1":
|
1955 |
-
$type = 'opened';
|
1956 |
-
break;
|
1957 |
-
case "2":
|
1958 |
-
$type = 'clicked';
|
1959 |
-
break;
|
1960 |
-
case "3":
|
1961 |
-
$type = 'unsubscribe';
|
1962 |
-
break;
|
1963 |
-
}
|
1964 |
-
if ($count['status'] != "-2")
|
1965 |
-
$total = $total + $count['users'];
|
1966 |
-
$truetotal = $truetotal + $count['users'];
|
1967 |
-
$counts[$type] = $count['users'];
|
1968 |
-
}
|
1969 |
-
|
1970 |
-
$counts['allsent'] = $total;
|
1971 |
-
$counts['all'] = $truetotal;
|
1972 |
-
|
1973 |
-
$this->modelObj->reset();
|
1974 |
-
$this->filters['equal']["B.email_id"] = $email_object['email_id'];
|
1975 |
-
|
1976 |
-
$this->modelObj->noCheck = true;
|
1977 |
-
if ($this->filters)
|
1978 |
-
$this->modelObj->setConditions($this->filters);
|
1979 |
-
|
1980 |
-
//$this->modelObj->setConditions(array("equal"=>array("B.email_id"=>$emailObj['email_id'])));
|
1981 |
-
|
1982 |
-
/* 1 - subscriber request */
|
1983 |
-
$query = 'SELECT A.user_id, A.firstname, A.lastname,A.status as ustatus,' . $this->statusemail . ' , A.email, B.* FROM `[wysija]user` as A';
|
1984 |
-
$query.=' LEFT JOIN `[wysija]' . $this->tableQuery . '` as B on A.user_id=B.user_id';
|
1985 |
-
$queryFinal = $this->modelObj->makeWhere();
|
1986 |
-
|
1987 |
-
/* without filter we already have the total number of subscribers */
|
1988 |
-
if ($this->filters)
|
1989 |
-
$this->modelObj->countRows = $this->modelObj->count($queryCmmonStart . $queryFinal, 'users');
|
1990 |
-
else
|
1991 |
-
$this->modelObj->countRows = $counts['all'];
|
1992 |
-
|
1993 |
-
$orderby = " ORDER BY ";
|
1994 |
-
/**
|
1995 |
-
* Until now, we have
|
1996 |
-
* - 3 possible values of $this->tableQuery (queue, email_user_url, email_user_stat), set by $this->setviewStatsfilter()
|
1997 |
-
* - 2 possible values of $_REQUEST['orderby']
|
1998 |
-
* => 3x2 = 6 cases
|
1999 |
-
*/
|
2000 |
-
if (isset($_REQUEST['orderby'])) {
|
2001 |
-
switch ($this->tableQuery) {
|
2002 |
-
case 'email_user_url':
|
2003 |
-
case 'email_user_stat':
|
2004 |
-
$orderby .= 'B.' . $_REQUEST['orderby'] . " " . $_REQUEST['ordert'];
|
2005 |
-
break;
|
2006 |
-
|
2007 |
-
case 'queue':
|
2008 |
-
default:
|
2009 |
-
$orderby .= 'A.user_id DESC';
|
2010 |
-
break;
|
2011 |
-
}
|
2012 |
-
} else {
|
2013 |
-
switch ($this->tableQuery) {
|
2014 |
-
case 'email_user_url':
|
2015 |
-
$orderby .= 'B.clicked_at DESC, B.number_clicked DESC'; // by default, sort by last clicked and biggest hit
|
2016 |
-
break;
|
2017 |
-
|
2018 |
-
case 'email_user_stat':
|
2019 |
-
$orderby .= 'B.opened_at DESC, B.status DESC'; // by default, sort by last open and its staus value
|
2020 |
-
break;
|
2021 |
-
|
2022 |
-
case 'queue':
|
2023 |
-
default:
|
2024 |
-
$orderby .= 'A.user_id DESC';
|
2025 |
-
break;
|
2026 |
-
}
|
2027 |
-
}
|
2028 |
-
$this->data['tableQuery'] = $this->tableQuery;
|
2029 |
-
$this->modelObj->limitON = true;
|
2030 |
-
|
2031 |
-
$subscribers = array();
|
2032 |
-
$hook_params = array(
|
2033 |
-
'email_id' => $email_object['email_id'],
|
2034 |
-
'url_id' => isset($_REQUEST['url_id']) && $_REQUEST['url_id'] ? $_REQUEST['url_id'] : false,
|
2035 |
-
'subscribers' => &$subscribers
|
2036 |
-
);
|
2037 |
-
$this->data['subscribers'] = $this->modelObj->getResults($query . $queryFinal . " GROUP BY A.user_id" . $orderby . $this->modelObj->setLimit(0, (int)$limit_pp));
|
2038 |
-
$this->modelObj->reset();
|
2039 |
-
|
2040 |
-
/* make the data object for the listing view */
|
2041 |
-
$modelList = WYSIJA::get("list", "model");
|
2042 |
-
|
2043 |
-
/* 2 - list request */
|
2044 |
-
$query = "SELECT A.list_id, A.name,A.is_enabled, count( B.user_id ) AS users FROM `[wysija]" . $modelList->table_name . "` as A";
|
2045 |
-
$query.=" LEFT JOIN `[wysija]user_list` as B on A.list_id = B.list_id";
|
2046 |
-
$query.=" GROUP BY A.list_id";
|
2047 |
-
$listsDB = $modelList->getResults($query);
|
2048 |
-
|
2049 |
-
$lists = array();
|
2050 |
-
foreach ($listsDB as $listobj) {
|
2051 |
-
$lists[$listobj["list_id"]] = $listobj;
|
2052 |
-
}
|
2053 |
-
|
2054 |
-
$listsDB = null;
|
2055 |
-
|
2056 |
-
$user_ids = array();
|
2057 |
-
foreach ($this->data['subscribers'] as $subscriber) {
|
2058 |
-
$user_ids[] = $subscriber['user_id'];
|
2059 |
-
}
|
2060 |
-
|
2061 |
-
/* 3 - user_list request */
|
2062 |
-
if ($user_ids) {
|
2063 |
-
$modeluList = WYSIJA::get("user_list", "model");
|
2064 |
-
$userlists = $modeluList->get(array("list_id", "user_id"), array("user_id" => $user_ids));
|
2065 |
-
}
|
2066 |
-
|
2067 |
-
|
2068 |
-
$this->data['lists'] = $lists;
|
2069 |
-
$this->data['counts'] = array_reverse($counts);
|
2070 |
-
|
2071 |
-
/* regrouping all the data in the same array */
|
2072 |
-
foreach ($this->data['subscribers'] as $keysus => $subscriber) {
|
2073 |
-
/* default key while we don't have the data */
|
2074 |
-
//TODO add data for stats about emails opened clicked etc
|
2075 |
-
$this->data['subscribers'][$keysus]["emails"] = 0;
|
2076 |
-
$this->data['subscribers'][$keysus]["opened"] = 0;
|
2077 |
-
$this->data['subscribers'][$keysus]["clicked"] = 0;
|
2078 |
-
|
2079 |
-
if ($userlists) {
|
2080 |
-
foreach ($userlists as $key => $userlist) {
|
2081 |
-
if ($subscriber["user_id"] == $userlist["user_id"] && isset($lists[$userlist["list_id"]])) {
|
2082 |
-
if (!isset($this->data['subscribers'][$keysus]["lists"]))
|
2083 |
-
$this->data['subscribers'][$keysus]["lists"] = $lists[$userlist["list_id"]]["name"];
|
2084 |
-
else
|
2085 |
-
$this->data['subscribers'][$keysus]["lists"].=", " . $lists[$userlist["list_id"]]["name"];
|
2086 |
-
}
|
2087 |
-
}
|
2088 |
-
}
|
2089 |
-
}
|
2090 |
-
|
2091 |
-
$this->data['email'] = $email_object;
|
2092 |
-
|
2093 |
-
if (!$this->data['subscribers']) {
|
2094 |
-
$this->notice(__("Your request can't retrieve any subscribers. Change your filters!", WYSIJA));
|
2095 |
-
}
|
2096 |
-
|
2097 |
-
// execute hooks
|
2098 |
-
$hook_params = array(
|
2099 |
-
'email_id' => $_REQUEST['id'],
|
2100 |
-
'email_object' => $email_object,
|
2101 |
-
'url_id' => !empty($_REQUEST['url_id']) ? (int)$_REQUEST['url_id'] : null
|
2102 |
-
);
|
2103 |
-
|
2104 |
-
$this->data['hooks']['hook_newsletter_top'] = apply_filters('hook_newsletter_top', WYSIJA_module::execute_hook('hook_newsletter_top', $hook_params), $hook_params);
|
2105 |
-
$this->data['hooks']['hook_newsletter_bottom'] = apply_filters('hook_newsletter_bottom', WYSIJA_module::execute_hook('hook_newsletter_bottom', $hook_params), $hook_params);
|
2106 |
-
}
|
2107 |
-
|
2108 |
-
function getListSubscriberQry($selectcolumns) {
|
2109 |
-
$this->modelObj = WYSIJA::get("email", "model");
|
2110 |
-
$this->emailObj = $this->modelObj->getOne(false, array('email_id' => $_REQUEST['id']));
|
2111 |
-
|
2112 |
-
/* use the filter if there is */
|
2113 |
-
$this->setviewStatsfilter();
|
2114 |
-
|
2115 |
-
if ($selectcolumns == "B.user_id") {
|
2116 |
-
//unset($this->filters["like"]);
|
2117 |
-
}
|
2118 |
-
|
2119 |
-
$this->filters['equal']["B.email_id"] = $this->emailObj['email_id'];
|
2120 |
-
$this->modelObj->noCheck = true;
|
2121 |
-
if ($this->filters)
|
2122 |
-
$this->modelObj->setConditions($this->filters);
|
2123 |
-
|
2124 |
-
/* select insert all the subscribers from that campaign into user_list */
|
2125 |
-
if ($selectcolumns == "B.user_id") {
|
2126 |
-
$query = "SELECT $selectcolumns FROM `[wysija]" . $this->tableQuery . "` as B";
|
2127 |
-
$query.=$this->modelObj->makeWhere();
|
2128 |
-
} else {
|
2129 |
-
$query = "SELECT $selectcolumns FROM `[wysija]user` as A";
|
2130 |
-
$query.=" LEFT JOIN `[wysija]" . $this->tableQuery . "` as B on A.user_id=B.user_id";
|
2131 |
-
$query.=$this->modelObj->makeWhere();
|
2132 |
-
}
|
2133 |
-
|
2134 |
-
return $query;
|
2135 |
-
}
|
2136 |
-
|
2137 |
-
function createnewlist() {
|
2138 |
-
/* get the email subject */
|
2139 |
-
$emailModel = WYSIJA::get('email', 'model');
|
2140 |
-
$email = $emailModel->getOne(array('subject'), array('email_id' => $_REQUEST['id']));
|
2141 |
-
|
2142 |
-
$this->modelObj->reset();
|
2143 |
-
|
2144 |
-
/* set the name of the new list */
|
2145 |
-
$prefix = "";
|
2146 |
-
if (isset($_REQUEST['link_filter']))
|
2147 |
-
$prefix = ' (' . $this->viewObj->getTransStatusEmail($_REQUEST['link_filter']) . ')';
|
2148 |
-
$listname = sprintf(__('Segment of %1$s', WYSIJA), $email['subject'] . $prefix);
|
2149 |
-
|
2150 |
-
/* insert new list */
|
2151 |
-
$modelL = WYSIJA::get('list', 'model');
|
2152 |
-
$listid = $modelL->insert(array('is_enabled' => 1, 'name' => $listname, 'description' => __('List created based on a newsletter segment.', WYSIJA)));
|
2153 |
-
|
2154 |
-
/* get list of subscribers filtered or not */
|
2155 |
-
$query = $this->getListSubscriberQry($listid . ', A.user_id, ' . time() . ', 0');
|
2156 |
-
|
2157 |
-
$query2 = 'INSERT INTO `[wysija]user_list` (`list_id`,`user_id`,`sub_date`,`unsub_date`) ' . $query;
|
2158 |
|
2159 |
-
|
|
|
|
|
|
|
2160 |
|
2161 |
-
|
2162 |
-
|
2163 |
-
|
2164 |
-
|
2165 |
-
function unsubscribeall() {
|
2166 |
-
// Update user_list, set unsubdate and sub_date
|
2167 |
-
$query = $this->getListSubscriberQry('B.user_id');
|
2168 |
-
$query1 = "
|
2169 |
-
UPDATE `[wysija]user_list`
|
2170 |
-
SET
|
2171 |
-
`unsub_date` = ".time().",
|
2172 |
-
`sub_date` = 0
|
2173 |
-
WHERE
|
2174 |
-
`user_id` IN ($query)
|
2175 |
-
AND `list_id` NOT IN (SELECT `list_id` FROM `[wysija]list` WHERE `is_enabled` < 1)
|
2176 |
-
";
|
2177 |
-
$this->modelObj->query($query1);
|
2178 |
-
|
2179 |
-
// unsubscribe from user where select from email_user_stat
|
2180 |
-
$query2 = "UPDATE `[wysija]user` SET `status`=-1 WHERE `user_id` IN ($query)";
|
2181 |
-
$this->modelObj->query($query2);
|
2182 |
-
|
2183 |
-
$this->notice(__('The segment has been unsubscribed from all the lists.', WYSIJA));
|
2184 |
-
$this->redirect('admin.php?page=wysija_campaigns&action=viewstats&id=' . $_REQUEST['id']);
|
2185 |
-
}
|
2186 |
|
2187 |
-
function sendconfirmation() {
|
2188 |
-
//delete from user_lists where select from email_user_stat
|
2189 |
-
$query = $this->getListSubscriberQry('B.user_id ');
|
2190 |
|
2191 |
-
|
|
|
|
|
|
|
|
|
2192 |
|
2193 |
-
|
2194 |
-
|
2195 |
-
|
2196 |
-
}
|
2197 |
|
2198 |
-
|
2199 |
-
|
2200 |
-
|
2201 |
-
|
|
|
|
|
2202 |
|
2203 |
-
|
2204 |
-
|
2205 |
-
$query = $this->getListSubscriberQry('B.user_id');
|
2206 |
-
$query2 = "DELETE FROM `[wysija]queue` where user_id IN ($query) AND email_id=" . $this->emailObj['email_id'];
|
2207 |
-
$this->modelObj->query($query2);
|
2208 |
|
2209 |
-
|
2210 |
-
|
2211 |
-
|
2212 |
|
2213 |
-
function export() {
|
2214 |
-
/* select from email_user_stat left join user */
|
2215 |
-
$query = $this->getListSubscriberQry('B.user_id');
|
2216 |
-
$result = $this->modelObj->query('get_res', $query);
|
2217 |
-
$user_ids = array();
|
2218 |
-
foreach ($result as $user)
|
2219 |
-
$user_ids[] = $user['user_id'];
|
2220 |
|
2221 |
-
$fileHelp = WYSIJA::get('file', 'helper');
|
2222 |
-
$tempfilename = $fileHelp->temp(implode(',', $user_ids), 'export_userids', '.txt');
|
2223 |
|
2224 |
-
|
2225 |
-
$this->redirect('admin.php?page=wysija_subscribers&action=exportcampaign&camp_id=' . $_REQUEST['id'] . '&file_name=' . base64_encode($tempfilename['path']));
|
2226 |
-
}
|
2227 |
-
|
2228 |
-
function unsubscribelist($data) {
|
2229 |
-
|
2230 |
-
$modelL = WYSIJA::get('list', 'model');
|
2231 |
-
$list = $modelL->getOne(false, array('list_id' => $data['listid']));
|
2232 |
-
if ($list['is_enabled']) {
|
2233 |
-
/* delete from user_lists where select from email_user_stat */
|
2234 |
-
$query = $this->getListSubscriberQry("B.user_id");
|
2235 |
-
$query2 = "DELETE FROM `[wysija]user_list` where user_id IN ($query) and list_id=" . $data['listid'];
|
2236 |
-
$this->modelObj->query($query2);
|
2237 |
-
|
2238 |
-
$this->notice(sprintf(__('The segment has been unsubscribed from the list "%1$s".', WYSIJA), $list['name']));
|
2239 |
-
} else {
|
2240 |
-
$this->notice(sprintf(__('The segment cannot be unsubscribed from an [IMPORT] list.', WYSIJA), $list['name']));
|
2241 |
-
}
|
2242 |
|
2243 |
-
|
2244 |
-
|
2245 |
-
|
2246 |
-
|
2247 |
-
|
2248 |
-
|
2249 |
-
|
2250 |
-
$this->js[] = 'wysija-admin-ajax';
|
2251 |
-
$this->js[] = 'wysija-base-script-64';
|
2252 |
-
$this->js[] = 'wysija-scriptaculous';
|
2253 |
-
$this->js[] = 'wysija-colorpicker';
|
2254 |
-
|
2255 |
-
// translations
|
2256 |
-
$this->jsTrans['show_advanced'] = __('Display and insert options', WYSIJA);
|
2257 |
-
$this->jsTrans['hide_advanced'] = __('Back to selection', WYSIJA);
|
2258 |
-
$this->jsTrans['loading_results'] = __('Loading results...', WYSIJA);
|
2259 |
-
$this->jsTrans['inserting_selection'] = __('Inserting selected articles...', WYSIJA);
|
2260 |
-
$this->jsTrans['post_selected'] = __('selected', WYSIJA);
|
2261 |
-
|
2262 |
-
// default tab in popup (this needs to be removed at some point)
|
2263 |
-
$_GET['tab'] = 'articles';
|
2264 |
-
|
2265 |
-
// get parameters
|
2266 |
-
$params = array(
|
2267 |
-
'category_ids' => null,
|
2268 |
-
'category' => null,
|
2269 |
-
'title_tag' => 'h2',
|
2270 |
-
'title_alignment' => 'left',
|
2271 |
-
'title_position' => 'inside',
|
2272 |
-
'image_alignment' => 'alternate',
|
2273 |
-
'image_width' => 325,
|
2274 |
-
'post_content' => 'excerpt',
|
2275 |
-
'readmore' => __('Read more.', WYSIJA),
|
2276 |
-
'show_divider' => 'yes',
|
2277 |
-
'post_limit' => 5,
|
2278 |
-
'post_type' => 'post',
|
2279 |
-
'author_show' => 'no',
|
2280 |
-
'author_label' => __('Author:', WYSIJA),
|
2281 |
-
'category_show' => 'no',
|
2282 |
-
'category_label' => __('Categories:', WYSIJA),
|
2283 |
-
'nopost_message' => __('Latest content already sent.', WYSIJA),
|
2284 |
-
'bgcolor1' => null,
|
2285 |
-
'bgcolor2' => null,
|
2286 |
-
'sort_by' => 'newest'
|
2287 |
-
);
|
2288 |
-
|
2289 |
-
// check if GET parameters are specified
|
2290 |
-
foreach($params as $key => $value) {
|
2291 |
-
if(array_key_exists($key, $_GET)) {
|
2292 |
-
switch($key) {
|
2293 |
-
case 'autopost_count':
|
2294 |
-
$params[$key] = (int)$_GET[$key];
|
2295 |
-
break;
|
2296 |
-
case 'readmore':
|
2297 |
-
case 'nopost_message':
|
2298 |
-
$params[$key] = base64_decode($_GET[$key]);
|
2299 |
-
break;
|
2300 |
-
default:
|
2301 |
-
$params[$key] = $_GET[$key];
|
2302 |
-
}
|
2303 |
-
}
|
2304 |
-
}
|
2305 |
-
|
2306 |
-
$model_config = WYSIJA::get('config', 'model');
|
2307 |
-
$insert_post_parameters = $model_config->getValue('insert_post_parameters');
|
2308 |
-
$helper_wj_engine = WYSIJA::get('wj_engine', 'helper');
|
2309 |
-
|
2310 |
-
if($insert_post_parameters !== false) {
|
2311 |
-
// there are user params
|
2312 |
-
$params = $helper_wj_engine->decodeParameters(array_merge($params, $insert_post_parameters));
|
2313 |
-
}
|
2314 |
-
|
2315 |
-
// get autopost count
|
2316 |
-
$this->data['autopost_count'] = (array_key_exists('autopost_count', $_GET)) ? (int) $_GET['autopost_count'] : 0;
|
2317 |
-
|
2318 |
-
// get autopost type (single or multiple)
|
2319 |
-
$this->data['autopost_type'] = (array_key_exists('autopost_type', $_GET)) ? $_GET['autopost_type'] : 'multiple';
|
2320 |
-
|
2321 |
-
// if only one group of post can be added, change default alignment to left
|
2322 |
-
if($this->data['autopost_type'] === 'single' && $params['image_alignment'] === 'alternate') {
|
2323 |
-
$params['image_alignment'] = 'left';
|
2324 |
-
}
|
2325 |
|
2326 |
-
|
2327 |
-
|
2328 |
-
|
2329 |
-
|
2330 |
-
$categories[] = array('id' => $category->cat_ID, 'name' => $category->name);
|
2331 |
-
}
|
2332 |
-
$this->data['categories'] = $categories;
|
2333 |
|
2334 |
-
|
2335 |
-
|
2336 |
|
2337 |
-
$this->data['params'] = $params;
|
2338 |
|
2339 |
-
return $this->popupContent();
|
2340 |
-
}
|
2341 |
|
2342 |
-
|
2343 |
-
|
2344 |
-
|
|
|
2345 |
|
2346 |
-
|
2347 |
-
|
2348 |
-
|
2349 |
-
} else {
|
2350 |
-
$filename = "";
|
2351 |
-
}
|
2352 |
|
2353 |
-
|
2354 |
-
|
|
|
2355 |
|
2356 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2357 |
}
|
2358 |
-
|
2359 |
-
|
2360 |
-
$ZipfileResult = trim(file_get_contents($_FILES['my-theme']['tmp_name']));
|
2361 |
-
|
2362 |
-
$themesHelp = WYSIJA::get('themes', 'helper');
|
2363 |
-
$result = $themesHelp->installTheme($_FILES['my-theme']['tmp_name'], true);
|
2364 |
-
$this->redirect('admin.php?page=wysija_campaigns&action=themes&reload=1');
|
2365 |
-
|
2366 |
-
return true;
|
2367 |
}
|
2368 |
|
2369 |
-
|
2370 |
-
$
|
2371 |
-
$
|
2372 |
-
|
2373 |
-
|
2374 |
-
$
|
2375 |
-
|
2376 |
-
|
2377 |
-
$
|
2378 |
-
|
2379 |
-
$
|
2380 |
-
|
2381 |
-
if ($model_config->getValue('premium_key'))
|
2382 |
-
$this->jsTrans['ispremium'] = 1;
|
2383 |
-
else
|
2384 |
-
$this->jsTrans['ispremium'] = 0;
|
2385 |
-
|
2386 |
-
$this->jsTrans['premiumfiles'] = __('Photoshop file available as part of [link]Premium features[/link].', WYSIJA);
|
2387 |
-
|
2388 |
-
$helper_licence = WYSIJA::get('licence', 'helper');
|
2389 |
-
$url_checkout = $helper_licence->get_url_checkout('themes');
|
2390 |
-
$this->jsTrans['premiumfiles'] = str_replace(array('[link]', '[/link]'), array('<a href="' . $url_checkout . '" target="_blank" >', '</a>'), $this->jsTrans['premiumfiles']);
|
2391 |
-
|
2392 |
-
$this->jsTrans['showallthemes'] = __('Show all themes', WYSIJA);
|
2393 |
-
$this->jsTrans['totalvotes'] = __('(%1$s votes)', WYSIJA);
|
2394 |
-
$this->jsTrans['voterecorded'] = __("Your vote has been recorded.", WYSIJA);
|
2395 |
-
$this->jsTrans['votenotrecorded'] = __("Your vote could not be recorded.", WYSIJA);
|
2396 |
-
$this->jsTrans['reinstallwarning'] = __('Watch out! If you reinstall this theme all the files which are in the folder:/wp-content/uploads/wysija/themes/%1$s will be overwritten. Are you sure you want to reinstall?', WYSIJA);
|
2397 |
-
$this->jsTrans['errorconnecting'] = __("We were unable to contact the API, the site may be down. Please try again later.", WYSIJA);
|
2398 |
-
|
2399 |
-
$this->jsTrans['viewallthemes'] = __('View all themes by %1$s', WYSIJA);
|
2400 |
-
$this->jsTrans['downloadpsd'] = __("Download original Photoshop file", WYSIJA);
|
2401 |
-
$this->jsTrans['downloadzip'] = __("Download as .zip", WYSIJA);
|
2402 |
-
$this->jsTrans['viewauthorsite'] = __("View author's website", WYSIJA);
|
2403 |
-
$this->jsTrans['stars'] = __('Average rating: %1$s', WYSIJA);
|
2404 |
-
$this->jsTrans['starsyr'] = __('My rating: %1$s', WYSIJA);
|
2405 |
-
$this->jsTrans['downloads'] = __('Downloads: %1$s', WYSIJA);
|
2406 |
-
$this->jsTrans['tags'] = __('Tags: %1$s', WYSIJA);
|
2407 |
-
$this->jsTrans['lastupdated'] = __('Last updated: %1$s', WYSIJA);
|
2408 |
-
$this->jsTrans['includes'] = __('Includes: %1$s', WYSIJA);
|
2409 |
-
|
2410 |
-
$helper_themes = WYSIJA::get('themes', 'helper');
|
2411 |
-
|
2412 |
-
$this->jsTrans['installedthemes'] = $helper_themes->getInstalled();
|
2413 |
-
|
2414 |
-
$url = admin_url('admin.php');
|
2415 |
-
$helper_toolbox = WYSIJA::get("toolbox", "helper");
|
2416 |
-
$domain_name = $helper_toolbox->_make_domain_name($url);
|
2417 |
-
$this->jsTrans['domainname'] = $domain_name;
|
2418 |
-
|
2419 |
-
$_GET['tab'] = 'themes';
|
2420 |
-
|
2421 |
-
return $this->popupContent();
|
2422 |
}
|
2423 |
|
2424 |
-
|
2425 |
-
$
|
2426 |
-
$this->js[] = 'wysija-admin-ajax';
|
2427 |
-
|
2428 |
-
$_GET['tab'] = 'bookmarks';
|
2429 |
-
|
2430 |
-
$networks = array(
|
2431 |
-
'facebook' => array(
|
2432 |
-
'label' => 'Facebook',
|
2433 |
-
'url' => null,
|
2434 |
-
'placeholder' => 'https://www.facebook.com/mailpoetplugin'
|
2435 |
-
),
|
2436 |
-
'twitter' => array(
|
2437 |
-
'label' => 'Twitter',
|
2438 |
-
'url' => null,
|
2439 |
-
'placeholder' => 'http://www.twitter.com/mail_poet'
|
2440 |
-
),
|
2441 |
-
'google' => array(
|
2442 |
-
'label' => 'Google+',
|
2443 |
-
'url' => null,
|
2444 |
-
'placeholder' => null
|
2445 |
-
),
|
2446 |
-
'linkedin' => array(
|
2447 |
-
'label' => 'LinkedIn',
|
2448 |
-
'url' => null,
|
2449 |
-
'placeholder' => null
|
2450 |
-
)
|
2451 |
-
);
|
2452 |
-
|
2453 |
-
// get networks' url from config
|
2454 |
-
$model_config = WYSIJA::get('config', 'model');
|
2455 |
-
$urls = $model_config->getValue('social_bookmarks');
|
2456 |
-
|
2457 |
-
// set url from config for each network if specified
|
2458 |
-
foreach ($networks as $network => $values) {
|
2459 |
-
if (isset($urls[$network]) and strlen(trim($urls[$network])) > 0) {
|
2460 |
-
$networks[$network]['url'] = $urls[$network];
|
2461 |
-
}
|
2462 |
-
}
|
2463 |
-
|
2464 |
-
$this->data['networks'] = $networks;
|
2465 |
-
$this->data['size'] = 'medium';
|
2466 |
-
$this->data['theme'] = isset($_REQUEST['theme']) ? $_REQUEST['theme'] : 'default';
|
2467 |
|
2468 |
-
|
|
|
|
|
|
|
2469 |
}
|
2470 |
|
2471 |
-
|
2472 |
-
$
|
2473 |
-
|
2474 |
-
$this->js[] = 'wysija-base-script-64';
|
2475 |
-
|
2476 |
-
$_GET['tab'] = 'dividers';
|
2477 |
-
|
2478 |
-
$model_email = WYSIJA::get('email', 'model');
|
2479 |
-
$this->data['email'] = $email = $model_email->getOne(false, array('email_id' => $_REQUEST['emailId']));
|
2480 |
-
|
2481 |
-
// get dividers
|
2482 |
-
$helper_dividers = WYSIJA::get('dividers', 'helper');
|
2483 |
-
$dividers = $helper_dividers->getAll();
|
2484 |
-
|
2485 |
-
// get theme divider if it's not the default theme
|
2486 |
-
if (isset($email['params']['theme'])) {
|
2487 |
-
$helper_themes = WYSIJA::get('themes', 'helper');
|
2488 |
-
$themeDivider = $helper_themes->getDivider($email['params']['theme']);
|
2489 |
-
if ($themeDivider !== NULL) {
|
2490 |
-
array_unshift($dividers, $themeDivider);
|
2491 |
-
}
|
2492 |
-
}
|
2493 |
-
|
2494 |
-
// get selected divider
|
2495 |
-
if (isset($email['params']['divider'])) {
|
2496 |
-
$selected_divider = $email['params']['divider'];
|
2497 |
-
} else {
|
2498 |
-
$helper_dividers = WYSIJA::get('dividers', 'helper');
|
2499 |
-
$selected_divider = $helper_dividers->getDefault();
|
2500 |
-
}
|
2501 |
-
|
2502 |
-
// set selected divider in first position
|
2503 |
-
array_unshift($dividers, $selected_divider);
|
2504 |
-
|
2505 |
-
// remove selected divider if present in the list
|
2506 |
-
for ($i = 1; $i < count($dividers); $i++) {
|
2507 |
-
if ($dividers[$i]['src'] === $selected_divider['src']) {
|
2508 |
-
unset($dividers[$i]);
|
2509 |
-
break;
|
2510 |
-
}
|
2511 |
-
}
|
2512 |
-
|
2513 |
-
$this->data['selected'] = $selected_divider;
|
2514 |
-
$this->data['dividers'] = $dividers;
|
2515 |
-
return $this->popupContent();
|
2516 |
}
|
2517 |
|
2518 |
-
function autopost() {
|
2519 |
-
$this->iframeTabs = array('autopost' => __("Add / Edit group of posts", WYSIJA));
|
2520 |
-
$this->js[] = 'wysija-admin-ajax';
|
2521 |
-
$this->js[] = 'wysija-base64';
|
2522 |
-
$this->js[] = 'wysija-scriptaculous';
|
2523 |
-
$this->js[] = 'wysija-colorpicker';
|
2524 |
-
$this->js[] = 'mailpoet-select2';
|
2525 |
-
|
2526 |
-
// translations
|
2527 |
-
$this->jsTrans['show_advanced'] = __('Show display options', WYSIJA);
|
2528 |
-
$this->jsTrans['hide_advanced'] = __('Hide display options', WYSIJA);
|
2529 |
-
|
2530 |
-
$_GET['tab'] = 'autopost';
|
2531 |
-
|
2532 |
-
// get parameters
|
2533 |
-
$params = array(
|
2534 |
-
'category_ids' => null,
|
2535 |
-
'category_condition' => 'include',
|
2536 |
-
'title_tag' => 'h2',
|
2537 |
-
'title_alignment' => 'left',
|
2538 |
-
'title_position' => 'inside',
|
2539 |
-
'image_alignment' => 'alternate',
|
2540 |
-
'image_width' => 325,
|
2541 |
-
'post_content' => 'excerpt',
|
2542 |
-
'readmore' => __('Read more.', WYSIJA),
|
2543 |
-
'show_divider' => 'yes',
|
2544 |
-
'post_limit' => 5,
|
2545 |
-
'post_type' => 'post',
|
2546 |
-
'author_show' => 'no',
|
2547 |
-
'author_label' => __('Author:', WYSIJA),
|
2548 |
-
'category_show' => 'no',
|
2549 |
-
'category_label' => __('Categories:', WYSIJA),
|
2550 |
-
'nopost_message' => __('Latest content already sent.', WYSIJA),
|
2551 |
-
'bgcolor1' => null,
|
2552 |
-
'bgcolor2' => null,
|
2553 |
-
'sort_by' => 'newest'
|
2554 |
-
);
|
2555 |
-
|
2556 |
-
// backwards compatibility since we replaced the 'cpt' parameter by 'post_type' in 2.6
|
2557 |
-
if(isset($_GET['cpt']) && strlen(trim($_GET['cpt'])) > 0) {
|
2558 |
-
$params['post_type'] = trim($_GET['cpt']);
|
2559 |
-
}
|
2560 |
-
|
2561 |
-
// check if GET parameters are specified
|
2562 |
-
foreach ($params as $key => $value) {
|
2563 |
-
if (array_key_exists($key, $_GET)) {
|
2564 |
-
switch ($key) {
|
2565 |
-
case 'autopost_count':
|
2566 |
-
$params[$key] = (int)$_GET[$key];
|
2567 |
-
break;
|
2568 |
-
case 'author_label':
|
2569 |
-
case 'category_label':
|
2570 |
-
case 'readmore':
|
2571 |
-
case 'nopost_message':
|
2572 |
-
$params[$key] = base64_decode($_GET[$key]);
|
2573 |
-
break;
|
2574 |
-
default:
|
2575 |
-
$params[$key] = trim($_GET[$key]);
|
2576 |
-
}
|
2577 |
-
}
|
2578 |
-
}
|
2579 |
-
|
2580 |
-
// get autopost count
|
2581 |
-
$this->data['autopost_count'] = (array_key_exists('autopost_count', $_GET)) ? (int) $_GET['autopost_count'] : 0;
|
2582 |
-
|
2583 |
-
// get autopost type (single or multiple)
|
2584 |
-
$this->data['autopost_type'] = (array_key_exists('autopost_type', $_GET)) ? $_GET['autopost_type'] : 'multiple';
|
2585 |
-
|
2586 |
-
// if only one group of post can be added, change default alignment to left
|
2587 |
-
if ($this->data['autopost_type'] === 'single') {
|
2588 |
-
if ($params['image_alignment'] === 'alternate')
|
2589 |
-
$params['image_alignment'] = 'left';
|
2590 |
-
}
|
2591 |
-
|
2592 |
-
// we use that now, because categories from a post are different than categories from a CPT
|
2593 |
-
// $helper_wp_tools = WYSIJA::get('wp_tools','helper');
|
2594 |
-
// $this->data['categories'] = $helper_wp_tools->get_categories();
|
2595 |
-
|
2596 |
-
// max number of posts
|
2597 |
-
$this->data['post_limits'] = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 50);
|
2598 |
-
|
2599 |
-
$this->data['params'] = $params;
|
2600 |
-
|
2601 |
-
return $this->popupContent();
|
2602 |
-
}
|
2603 |
-
|
2604 |
-
function image_data() {
|
2605 |
-
$this->data['url'] = (isset($_GET['url']) && $_GET['url'] !== '') ? trim(urldecode($_GET['url'])) : null;
|
2606 |
-
$this->data['alt'] = (isset($_GET['alt'])) ? trim(urldecode($_GET['alt'])) : '';
|
2607 |
-
|
2608 |
-
$this->iframeTabs = array('image_data' => __("Image Parameters", WYSIJA));
|
2609 |
-
$_GET['tab'] = 'image_data';
|
2610 |
-
return $this->popupContent();
|
2611 |
-
}
|
2612 |
-
|
2613 |
-
function medias() {
|
2614 |
-
$this->popupContent();
|
2615 |
-
}
|
2616 |
-
|
2617 |
-
function special_wysija_browse() {
|
2618 |
-
$this->_wysija_subaction();
|
2619 |
-
$this->jsTrans['deleteimg'] = __('Delete image for all newsletters?', WYSIJA);
|
2620 |
-
return wp_iframe(array($this->viewObj, 'popup_wysija_browse'), array());
|
2621 |
-
}
|
2622 |
-
|
2623 |
-
function special_wordp_browse() {
|
2624 |
-
$this->_wysija_subaction();
|
2625 |
-
$this->jsTrans['deleteimg'] = __('This image might be in an article. Delete anyway?', WYSIJA);
|
2626 |
-
return wp_iframe(array($this->viewObj, 'popup_wp_browse'), array());
|
2627 |
-
}
|
2628 |
-
|
2629 |
-
function _wysija_subaction() {
|
2630 |
-
|
2631 |
-
if (isset($_REQUEST['subaction'])) {
|
2632 |
-
if ($_REQUEST['subaction'] === 'delete') {
|
2633 |
-
if (isset($_REQUEST['imgid']) && (int) $_REQUEST['imgid'] > 0) {
|
2634 |
-
/* delete the image with id imgid */
|
2635 |
-
$res = wp_delete_attachment((int) $_REQUEST['imgid'], true);
|
2636 |
-
if ($res) {
|
2637 |
-
$this->notice(__('Image has been deleted.', WYSIJA));
|
2638 |
-
}
|
2639 |
-
}
|
2640 |
-
}
|
2641 |
-
}
|
2642 |
-
return true;
|
2643 |
-
}
|
2644 |
-
|
2645 |
-
function special_new_wordp_upload() {
|
2646 |
-
|
2647 |
-
//wp_enqueue_script('plupload-all');
|
2648 |
-
wp_enqueue_script('wysija-plupload-handlers', WYSIJA_URL . 'js/jquery/pluploadHandler.js', array('plupload-all', 'jquery'));
|
2649 |
-
$uploader_l10n = array(
|
2650 |
-
'queue_limit_exceeded' => __('You have attempted to queue too many files.'),
|
2651 |
-
'file_exceeds_size_limit' => __('%s exceeds the maximum upload size for this site.'),
|
2652 |
-
'zero_byte_file' => __('This file is empty. Please try another.'),
|
2653 |
-
'invalid_filetype' => __('This file type is not allowed. Please try another.'),
|
2654 |
-
'not_an_image' => __('This file is not an image. Please try another.'),
|
2655 |
-
'image_memory_exceeded' => __('Memory exceeded. Please try another smaller file.'),
|
2656 |
-
'image_dimensions_exceeded' => __('This is larger than the maximum size. Please try another.'),
|
2657 |
-
'default_error' => __('An error occurred in the upload. Please try again later.'),
|
2658 |
-
'missing_upload_url' => __('There was a configuration error. Please contact the server administrator.'),
|
2659 |
-
'upload_limit_exceeded' => __('You may only upload 1 file.'),
|
2660 |
-
'http_error' => __('HTTP error.'),
|
2661 |
-
'upload_failed' => __('Upload failed.'),
|
2662 |
-
'big_upload_failed' => __('Please try uploading this file with the %1$sbrowser uploader%2$s.'),
|
2663 |
-
'big_upload_queued' => __('%s exceeds the maximum upload size for the multi-file uploader when used in your browser.'),
|
2664 |
-
'io_error' => __('IO error.'),
|
2665 |
-
'security_error' => __('Security error.'),
|
2666 |
-
'file_cancelled' => __('File canceled.'),
|
2667 |
-
'upload_stopped' => __('Upload stopped.'),
|
2668 |
-
'dismiss' => __('Dismiss'),
|
2669 |
-
'crunching' => __('Crunching…'),
|
2670 |
-
'deleted' => __('moved to the trash.'),
|
2671 |
-
'error_uploading' => __('“%s” has failed to upload.')
|
2672 |
-
);
|
2673 |
-
|
2674 |
-
wp_localize_script('wysija-plupload-handlers', 'pluploadL10n', $uploader_l10n);
|
2675 |
-
|
2676 |
-
wp_enqueue_script('image-edit');
|
2677 |
-
wp_enqueue_script('set-post-thumbnail');
|
2678 |
-
wp_enqueue_style('imgareaselect');
|
2679 |
-
wp_enqueue_script('media-gallery');
|
2680 |
-
|
2681 |
-
/* wp_register_style('myplupload', '/adjust-this-url/myplupload.css');
|
2682 |
-
wp_enqueue_style('myplupload'); */
|
2683 |
-
|
2684 |
-
|
2685 |
-
$errors = array();
|
2686 |
-
return wp_iframe(array($this->viewObj, 'popup_new_wp_upload'), $errors);
|
2687 |
-
}
|
2688 |
-
|
2689 |
-
function special_wordp_upload() {
|
2690 |
-
|
2691 |
-
wp_enqueue_script('swfupload-all');
|
2692 |
-
wp_enqueue_script('swfupload-handlers');
|
2693 |
-
wp_enqueue_script('wysija-upload-handlers', WYSIJA_URL . "js/jquery/uploadHandlers.js");
|
2694 |
-
wp_enqueue_script('image-edit');
|
2695 |
-
wp_enqueue_script('set-post-thumbnail');
|
2696 |
-
wp_enqueue_style('imgareaselect');
|
2697 |
-
|
2698 |
-
$errors = array();
|
2699 |
-
$id = 0;
|
2700 |
-
if (isset($_GET['flash']))
|
2701 |
-
$_GET['flash'] = 1;
|
2702 |
-
if (isset($_POST['html-upload']) && !empty($_FILES)) {
|
2703 |
-
// Upload File button was clicked
|
2704 |
-
$id = media_handle_upload('async-upload', $_REQUEST['post_id']);
|
2705 |
-
unset($_FILES);
|
2706 |
-
if (is_wp_error($id)) {
|
2707 |
-
$errors['upload_error'] = $id;
|
2708 |
-
$id = false;
|
2709 |
-
}
|
2710 |
-
}
|
2711 |
-
|
2712 |
-
if (!empty($_POST['insertonlybutton'])) {
|
2713 |
-
$href = $_POST['insertonly']['href'];
|
2714 |
-
if (!empty($href) && !strpos($href, '://'))
|
2715 |
-
$href = "http://$href";
|
2716 |
-
|
2717 |
-
$title = esc_attr($_POST['insertonly']['title']);
|
2718 |
-
if (empty($title))
|
2719 |
-
$title = basename($href);
|
2720 |
-
if (!empty($title) && !empty($href))
|
2721 |
-
$html = "<a href='" . esc_url($href) . "' >$title</a>";
|
2722 |
-
$html = apply_filters('file_send_to_editor_url', $html, esc_url_raw($href), $title);
|
2723 |
-
return media_send_to_editor($html);
|
2724 |
-
}
|
2725 |
-
|
2726 |
-
if (!empty($_POST)) {
|
2727 |
-
$return = media_upload_form_handler();
|
2728 |
-
|
2729 |
-
if (is_string($return))
|
2730 |
-
return $return;
|
2731 |
-
if (is_array($return))
|
2732 |
-
$errors = $return;
|
2733 |
-
}
|
2734 |
-
|
2735 |
-
if (isset($_POST['save'])) {
|
2736 |
-
$errors['upload_notice'] = __('Saved.', WYSIJA);
|
2737 |
-
return media_upload_gallery();
|
2738 |
-
}
|
2739 |
-
|
2740 |
-
|
2741 |
-
return wp_iframe(array($this->viewObj, 'popup_wp_upload'), $errors);
|
2742 |
-
}
|
2743 |
-
|
2744 |
-
function _checkEmailExists($emailId) {
|
2745 |
-
$result = false;
|
2746 |
-
$modelEmail = WYSIJA::get('email', 'model');
|
2747 |
-
|
2748 |
-
if ($modelEmail->exists(array('email_id' => $emailId)))
|
2749 |
-
$result = true;
|
2750 |
-
|
2751 |
-
if (!$result) {
|
2752 |
-
$this->error(__("The newsletter doesn't exist.", WYSIJA), 1);
|
2753 |
-
$this->redirect('admin.php?page=wysija_campaigns');
|
2754 |
-
}
|
2755 |
-
else
|
2756 |
-
return true;
|
2757 |
-
}
|
2758 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2759 |
}
|
2 |
|
3 |
global $viewMedia;
|
4 |
defined('WYSIJA') or die('Restricted access');
|
5 |
+
class WYSIJA_control_back_campaigns extends WYSIJA_control_back{
|
6 |
+
var $model='campaign';
|
7 |
+
var $view='campaigns';
|
8 |
+
var $list_columns=array('campaign_id','name', 'description');
|
9 |
+
var $searchable=array('name', 'description');
|
10 |
+
var $filters=array();
|
11 |
+
var $base_url = 'admin.php';
|
12 |
+
|
13 |
+
function WYSIJA_control_back_campaigns(){
|
14 |
+
|
15 |
+
}
|
16 |
+
function installation(){
|
17 |
+
return '';
|
18 |
+
}
|
19 |
+
/**
|
20 |
+
* Welcome page first time install
|
21 |
+
* @return boolean
|
22 |
+
*/
|
23 |
+
function welcome_new(){
|
24 |
+
$this->title=$this->viewObj->title=__('Welcome Page!',WYSIJA);
|
25 |
+
$this->jsTrans['instalwjp']=__('Installing Wysija Newsletter Premium plugin',WYSIJA);
|
26 |
+
$helper_readme=WYSIJA::get('readme','helper');
|
27 |
+
$helper_readme->scan();
|
28 |
+
$this->data=array();
|
29 |
+
$this->data['abouttext'] = __('A Brand New Wysija. Let the Fun Begin.',WYSIJA);
|
30 |
+
|
31 |
+
$model_config=WYSIJA::get('config','model');
|
32 |
+
$is_multisite=is_multisite();
|
33 |
+
$is_network_admin=WYSIJA::current_user_can('manage_network');
|
34 |
+
if($is_multisite && $is_network_admin){
|
35 |
+
$model_config->save(array('ms_wysija_whats_new'=>WYSIJA::get_version()));
|
36 |
+
}else{
|
37 |
+
$model_config->save(array('wysija_whats_new'=>WYSIJA::get_version()));
|
38 |
+
}
|
39 |
+
|
40 |
+
//add a new language code with a new video
|
41 |
+
$video_language=array();
|
42 |
+
$video_language['en_EN']='http://www.youtube.com/embed/pYzaHDTg5Jk';
|
43 |
+
$video_language['fr_FR']='http://www.youtube.com/embed/W5EyW5w7aWQ';
|
44 |
+
$video_language['sv_SE']='http://www.youtube.com/embed/O8_t_dekx74';
|
45 |
+
$video_language['ar']='http://www.youtube.com/embed/cyDHlX_qgOo';
|
46 |
+
|
47 |
+
$wp_lang = get_locale();
|
48 |
+
if(!empty($wp_lang) && isset($video_language[$wp_lang])){
|
49 |
+
$welcome_video_link = $video_language[$wp_lang];
|
50 |
+
}else{
|
51 |
+
$welcome_video_link = $video_language['en_EN'];
|
52 |
+
}
|
53 |
+
|
54 |
+
$this->data['sections'][]=array(
|
55 |
+
'title'=>__('Hey, we\'re curious! How did you find out about us?',WYSIJA).'<span id="poll_result"></span>',
|
56 |
+
'format'=>'normal',
|
57 |
+
'paragraphs'=>array(
|
58 |
+
'<ul class="welcome_poll">
|
59 |
+
<li>
|
60 |
+
<input type="radio" id="how_did_you_find_us_1" value="repository" name="how_did_you_find_us">
|
61 |
+
<label value="lab1" for="how_did_you_find_us_1">'.__('WordPress.org plugin repository',WYSIJA).'</label>
|
62 |
+
</li>
|
63 |
+
<li>
|
64 |
+
<input type="radio" id="how_did_you_find_us_2" value="search_engine" name="how_did_you_find_us">
|
65 |
+
<label value="lab2" for="how_did_you_find_us_2">'.__('Google or other search engine',WYSIJA).'</label>
|
66 |
+
</li>
|
67 |
+
<li>
|
68 |
+
<input type="radio" id="how_did_you_find_us_3" value="friend" name="how_did_you_find_us">
|
69 |
+
<label value="lab3" for="how_did_you_find_us_3">'.__('Friend recommendation',WYSIJA).'</label>
|
70 |
+
</li>
|
71 |
+
<li>
|
72 |
+
<input type="radio" id="how_did_you_find_us_4" value="url" name="how_did_you_find_us">
|
73 |
+
<label value="lab4" for="how_did_you_find_us_4">'.__('Blog post, online review, forum:',WYSIJA).'</label>
|
74 |
+
<input type="text" id="how_did_you_find_us_4_url" name="how_did_you_find_us_url" placeholder="'.__('Please enter the address where you\'ve found out about us',WYSIJA).'">
|
75 |
+
</li>
|
76 |
+
</ul>'
|
77 |
+
)
|
78 |
+
);
|
79 |
+
|
80 |
+
$this->data['sections'][]=array(
|
81 |
+
'title'=>__('First Time? See it in Action',WYSIJA),
|
82 |
+
'format'=>'normal',
|
83 |
+
'paragraphs'=>array(
|
84 |
+
__('You can start by watching this video by one of our users.',WYSIJA),
|
85 |
+
'<iframe width="853" height="480" src="'.$welcome_video_link.'" frameborder="0" allowfullscreen></iframe>'
|
86 |
+
)
|
87 |
+
);
|
88 |
+
|
89 |
+
$this->data['sections'][]=array(
|
90 |
+
'title'=>__('What You Can Do',WYSIJA),
|
91 |
+
'cols'=>array(
|
92 |
+
array(
|
93 |
+
'title'=>__('5 minute newbie guide',WYSIJA),
|
94 |
+
'content'=>__('Your Wysija comes with an example newsletter. You\'ll see it when you close this welcome page. Edit it to start playing with it.',WYSIJA)
|
95 |
+
),
|
96 |
+
array(
|
97 |
+
'title'=>__('Share your data',WYSIJA),
|
98 |
+
'content'=> str_replace(
|
99 |
+
array('[link]', '[/link]', '[ajaxlink]', '[/ajaxlink]'),
|
100 |
+
array('<a title="Anonymous Data" target="_blank" href="http://support.mailpoet.com/knowledgebase/share-your-data/?utm_source=wpadmin&utm_campaign=welcome_page">', '</a>', '<a id="share_analytics" href="javascript:;">', '</a>'),
|
101 |
+
__("We know too little about our users. We're looking for [link]anonymous data[/link] to build a better plugin. [ajaxlink]Yes, count me in![/ajaxlink]",WYSIJA))
|
102 |
+
),
|
103 |
+
array(
|
104 |
+
'title'=>__('Help yourself. Or let us help you.',WYSIJA),
|
105 |
+
'content'=> str_replace(
|
106 |
+
array('[link]','[/link]'),
|
107 |
+
array('<a href="http://support.mailpoet.com/" target="_blank" title="On our blog!">','</a>'),
|
108 |
+
__('We got documentation and a ticket system on [link]support.mailpoet.com[/link]. We answer within 24h.',WYSIJA))
|
109 |
+
)
|
110 |
+
),
|
111 |
+
'format'=>'three-col',
|
112 |
+
);
|
113 |
+
|
114 |
+
$this->data['sections'][]=array(
|
115 |
+
'title'=>__('Wysi... what?',WYSIJA),
|
116 |
+
'format'=>'normal',
|
117 |
+
'paragraphs'=>array(
|
118 |
+
str_replace(
|
119 |
+
array('[link]','[/link]'),
|
120 |
+
array('<a href="http://www.mailpoet.com/you-want-to-help-us-out/" target="_blank">','</a>'),
|
121 |
+
__('So who are we? We\'re 4 guys who decided in 2011 that WordPress needed a better emailing solution. The tag line <em>What You Send Is Just Awesome</em> was born and the acronym Wysija became our name. If you like what we do, make sure [link]you spread the good word[/link].',WYSIJA))
|
122 |
+
)
|
123 |
+
);
|
124 |
+
|
125 |
+
$this->viewObj->skip_header=true;
|
126 |
+
|
127 |
+
return true;
|
128 |
+
}
|
129 |
+
|
130 |
+
|
131 |
+
/**
|
132 |
+
* Welcome page for updaters
|
133 |
+
* @return boolean
|
134 |
+
*/
|
135 |
+
function whats_new(){
|
136 |
+
|
137 |
+
$this->title=$this->viewObj->title=__('What\'s new?',WYSIJA);
|
138 |
+
$this->jsTrans['instalwjp']=__('Installing Wysija Newsletter Premium plugin',WYSIJA);
|
139 |
+
$helper_readme=WYSIJA::get('readme','helper');
|
140 |
+
$helper_readme->scan();
|
141 |
+
$this->data=array();
|
142 |
+
$this->data['abouttext']=__('You updated! It\'s like having the next gadget, but better.',WYSIJA);
|
143 |
+
// this is a flag to have a pretty clean update page where teh only call to action is our survey
|
144 |
+
$show_survey=false;
|
145 |
+
|
146 |
+
$is_multisite=is_multisite();
|
147 |
+
$is_network_admin=WYSIJA::current_user_can('manage_network');
|
148 |
+
$model_config=WYSIJA::get('config','model');
|
149 |
+
|
150 |
+
if($is_multisite){
|
151 |
+
if($is_network_admin){
|
152 |
+
$model_config->save(array('ms_wysija_whats_new'=>WYSIJA::get_version()));
|
153 |
+
}
|
154 |
+
}else{
|
155 |
+
$model_config->save(array('wysija_whats_new'=>WYSIJA::get_version()));
|
156 |
+
}
|
157 |
+
|
158 |
+
|
159 |
+
$major_release=true;
|
160 |
+
|
161 |
+
// those are point release exceptions for which we were advertising the features. we probably can remove that now
|
162 |
+
$except_version=array('2.4.1', '2.4.2');
|
163 |
+
$wysija_version=WYSIJA::get_version();
|
164 |
+
if(!in_array($wysija_version,$except_version) && count(explode('.', $wysija_version))>2) $major_release=false;
|
165 |
+
|
166 |
+
|
167 |
+
|
168 |
+
if($major_release){
|
169 |
+
$this->data['sections'][]=array(
|
170 |
+
'title'=>__('Added',WYSIJA),
|
171 |
+
'cols'=>array(
|
172 |
+
array(
|
173 |
+
'title'=>__('Better subscriber management',WYSIJA),
|
174 |
+
'content'=>__('New batch actions: move, add & remove from lists. Confirm the unconfirmed. Select all subscribers in 1 click. Powerful.',WYSIJA)
|
175 |
+
),
|
176 |
+
array(
|
177 |
+
'title'=>__('Undo unsubscribe',WYSIJA),
|
178 |
+
'content'=>__('A subscriber mistakenly hit the unsubscribe link in your newsletter? He can now undo this in 1 click. Hurray.',WYSIJA)
|
179 |
+
),
|
180 |
+
array(
|
181 |
+
'title'=>__('Switch to beta',WYSIJA),
|
182 |
+
'content'=> str_replace(
|
183 |
+
array('[link]', '[/link]'),
|
184 |
+
array('<a href="admin.php?page=wysija_config&scroll_to=beta_mode_setting#tab-advanced">', '</a>'),
|
185 |
+
__('And make a difference. We\'re looking for feedback and bug reports on our upcoming features. [link]Activate the beta in your settings.[/link]',WYSIJA))
|
186 |
+
),
|
187 |
+
),
|
188 |
+
'format'=>'three-col',
|
189 |
+
);
|
190 |
+
|
191 |
+
|
192 |
+
$this->data['sections'][]=array(
|
193 |
+
'title'=>__('Improved',WYSIJA),
|
194 |
+
'cols'=>array(
|
195 |
+
array(
|
196 |
+
'title'=>__('MS: bounce, only once',WYSIJA),
|
197 |
+
'content'=>__( 'Premium user on Multisite? Enjoy configuring the automated bounce for all sites, once. Too easy.', WYSIJA)
|
198 |
+
),
|
199 |
+
array(
|
200 |
+
'title'=>__('Don\'t like my style?',WYSIJA),
|
201 |
+
'content'=>__('Well too bad! Remove the Styles and Themes tab in the visual editor for your site\'s other users. See the Advanced Settings.',WYSIJA)
|
202 |
+
),
|
203 |
+
array(
|
204 |
+
'title'=>__('Share your data, help Wysija',WYSIJA),
|
205 |
+
'content'=> str_replace(
|
206 |
+
array('[link]', '[/link]', '[ajaxlink]', '[/ajaxlink]'),
|
207 |
+
array('<a title="Open in new tab" target="_blank" href="http://support.mailpoet.com/knowledgebase/share-your-data/?utm_source=wpadmin&utm_campaign=update_page">', '</a>', '<a id="share_analytics" href="javascript:;">', '</a>'),
|
208 |
+
__("We're looking for [link]anonymous data[/link] to build a better plugin. [ajaxlink]<strong>Yes, count me in!</strong>[/ajaxlink]",WYSIJA))
|
209 |
+
),
|
210 |
+
),
|
211 |
+
'format'=>'three-col',
|
212 |
+
);
|
213 |
+
}elseif($show_no_survey_or_poll = false){ //turn that into a simple else when you want to use the survey or polls again
|
214 |
+
$show_survey=true;
|
215 |
+
|
216 |
+
if($show_survey){
|
217 |
+
$this->data['sections'][] = array(
|
218 |
+
'title' => __('4 min survey to better understand what you need',WYSIJA),
|
219 |
+
'type' => 'survey'
|
220 |
+
);
|
221 |
+
}else{ // this is the part about the survey
|
222 |
+
// list of polls from poll daddy
|
223 |
+
$polls=array();
|
224 |
+
$polls[7177099]=__('Where do you send your newsletters?', WYSIJA);
|
225 |
+
$polls[7199642]=__('How many users on this site create and send newsletters?', WYSIJA);
|
226 |
+
$polls[7199625]=__('You\'re installing this plugin for...', WYSIJA);
|
227 |
+
$polls[7196766]=__('How would you feel if you could no longer use us?', WYSIJA);
|
228 |
+
$polls[7196752]=__('Pick one improvement which is an absolute must', WYSIJA);
|
229 |
+
$polls[7196784]=__('If our Premium was sold as a monthly payment, instead of a yearly payment, would you consider purchasing it?', WYSIJA);
|
230 |
+
$polls[7196911]=__('On how many sites have you installed our plugin in the last year?', WYSIJA);
|
231 |
+
$polls[7196646]=__('How many WordPress sites do you create every year?', WYSIJA);
|
232 |
+
$polls[7196742]=__('When you installed our plugin, it was to...', WYSIJA);
|
233 |
+
$polls[7196756]=__('How did you find out about Wysija?', WYSIJA);
|
234 |
+
$polls[7196770]=__('How much money did you spend on Premium themes or plugins in the past year?', WYSIJA);
|
235 |
+
$polls[7196783]=__('What other emailing solutions do you use?', WYSIJA);
|
236 |
+
$polls[7196798]=__('What\'s the most annoying thing with our current version?', WYSIJA);
|
237 |
+
$polls[7196805]=__('Have you had problems with your newsletters being marked as spam?', WYSIJA);
|
238 |
+
|
239 |
+
// get the list of polls with the number of views for each
|
240 |
+
$polls_views=get_option('wysija_polls_views');
|
241 |
+
if(empty($polls_views)){
|
242 |
+
$polls_views=array();
|
243 |
+
// this one has been the first poll we've used so we consider that everyone viewed it already once
|
244 |
+
$polls_views[7177099]=1;
|
245 |
+
}
|
246 |
+
|
247 |
+
|
248 |
+
// make sure that we record each poll
|
249 |
+
foreach($polls as $poll_id => $poll_title){
|
250 |
+
if(!isset($polls_views[$poll_id])) $polls_views[$poll_id]=0;
|
251 |
+
}
|
252 |
+
|
253 |
+
// group polls by total view
|
254 |
+
$polls_grouped_by_total_view = array();
|
255 |
+
foreach($polls_views as $pollid =>$views){
|
256 |
+
$polls_grouped_by_total_view[$views][]=$pollid;
|
257 |
+
}
|
258 |
+
// order them
|
259 |
+
ksort($polls_grouped_by_total_view);
|
260 |
+
|
261 |
+
// get the series of polls that has been viewed the least
|
262 |
+
$polls_with_least_views = array_shift($polls_grouped_by_total_view);
|
263 |
+
|
264 |
+
// pull one poll out of that array
|
265 |
+
$random_key = array_rand($polls_with_least_views);
|
266 |
+
$poll_id_selected = $polls_with_least_views[$random_key];
|
267 |
+
$polls_views[$poll_id_selected]++;
|
268 |
+
|
269 |
+
WYSIJA::update_option('wysija_polls_views', $polls_views);
|
270 |
+
|
271 |
+
$this->data['polls'][$poll_id_selected]= $polls[$poll_id_selected];
|
272 |
+
// poll
|
273 |
+
$this->data['sections'][] = array(
|
274 |
+
'title' => __('A new poll to get to know you better', WYSIJA),
|
275 |
+
'type' => 'poll'
|
276 |
+
);
|
277 |
+
}
|
278 |
+
}
|
279 |
+
|
280 |
+
$msg=$model_config->getValue('ignore_msgs');
|
281 |
+
if(!isset($msg['ctaupdate']) && !$show_survey){
|
282 |
+
$this->data['sections'][]=array(
|
283 |
+
'title'=>__('Keep this plugin essentially free',WYSIJA),
|
284 |
+
'review'=>array(
|
285 |
+
'title'=>'1. '.__('Love kittens?',WYSIJA).' '.__('We love stars...',WYSIJA),
|
286 |
+
'content'=>str_replace(
|
287 |
+
array('[link]','[/link]'),
|
288 |
+
array('<a href="http://goo.gl/D52CBL" target="_blank" title="On wordpress.org">','</a>'),
|
289 |
+
__('Each time one of our users forgets to write a review, a kitten dies. It\'s sad and breaks our hearts. [link]Add your own review[/link] and save a kitten today.',WYSIJA))
|
290 |
+
|
291 |
+
|
292 |
+
),
|
293 |
+
'follow'=> array(
|
294 |
+
'title'=>'2. '.__('Follow us and don\'t miss anything!',WYSIJA),
|
295 |
+
'content'=>$this->__get_social_buttons(false)
|
296 |
+
),
|
297 |
+
'hidelink'=>'<a class="linkignore ctaupdate" href="javascript:;">'.__('Hide!',WYSIJA).'</a>',
|
298 |
+
'format'=>'review-follow',
|
299 |
+
);
|
300 |
+
|
301 |
+
}
|
302 |
+
|
303 |
+
|
304 |
+
|
305 |
+
|
306 |
+
|
307 |
+
if(isset($helper_readme->changelog[WYSIJA::get_version()])){
|
308 |
+
$this->data['sections'][]=array(
|
309 |
+
'title'=>__('Change log', WYSIJA),
|
310 |
+
'format'=>'bullets',
|
311 |
+
'paragraphs'=>$helper_readme->changelog[WYSIJA::get_version()]
|
312 |
+
);
|
313 |
+
}
|
314 |
+
|
315 |
+
|
316 |
+
|
317 |
+
|
318 |
+
$this->viewObj->skip_header=true;
|
319 |
+
return true;
|
320 |
+
}
|
321 |
+
|
322 |
+
/* START prem check hook */
|
323 |
+
// when curl or any php remote function not available mailpoet.com returns lcheck to that function
|
324 |
+
function licok() {
|
325 |
+
parent::WYSIJA_control_back();
|
326 |
+
$dt = get_option('wysijey');
|
327 |
+
|
328 |
+
if(isset($_REQUEST['xtz']) && $dt === $_REQUEST['xtz']){
|
329 |
+
$dataconf = array('premium_key'=> base64_encode(get_option('home').time()), 'premium_val' => time());
|
330 |
+
$this->notice(__('Premium version is valid for your site.',WYSIJA));
|
331 |
+
} else {
|
332 |
+
$dataconf = array('premium_key' => '', 'premium_val' => '');
|
333 |
+
|
334 |
+
$helper_licence=WYSIJA::get('licence','helper');
|
335 |
+
$url_premium = 'http://www.mailpoet.com/checkout/?wysijadomain='.$dt.'&nc=1&utm_source=wpadmin&utm_campaign=error_licence_activation';
|
336 |
+
|
337 |
+
$this->error(str_replace(array('[link]','[/link]'),array('<a href="'.$url_premium.'" target="_blank">','</a>'),
|
338 |
+
__('Premium licence does not exist for your site. Purchase it [link]here[/link].',WYSIJA)), 1);
|
339 |
+
}
|
340 |
+
WYSIJA::update_option('wysicheck',false);
|
341 |
+
$modelConf=WYSIJA::get('config','model');
|
342 |
+
$modelConf->save($dataconf);
|
343 |
+
|
344 |
+
$this->redirect('admin.php?page=wysija_config#tab-premium');
|
345 |
+
}
|
346 |
+
/* END prem check hook */
|
347 |
+
|
348 |
+
function validateLic(){
|
349 |
+
$helpLic=WYSIJA::get('licence','helper');
|
350 |
+
$res = $helpLic->check();
|
351 |
+
|
352 |
+
$this->redirect();
|
353 |
+
}
|
354 |
+
|
355 |
+
/**
|
356 |
+
* this function is triggered when sending manually the emails with the "Don't wait and send right now" button
|
357 |
+
* @param type $dataPost
|
358 |
+
*/
|
359 |
+
function manual_send($dataPost=false){
|
360 |
+
$modelQ=WYSIJA::get('queue','model');
|
361 |
+
$config=WYSIJA::get('config','model');
|
362 |
+
if( (int) $config->getValue('total_subscribers') < 2000 ){
|
363 |
+
if($modelQ->count()>0){
|
364 |
+
$helperQ=WYSIJA::get('queue','helper');
|
365 |
+
$emailid=false;
|
366 |
+
if($_REQUEST['emailid']){
|
367 |
+
$emailid=$_REQUEST['emailid'];
|
368 |
+
}
|
369 |
+
$helperQ->process($emailid);
|
370 |
+
}else{
|
371 |
+
echo '<strong style="font-family: Arial; font-weight: bold; font-size: 12px;">'.__('Queue is empty!',WYSIJA).'</strong>';
|
372 |
+
}
|
373 |
+
exit;
|
374 |
+
}else {
|
375 |
+
//deprecated
|
376 |
+
do_action('wysija_send_test_editor');
|
377 |
+
|
378 |
+
do_action('wysija_manual_send');
|
379 |
+
}
|
380 |
+
|
381 |
+
exit;
|
382 |
+
}
|
383 |
+
|
384 |
+
/**
|
385 |
+
* test the bounce handling maybe this should move somewhere else like config controller
|
386 |
+
* @return boolean
|
387 |
+
*/
|
388 |
+
function test_bounce(){
|
389 |
+
// bounce handling
|
390 |
+
$helper_bounce = WYSIJA::get('bounce','helper');
|
391 |
+
|
392 |
+
// in a multisite case we process first the bounce recording into the bounce table
|
393 |
+
if(is_multisite()){
|
394 |
+
$helper_bounce->record_bounce_ms();
|
395 |
+
|
396 |
+
// then we take actions from what has been returned by the bounce
|
397 |
+
$helper_bounce->process_bounce_ms();
|
398 |
+
}else{
|
399 |
+
$helper_bounce->process_bounce();
|
400 |
+
}
|
401 |
+
exit;
|
402 |
+
}
|
403 |
+
|
404 |
+
function add($dataPost=false){
|
405 |
+
$this->title=sprintf(__('Step %1$s',WYSIJA),1);
|
406 |
+
$this->js[]='wysija-validator';
|
407 |
+
|
408 |
+
$this->js[]='wysija-edit-autonl';
|
409 |
+
$this->js['admin-campaigns-edit']='admin-campaigns-edit';
|
410 |
+
$this->jsTrans['descauto']=str_replace(array('[newsletter:number]','[newsletter:total]','[newsletter:post_title]'),array('<b>[newsletter:number]</b>','<b>[newsletter:total]</b>','<b>[newsletter:post_title]</b>'),__('Insert [newsletter:total] to show number of posts, [newsletter:post_title] to show the latest post\'s title & [newsletter:number] to display the issue number.',WYSIJA));
|
411 |
+
$this->jsTrans['descstandard']=__('The first thing your subscribers see. Be creative and increase your open rate!',WYSIJA);
|
412 |
+
$this->immediateWarning();
|
413 |
+
$this->viewObj->title=__('First step: main details',WYSIJA);
|
414 |
+
$this->viewShow='add';
|
415 |
+
$this->data=array();
|
416 |
+
$this->data['campaign']=array('name'=>'','description'=>'');
|
417 |
+
$modelConfig=WYSIJA::get('config','model');
|
418 |
+
$this->data['email']=array('subject'=>'','from_email'=>$modelConfig->getValue('from_email'),'from_name'=>$modelConfig->getValue('from_name'));
|
419 |
+
$this->data['lists']=$this->__getLists(false,true,true);
|
420 |
+
|
421 |
+
$this->dataAutoNl();
|
422 |
+
$this->jsLoc['admin-campaigns-edit']['autofields']=$this->data['autonl']['fields'];
|
423 |
+
|
424 |
+
}
|
425 |
+
|
426 |
+
/**
|
427 |
+
* get the fields and fields value necessary when dealing with automatic newsletters
|
428 |
+
*/
|
429 |
+
function dataAutoNl(){
|
430 |
+
$dataFrequencyNoImmediate=$dataFrequency=array('daily'=>__('once a day at...',WYSIJA),
|
431 |
+
'weekly'=>__('weekly on...',WYSIJA),
|
432 |
+
'monthly'=>__('monthly on the...',WYSIJA),
|
433 |
+
'monthlyevery'=>__('monthly every...',WYSIJA),
|
434 |
+
'immediate'=>__('immediately.',WYSIJA));
|
435 |
+
|
436 |
+
unset($dataFrequencyNoImmediate['immediate']);
|
437 |
+
|
438 |
+
$times = array();
|
439 |
+
$time = strtotime('00:00:00');
|
440 |
+
$toolboxH=WYSIJA::get('toolbox','helper');
|
441 |
+
$times['00:00:00']=$toolboxH->localtime($time);
|
442 |
+
|
443 |
+
for($i = 1;$i < 24;$i++) {
|
444 |
+
$time = strtotime('+ 1hour',$time);
|
445 |
+
$key = date('H:i:s',$time);
|
446 |
+
$times[$key] = $toolboxH->localtime($time);
|
447 |
+
}
|
448 |
+
|
449 |
+
$daysvalues=$toolboxH->getday();
|
450 |
+
|
451 |
+
$numberweeks=$toolboxH->getweeksnumber();
|
452 |
+
$daynumbers=$toolboxH->getdaynumber();
|
453 |
+
|
454 |
+
|
455 |
+
$dataLists=array();
|
456 |
+
|
457 |
+
foreach($this->data['lists'] as $datal) {
|
458 |
+
if($datal['is_enabled']) $dataLists[$datal['list_id']]=$datal['name'];
|
459 |
+
}
|
460 |
+
|
461 |
+
// Get all available roles
|
462 |
+
$wptoolsH = WYSIJA::get('wp_tools','helper');
|
463 |
+
$roles = $wptoolsH->wp_get_all_roles();
|
464 |
+
$available_roles = array('any'=>__('in any role,',WYSIJA));
|
465 |
+
foreach ($roles as $role => $name) {
|
466 |
+
$available_roles[$role] = __('as ' . $name . ',',WYSIJA);
|
467 |
+
}
|
468 |
+
|
469 |
+
$this->data['autonl']['fields']=array(
|
470 |
+
'event'=>array(
|
471 |
+
'values'=>array(
|
472 |
+
'new-articles'=>__('there\'s new content, send...',WYSIJA),
|
473 |
+
'subs-2-nl'=>__('someone subscribes to the list...',WYSIJA),
|
474 |
+
'new-user'=>__('a new WordPress user is added to your site...',WYSIJA),
|
475 |
+
),
|
476 |
+
'valueshow'=>array(
|
477 |
+
'new-articles'=>array('when-article'),
|
478 |
+
'subs-2-nl'=>array('subscribetolist','numberafter','numberofwhat','unique_send'),
|
479 |
+
'new-user'=>array('roles','numberafter','numberofwhat','unique_send'),
|
480 |
+
),
|
481 |
+
'style'=>'width:300px;'
|
482 |
+
),
|
483 |
+
'when-article'=>array(
|
484 |
+
'values'=>$dataFrequency,
|
485 |
+
'valueshow'=>array(
|
486 |
+
'daily'=>array('time'),
|
487 |
+
'weekly'=>array('dayname','time'),
|
488 |
+
'monthly'=>array('daynumber','time'),
|
489 |
+
'monthlyevery'=>array('dayevery','dayname','time'),
|
490 |
+
)
|
491 |
+
),
|
492 |
+
'subscribetolist'=>array(
|
493 |
+
'values'=>$dataLists,
|
494 |
+
'style'=>'width:300px;'
|
495 |
+
),
|
496 |
+
'roles'=>array(
|
497 |
+
'values'=>$available_roles
|
498 |
+
),
|
499 |
+
'numberafter'=>array(
|
500 |
+
'type'=>'input',
|
501 |
+
'style'=>'width:35px;',
|
502 |
+
'class'=>'validate[required,custom[integer],min[1]]',
|
503 |
+
),
|
504 |
+
'numberofwhat'=>array(
|
505 |
+
'values'=>array(
|
506 |
+
'immediate'=>__('immediately.',WYSIJA),
|
507 |
+
'hours'=>__('hour(s) after.',WYSIJA),
|
508 |
+
'days'=>__('day(s) after.',WYSIJA),
|
509 |
+
'weeks'=>__('week(s) after.',WYSIJA)
|
510 |
+
),
|
511 |
+
'valuesunit'=>array(
|
512 |
+
'immediate'=>__('immediately',WYSIJA),
|
513 |
+
'hours'=>__('hour(s)',WYSIJA),
|
514 |
+
'days'=>__('day(s)',WYSIJA),
|
515 |
+
'weeks'=>__('week(s)',WYSIJA)
|
516 |
+
),
|
517 |
+
),
|
518 |
+
'dayevery'=>array(
|
519 |
+
'values'=>$numberweeks,
|
520 |
+
),
|
521 |
+
'dayname'=>array(
|
522 |
+
'values'=>$daysvalues,
|
523 |
+
),
|
524 |
+
|
525 |
+
'daynumber'=>array(
|
526 |
+
'values'=>$daynumbers,
|
527 |
+
),
|
528 |
+
|
529 |
+
'time'=>array(
|
530 |
+
'values'=>$times,
|
531 |
+
),
|
532 |
+
/*'unique_send'=>array(
|
533 |
+
'label_before'=>__('Send this email only once.',WYSIJA),
|
534 |
+
'type'=>'checkbox'
|
535 |
+
),*/
|
536 |
+
);
|
537 |
+
$helpersEvent=WYSIJA::get('autonews','helper');
|
538 |
+
$extraEvents=$helpersEvent->events();
|
539 |
+
|
540 |
+
/*if there are plugin to add autonewsletter event they are adding their customized field over here*/
|
541 |
+
if($extraEvents){
|
542 |
+
foreach($extraEvents as $k =>$v){
|
543 |
+
|
544 |
+
$this->data['autonl']['fields']['event']['values'][$k]=$v['title'];
|
545 |
+
foreach($v['fields'] as $fieldCKEY => $fieldCVAL){
|
546 |
+
if(isset($this->data['autonl']['fields'][$fieldCKEY])) continue;
|
547 |
+
}
|
548 |
+
$this->data['autonl']['fields']['event']['valueshow'][$k]=array_keys($v['fields']);
|
549 |
+
}
|
550 |
+
}
|
551 |
+
|
552 |
+
}
|
553 |
+
|
554 |
+
|
555 |
+
|
556 |
+
function __getLists($enabled=true,$count=false,$notgetalllistid=false){
|
557 |
+
$modelList=WYSIJA::get('list','model');
|
558 |
+
//get lists which have users and are enabled */
|
559 |
+
if($enabled) $enabledstrg=' is_enabled>0 and';
|
560 |
+
else $enabledstrg='';
|
561 |
+
|
562 |
+
$extrasql='';
|
563 |
+
if(!$notgetalllistid) $extrasql='WHERE list_id in (SELECT distinct(list_id) from wp_wysija_user_list )';
|
564 |
+
$query='SELECT * FROM [wysija]list '.$extrasql;
|
565 |
+
$listres=$modelList->query('get_res',$query);
|
566 |
+
|
567 |
+
if($count){
|
568 |
+
$mConfig = WYSIJA::get('config','model');
|
569 |
+
$condit = '>=';
|
570 |
+
if($mConfig->getValue('confirm_dbleoptin')) $condit='>';
|
571 |
+
$qry1="SELECT count(distinct A.user_id) as nbsub,A.list_id FROM `[wysija]user_list` as A LEFT JOIN `[wysija]user` as B on A.user_id=B.user_id WHERE B.status $condit 0 and A.sub_date>0 and A.unsub_date=0 GROUP BY list_id";
|
572 |
+
|
573 |
+
$total=$modelList->getResults($qry1);
|
574 |
+
|
575 |
+
foreach($total as $tot){
|
576 |
+
foreach($listres as $key=>$res){
|
577 |
+
if($tot['list_id']==$res['list_id']) $listres[$key]['count']=$tot['nbsub'];
|
578 |
+
}
|
579 |
+
}
|
580 |
+
}
|
581 |
+
foreach($listres as $key =>$res){
|
582 |
+
if(!isset($res['count'])) $listres[$key]['count']=0;
|
583 |
+
}
|
584 |
+
return $listres;
|
585 |
+
}
|
586 |
+
|
587 |
+
function edit($dataPost=false){
|
588 |
+
if(!$this->_checkEmailExists($_REQUEST['id'])) return;
|
589 |
+
$this->add();
|
590 |
+
|
591 |
+
$modelEmail=WYSIJA::get('email','model');
|
592 |
+
|
593 |
+
$this->data['email']=$modelEmail->getOne(false,array('email_id'=>$_REQUEST['id']));
|
594 |
+
|
595 |
+
if($this->data['email']['status']>0){
|
596 |
+
$this->redirect();
|
597 |
+
}
|
598 |
+
$this->title=sprintf(__('Step %1$s',WYSIJA),1).' | '.$this->data['email']['subject'];
|
599 |
+
$modelCamp=WYSIJA::get('campaign','model');
|
600 |
+
$this->data['campaign']=$modelCamp->getOne(false,array('campaign_id'=>$this->data['email']['campaign_id']));
|
601 |
+
|
602 |
+
$modelCL=WYSIJA::get('campaign_list','model');
|
603 |
+
$this->data['campaign_list']=$modelCL->get(false,array('campaign_id'=>$this->data['email']['campaign_id']));
|
604 |
+
}
|
605 |
+
|
606 |
+
|
607 |
+
function editTemplate(){
|
608 |
+
// make sure the editor content is not cached
|
609 |
+
header('Cache-Control: no-cache, max-age=0, must-revalidate, no-store'); // HTTP/1.1
|
610 |
+
header('Expires: Fri, 9 Mar 1984 00:00:00 GMT');
|
611 |
+
|
612 |
+
if(!$this->_checkEmailExists($_REQUEST['id'])) return;
|
613 |
+
$this->viewShow = 'editTemplate';
|
614 |
+
|
615 |
+
wp_enqueue_style('thickbox');
|
616 |
+
|
617 |
+
$wjEngine = WYSIJA::get('wj_engine', 'helper');
|
618 |
+
/* WJ editor translations */
|
619 |
+
$this->jsTrans = array_merge($this->jsTrans, $wjEngine->getTranslations());
|
620 |
+
|
621 |
+
$this->jsTrans['savingnl']=__('Saving newsletter...',WYSIJA);
|
622 |
+
$this->jsTrans['errorsavingnl']=__('Error Saving newsletter...',WYSIJA);
|
623 |
+
$this->jsTrans['savednl']=__('Newsletter has been saved.',WYSIJA);
|
624 |
+
$this->jsTrans['previewemail']=__('Sending preview...',WYSIJA);
|
625 |
+
$this->jsTrans['spamtestresult']=__('Spam test results',WYSIJA);
|
626 |
+
|
627 |
+
/* WJ editor JS */
|
628 |
+
$this->js[]='wysija-editor';
|
629 |
+
$this->js[]='wysija-admin-ajax-proto';
|
630 |
+
$this->js[]='wysija-admin-ajax';
|
631 |
+
$this->js[]='wysija-base-script-64';
|
632 |
+
$this->js[]='media-upload';
|
633 |
+
$this->js['admin-campaigns-editDetails']='admin-campaigns-editDetails';
|
634 |
+
$modelEmail=WYSIJA::get('email','model');
|
635 |
+
$this->data=array();
|
636 |
+
$this->data['email']=$modelEmail->getOne(false,array('email_id'=>$_REQUEST['id']));
|
637 |
+
|
638 |
+
$this->checkIsEditable();
|
639 |
+
|
640 |
+
$this->viewObj->title=sprintf(__('Second step : "%1$s"',WYSIJA),$this->data['email']['subject']);
|
641 |
+
$this->title=sprintf(__('Step %1$s',WYSIJA),2)." | ".$this->data['email']['subject'];
|
642 |
+
|
643 |
+
// check if html source is enabled in the config (this will add the "html source" button in tinymce)
|
644 |
+
$model_config = WYSIJA::get('config', 'model');
|
645 |
+
$this->jsTrans['html_source_enabled'] = (int)$model_config->getValue('html_source');
|
646 |
+
}
|
647 |
+
|
648 |
+
function checkIsEditable(){
|
649 |
+
if(
|
650 |
+
!($this->data['email']==2 || isset($this->data['email']['params']['schedule']['isscheduled']))
|
651 |
+
&& $this->data['email']['status']>0
|
652 |
+
){
|
653 |
+
$this->redirect();
|
654 |
+
}
|
655 |
+
}
|
656 |
+
|
657 |
+
function pause(){
|
658 |
+
/* pause the campaign entry */
|
659 |
+
if(isset($_REQUEST['id']) && $_REQUEST['id']){
|
660 |
+
$modelEmail=WYSIJA::get('email','model');
|
661 |
+
$myemail=$modelEmail->getOne(false,array('email_id'=>$_REQUEST['id']));
|
662 |
+
$modelEmail->reset();
|
663 |
+
$modelEmail->columns['modified_at']['autoup']=1;
|
664 |
+
$modelEmail->update(array('status'=>-1),array('email_id'=>$_REQUEST['id']));
|
665 |
+
|
666 |
+
if($myemail['type']==2){
|
667 |
+
return $this->redirect('admin.php?page=wysija_campaigns&id='.$myemail['email_id'].'&action=edit');
|
668 |
+
}else{
|
669 |
+
$this->notice(__('Sending is now paused.',WYSIJA));
|
670 |
+
}
|
671 |
+
}
|
672 |
+
|
673 |
+
$this->redirect();
|
674 |
+
}
|
675 |
+
|
676 |
+
function resume(){
|
677 |
+
/* pause the campaign entry */
|
678 |
+
if(isset($_REQUEST['id']) && $_REQUEST['id']){
|
679 |
+
$modelEmail=WYSIJA::get('email','model');
|
680 |
+
$modelEmail->columns['modified_at']['autoup']=1;
|
681 |
+
$modelEmail->update(array('status'=>99),array('email_id'=>$_REQUEST['id']));
|
682 |
+
$this->notice(__('Sending has resumed.',WYSIJA));
|
683 |
+
}
|
684 |
+
|
685 |
+
$this->redirect();
|
686 |
+
}
|
687 |
+
|
688 |
+
function duplicate(){
|
689 |
+
|
690 |
+
/* 1 - copy the campaign entry */
|
691 |
+
|
692 |
+
$model=WYSIJA::get('campaign','model');
|
693 |
+
$query='INSERT INTO `[wysija]campaign` (`name`,`description`)
|
694 |
+
SELECT concat("'.stripslashes(__('Copy of ',WYSIJA)).'",`name`),`description` FROM [wysija]campaign
|
695 |
+
WHERE campaign_id='.(int)$_REQUEST['id'];
|
696 |
+
$campaignid=$model->query($query);
|
697 |
+
|
698 |
+
/* 2 - copy the email entry */
|
699 |
+
$query='INSERT INTO `[wysija]email` (`campaign_id`,`subject`,`body`,`type`,`params`,`wj_data`,`wj_styles`,`from_email`,`from_name`,`replyto_email`,`replyto_name`,`attachments`,`status`,`created_at`,`modified_at`)
|
700 |
+
SELECT '.$campaignid.', concat("'.stripslashes(__('Copy of ',WYSIJA)).'",`subject`),`body`,`type`,`params`,`wj_data`,`wj_styles`,`from_email`,`from_name`,`replyto_email`,`replyto_name`,`attachments`,0,'.time().','.time().' FROM [wysija]email
|
701 |
+
WHERE email_id='.(int)$_REQUEST['email_id'];
|
702 |
+
$emailid=$model->query($query);
|
703 |
+
|
704 |
+
//let's reset the count of total childs for auto newsletter
|
705 |
+
$mEmail=WYSIJA::get('email','model');
|
706 |
+
$emailData=$mEmail->getOne(false,array('email_id'=>$emailid));
|
707 |
+
|
708 |
+
if($emailData['type']==2){
|
709 |
+
$paramsReseted=$emailData['params'];
|
710 |
+
if(isset($paramsReseted['autonl']['total_child'])) $paramsReseted['autonl']['total_child']=0;
|
711 |
+
if(isset($paramsReseted['autonl']['nextSend'])) $paramsReseted['autonl']['nextSend']=0;
|
712 |
+
if(isset($paramsReseted['autonl']['firstSend'])) unset($paramsReseted['autonl']['firstSend']);
|
713 |
+
if(isset($paramsReseted['autonl']['lastSend'])) unset($paramsReseted['autonl']['lastSend']);
|
714 |
+
if(isset($paramsReseted['autonl']['articles']['ids'])) unset($paramsReseted['autonl']['articles']['ids']);
|
715 |
+
|
716 |
+
|
717 |
+
$mEmail->update(array('params'=>$paramsReseted),array('email_id'=>$emailid));
|
718 |
+
}
|
719 |
+
|
720 |
+
/* 3 - copy the campaign_list entry */
|
721 |
+
$query="INSERT INTO `[wysija]campaign_list` (`campaign_id`,`list_id`,`filter`)
|
722 |
+
SELECT $campaignid,`list_id`,`filter` FROM [wysija]campaign_list
|
723 |
+
WHERE campaign_id=".(int)$_REQUEST['id'];
|
724 |
+
$model->query($query);
|
725 |
+
|
726 |
+
$this->notice(__('The newsletter has been duplicated.',WYSIJA));
|
727 |
+
|
728 |
+
$this->redirect('admin.php?page=wysija_campaigns&id='.$emailid.'&action=edit');
|
729 |
+
}
|
730 |
+
function duplicateEmail(){
|
731 |
+
if(!$this->_checkEmailExists($_REQUEST['id'])) return;
|
732 |
+
|
733 |
+
$model=WYSIJA::get('campaign','model');
|
734 |
+
/* 2 - copy the email entry */
|
735 |
+
$query='INSERT INTO `[wysija]email` (`campaign_id`,`subject`,`body`,`params`,`wj_data`,`wj_styles`,`from_email`,`from_name`,`replyto_email`,`replyto_name`,`attachments`,`status`,`created_at`,`modified_at`)
|
736 |
+
SELECT `campaign_id`, concat("'.stripslashes(__("Copy of ",WYSIJA)).'",`subject`),`body`,`params`,`wj_data`,`wj_styles`,`from_email`,`from_name`,`replyto_email`,`replyto_name`,`attachments`,0,'.time().','.time().' FROM [wysija]email
|
737 |
+
WHERE email_id='.(int)$_REQUEST['id'];
|
738 |
+
$emailid = $model->query($query);
|
739 |
+
|
740 |
+
$this->notice(__('The newsletter has been duplicated.',WYSIJA));
|
741 |
+
|
742 |
+
$this->redirect('admin.php?page=wysija_campaigns&id='.$emailid.'&action=edit');
|
743 |
+
}
|
744 |
+
|
745 |
+
function immediateWarning(){
|
746 |
+
$model_config = WYSIJA::get('config','model');
|
747 |
+
$is_multisite = is_multisite();
|
748 |
+
|
749 |
+
//$is_multisite=true;//PROD comment that line
|
750 |
+
if($is_multisite && $model_config->getValue('sending_method') == 'network'){
|
751 |
+
$sending_emails_each = $model_config->getValue('ms_sending_emails_each');
|
752 |
+
$number = $model_config->getValue('ms_sending_emails_number');
|
753 |
+
}else{
|
754 |
+
$sending_emails_each = $model_config->getValue('sending_emails_each');
|
755 |
+
$number = $model_config->getValue('sending_emails_number');
|
756 |
+
}
|
757 |
+
|
758 |
+
$formsHelp=WYSIJA::get('forms','helper');
|
759 |
+
|
760 |
+
$timespan=$formsHelp->eachValuesSec[$sending_emails_each];
|
761 |
+
$tb=WYSIJA::get('toolbox','helper');
|
762 |
+
|
763 |
+
$this->immediatewarning=str_replace(
|
764 |
+
array('[link]','[/link]','[settings]'),
|
765 |
+
array('<a href="#">','</a>',sprintf(__('%1$s emails every %2$s',WYSIJA),$number,trim($tb->duration($timespan,true)))),
|
766 |
+
__('Your sending settings ([settings]) can\'t send that quickly to [number] subscribers. Expect delivery delays. [link]Read more[/link]',WYSIJA));
|
767 |
+
$this->viewObj->immediatewarning='<span class="warning-msg" id="immediatewarning">'.$this->immediatewarning.'</span>';
|
768 |
+
|
769 |
+
$this->jsTrans['immediatewarning']=$this->immediatewarning;
|
770 |
+
|
771 |
+
//how many emails can be sent in 12 hours
|
772 |
+
//if the frequency is less than 12hours
|
773 |
+
if($timespan < 43200){
|
774 |
+
$ratio=floor(43200/$timespan);
|
775 |
+
$this->jsTrans['possibleemails']=$ratio*$number;
|
776 |
+
}else{
|
777 |
+
if($timespan == 43200){
|
778 |
+
$this->jsTrans['possibleemails']=$number;
|
779 |
+
}else{
|
780 |
+
$ratio=floor($timespan/43200);
|
781 |
+
$this->jsTrans['possibleemails']=$number/$ratio;
|
782 |
+
}
|
783 |
+
|
784 |
+
}
|
785 |
+
}
|
786 |
+
|
787 |
+
function editDetails(){
|
788 |
+
if(!$this->_checkEmailExists($_REQUEST['id'])) return;
|
789 |
+
$this->viewObj->title=__('Final step : last details',WYSIJA);
|
790 |
+
$this->viewShow='editDetails';
|
791 |
+
$this->js[]='wysija-validator';
|
792 |
+
$this->jsTrans['previewemail']=__('Sending preview...',WYSIJA);
|
793 |
+
$this->jsTrans['pickadate']=__('Pick a date',WYSIJA);
|
794 |
+
$this->jsTrans['saveclose']=__('Save & close',WYSIJA);
|
795 |
+
$this->jsTrans['sendlater']=__('Send later',WYSIJA);
|
796 |
+
|
797 |
+
$this->jsTrans['schedule']=__('Schedule',WYSIJA);
|
798 |
+
|
799 |
+
|
800 |
+
$this->js[]='jquery-ui-datepicker';
|
801 |
+
|
802 |
+
$model_list=WYSIJA::get('list','model');
|
803 |
+
$model_list->limitON=false;
|
804 |
+
$this->data=array();
|
805 |
+
$this->data['lists']=$this->__getLists(false,true,true);
|
806 |
+
|
807 |
+
$model_email=WYSIJA::get('email','model');
|
808 |
+
$this->data['email']=$model_email->getOne(false,array('email_id'=>$_REQUEST['id']));
|
809 |
+
|
810 |
+
// The first newsletter, we don't have replyto_email and replyto_name
|
811 |
+
if(empty($this->data['email']['replyto_email']) || empty($this->data['email']['replyto_name'])){
|
812 |
+
$current_user = wp_get_current_user();
|
813 |
+
$this->data['email']['replyto_email'] = $current_user->data->user_email;
|
814 |
+
$this->data['email']['replyto_name'] = $current_user->data->display_name;
|
815 |
+
}
|
816 |
+
|
817 |
+
|
818 |
+
if((int)$this->data['email']['type']==2){
|
819 |
+
$this->js['wysija-edit-autonl']='wysija-edit-autonl';
|
820 |
+
$this->jsTrans['autonl']=true;
|
821 |
+
$this->immediateWarning();
|
822 |
+
$this->jsTrans['send']=__('Activate now',WYSIJA);
|
823 |
+
}else{
|
824 |
+
$this->jsTrans['autonl']=true;
|
825 |
+
$this->viewObj->immediatewarning='';
|
826 |
+
$this->jsTrans['send']= __('Send',WYSIJA);
|
827 |
+
}
|
828 |
+
|
829 |
+
if((int)$this->data['email']['type']==1){
|
830 |
+
$this->jsTrans['alertsend']=__('You are about to send this newsletter. Please confirm.',WYSIJA);
|
831 |
+
}else{
|
832 |
+
if(isset($this->data['email']['params']['autonl']['event']) && $this->data['email']['params']['autonl']['event']=='subs-2-nl'){
|
833 |
+
$this->data['autoresponder']=1;
|
834 |
+
foreach($this->data['lists'] as $list){
|
835 |
+
if($list['list_id']==$this->data['email']['params']['autonl']['subscribetolist']){
|
836 |
+
break;
|
837 |
+
}
|
838 |
+
}
|
839 |
+
|
840 |
+
$this->jsTrans['ignoreprevious']=sprintf(__('Are you sure you want to ignore the %1$s subscribers of the list %2$s?', WYSIJA),'"'.$list['count'].'"','"'.$list['name'].'"');
|
841 |
+
}
|
842 |
+
}
|
843 |
+
|
844 |
+
$this->checkIsEditable();
|
845 |
+
|
846 |
+
$this->title=sprintf(__('Step %1$s',WYSIJA),3)." | ".$this->data['email']['subject'];
|
847 |
+
$this->dataAutoNl();
|
848 |
+
|
849 |
+
$this->jsLoc['wysija-edit-autonl']['autofields']=$this->data['autonl']['fields'];
|
850 |
+
|
851 |
+
$modelCL=WYSIJA::get('campaign_list','model');
|
852 |
+
$this->data['campaign_list']=$modelCL->get(false,array('campaign_id'=>$this->data['email']['campaign_id']));
|
853 |
+
}
|
854 |
+
|
855 |
+
function delete(){
|
856 |
+
$this->requireSecurity();
|
857 |
+
|
858 |
+
if(isset($_REQUEST['id'])){
|
859 |
+
$modelCampaign=WYSIJA::get('campaign','model');
|
860 |
+
$modelCampaign->delete(array('campaign_id'=>$_REQUEST['id']));
|
861 |
+
|
862 |
+
$modelCampaignL=WYSIJA::get('campaign_list','model');
|
863 |
+
$modelCampaignL->delete(array('campaign_id'=>$_REQUEST['id']));
|
864 |
+
|
865 |
+
$modelEmail=WYSIJA::get('email','model');
|
866 |
+
$modelEmail->delete(array('campaign_id'=>$_REQUEST['id']));
|
867 |
+
|
868 |
+
$this->notice(__('Newsletter deleted.',WYSIJA));
|
869 |
+
|
870 |
+
}else{
|
871 |
+
|
872 |
+
$this->notice(__("Newsletter can't be deleted.",WYSIJA));
|
873 |
+
}
|
874 |
+
|
875 |
+
// retrieve saved filter
|
876 |
+
if(!empty($_REQUEST['action'])) unset($_REQUEST['action']);
|
877 |
+
if(!empty($_REQUEST['id'])) unset($_REQUEST['id']);
|
878 |
+
if(!empty($_REQUEST['_wpnonce'])) unset($_REQUEST['_wpnonce']);
|
879 |
+
$redirect = $this->base_url.'?'.http_build_query($_REQUEST);
|
880 |
+
$this->redirect($redirect);
|
881 |
+
}
|
882 |
+
|
883 |
+
function deleteEmail(){
|
884 |
+
$this->requireSecurity();
|
885 |
+
if(!$this->_checkEmailExists($_REQUEST['id'])) return;
|
886 |
+
|
887 |
+
if(isset($_REQUEST['id'])){
|
888 |
+
$modelEmail=WYSIJA::get('email','model');
|
889 |
+
$modelEmail->delete(array('email_id'=>$_REQUEST['id']));
|
890 |
+
$this->notice(__('Newsletter deleted.',WYSIJA));
|
891 |
+
}else{
|
892 |
+
$this->notice(__('Newsletter can\'t be deleted.',WYSIJA));
|
893 |
+
}
|
894 |
+
|
895 |
+
$this->redirect();
|
896 |
+
}
|
897 |
+
|
898 |
+
function savecamp(){
|
899 |
+
$this->redirectAfterSave=false;
|
900 |
+
//echo 'hello';
|
901 |
+
//$this->requireSecurity();
|
902 |
+
/* update email */
|
903 |
+
$data=array();
|
904 |
+
|
905 |
+
if(isset($_REQUEST['id'])){
|
906 |
+
|
907 |
+
$modelEmail=WYSIJA::get('email','model');
|
908 |
+
$modelEmail->fieldValid=false;
|
909 |
+
$emaildataarr=$modelEmail->getOne(array('email_id'=>$_REQUEST['id']));
|
910 |
+
|
911 |
+
$modelCampaign=WYSIJA::get('campaign','model');
|
912 |
+
$modelCampaign->update(array('name'=>$_POST['wysija']['email']['subject'],'description'=>''),array('campaign_id'=>$emaildataarr['campaign_id']));
|
913 |
+
$campaign_id=$emaildataarr['campaign_id'];
|
914 |
+
$email_id=$emaildataarr['email_id'];
|
915 |
+
$dataEmail=array(
|
916 |
+
'campaign_id'=>$campaign_id,
|
917 |
+
'subject'=>$_POST['wysija']['email']['subject'],
|
918 |
+
'type'=>$_POST['wysija']['email']['type']);
|
919 |
+
|
920 |
+
if((int)$dataEmail['type'] === 2){
|
921 |
+
|
922 |
+
//$newparams=unserialize(base64_decode($emaildataarr['params']));
|
923 |
+
$newparams['autonl']=$_POST['wysija']['email']['params']['autonl'];
|
924 |
+
|
925 |
+
$dataEmail['params']=$newparams;
|
926 |
+
if(!isset($newparams['autonl']['unique_send'])){
|
927 |
+
unset($dataEmail['params']['autonl']['unique_send']);
|
928 |
+
}else $dataEmail['params']['autonl']['unique_send']=true;
|
929 |
+
|
930 |
+
}
|
931 |
+
$modelEmail->columns['modified_at']['autoup']=1;
|
932 |
+
$modelEmail->debugupdate=true;
|
933 |
+
$dataEmail['email_id']=$_REQUEST['id'];
|
934 |
+
|
935 |
+
if(isset($_REQUEST['save-reactivate'])){
|
936 |
+
//if the button save and reactivate has been clicked then we reactivate and redirect to the newsletter page
|
937 |
+
$dataEmail['status']=99;
|
938 |
+
$_REQUEST['return']=1;
|
939 |
+
}
|
940 |
+
|
941 |
+
$data['email']['email_id']=$modelEmail->update($dataEmail,array('email_id'=>$_REQUEST['id']));
|
942 |
+
} else {
|
943 |
+
$modelCampaign=WYSIJA::get('campaign','model');
|
944 |
+
$campaign_id = $modelCampaign->insert(array('name' => $_POST['wysija']['email']['subject'], 'description' => ''));
|
945 |
+
|
946 |
+
$modelEmail=WYSIJA::get('email','model');
|
947 |
+
$modelEmail->fieldValid=false;
|
948 |
+
$emaildata=array(
|
949 |
+
'campaign_id' => $campaign_id,
|
950 |
+
'subject' => $_POST['wysija']['email']['subject'],
|
951 |
+
'type' => (int)$_POST['wysija']['email']['type']
|
952 |
+
);
|
953 |
+
|
954 |
+
|
955 |
+
// create autonl parameters if necessary
|
956 |
+
if((int)$_POST['wysija']['email']['type'] === 2 && isset($_POST['wysija']['email']['params']['autonl'])) {
|
957 |
+
$emaildata['params'] = array('autonl' => $_POST['wysija']['email']['params']['autonl']);
|
958 |
+
}
|
959 |
+
|
960 |
+
// create sample data depending on newsletter's type
|
961 |
+
if((int)$_POST['wysija']['email']['type'] === 2 && $_POST['wysija']['email']['params']['autonl']['event'] === 'new-articles') {
|
962 |
+
|
963 |
+
// if immediate, post_limit is set to 1
|
964 |
+
if($emaildata['params']['autonl']['when-article'] === 'immediate') {
|
965 |
+
$autopostParams = array(
|
966 |
+
array('key' => 'category_ids', 'value' => ''),
|
967 |
+
array('key' => 'category', 'value' => ''),
|
968 |
+
array('key' => 'title_tag', 'value' => 'h2'),
|
969 |
+
array('key' => 'title_alignment', 'value' => 'left'),
|
970 |
+
array('key' => 'image_alignment', 'value' => 'alternate'),
|
971 |
+
array('key' => 'post_content', 'value' => 'excerpt'),
|
972 |
+
array('key' => 'readmore', 'value' => base64_encode(__('Read online.',WYSIJA))),
|
973 |
+
array('key' => 'show_divider', 'value' => 'yes'),
|
974 |
+
array('key' => 'cpt', 'value' => 'post'),
|
975 |
+
array('key' => 'post_limit', 'value' => 1)
|
976 |
+
);
|
977 |
+
} else {
|
978 |
+
$autopostParams = array(
|
979 |
+
array('key' => 'category_ids', 'value' => ''),
|
980 |
+
array('key' => 'category', 'value' => ''),
|
981 |
+
array('key' => 'title_tag', 'value' => 'h2'),
|
982 |
+
array('key' => 'title_alignment', 'value' => 'left'),
|
983 |
+
array('key' => 'image_alignment', 'value' => 'alternate'),
|
984 |
+
array('key' => 'post_content', 'value' => 'excerpt'),
|
985 |
+
array('key' => 'readmore', 'value' => base64_encode(__('Read online.',WYSIJA))),
|
986 |
+
array('key' => 'show_divider', 'value' => 'yes'),
|
987 |
+
array('key' => 'cpt', 'value' => 'post'),
|
988 |
+
array('key' => 'post_limit', 'value' => 2)
|
989 |
+
);
|
990 |
+
}
|
991 |
+
|
992 |
+
// sample data for post notifications
|
993 |
+
$newwjdata = array(
|
994 |
+
'version' => WYSIJA::get_version(),
|
995 |
+
'header' => array(
|
996 |
+
'text' => NULL,
|
997 |
+
'image' => array(
|
998 |
+
'src' => WYSIJA_EDITOR_IMG.'transparent.png',
|
999 |
+
'width' => 600,
|
1000 |
+
'height' => 86,
|
1001 |
+
'alignment' => 'center',
|
1002 |
+
'static' => true,
|
1003 |
+
),
|
1004 |
+
'alignment' => 'center',
|
1005 |
+
'static' => true,
|
1006 |
+
'type' => 'header'
|
1007 |
+
),
|
1008 |
+
'body' => array(
|
1009 |
+
'block-1' => array(
|
1010 |
+
'text' => array(
|
1011 |
+
'value' => '<h3 class="align-right">'.sprintf(__("The posts below were added with the widget %sAutomatic latest content%s", WYSIJA), '<strong>', '</strong>').'</h3>'
|
1012 |
+
),
|
1013 |
+
'image' => array(
|
1014 |
+
'src' => WYSIJA_EDITOR_IMG.'default-newsletter/autonewsletter/arrow-up.png',
|
1015 |
+
'width' => 45,
|
1016 |
+
'height' => 45,
|
1017 |
+
'alignment' => 'right',
|
1018 |
+
'static' => false
|
1019 |
+
),
|
1020 |
+
'alignment' => 'right',
|
1021 |
+
'static' => false,
|
1022 |
+
'position' => '1',
|
1023 |
+
'type' => 'content'
|
1024 |
+
),
|
1025 |
+
'block-2' => array(
|
1026 |
+
'text' => array(
|
1027 |
+
'value' => '<h3>'.sprintf(__('%sTo edit%s, mouse over to show edit button below.', WYSIJA), '<strong>', '</strong>').'</h3>'
|
1028 |
+
),
|
1029 |
+
'image' => array(
|
1030 |
+
'src' => WYSIJA_EDITOR_IMG.'default-newsletter/autonewsletter/arrow-down.png',
|
1031 |
+
'width' => 150,
|
1032 |
+
'height' => 53,
|
1033 |
+
'alignment' => 'left',
|
1034 |
+
'static' => false
|
1035 |
+
),
|
1036 |
+
'alignment' => 'left',
|
1037 |
+
'static' => false,
|
1038 |
+
'position' => '2',
|
1039 |
+
'type' => 'content'
|
1040 |
+
),
|
1041 |
+
'block-3' => array(
|
1042 |
+
'params' => $autopostParams,
|
1043 |
+
'position' => '3',
|
1044 |
+
'type' => 'auto-post'
|
1045 |
+
)
|
1046 |
+
),
|
1047 |
+
'footer' => array(
|
1048 |
+
'text' => NULL,
|
1049 |
+
'image' => array(
|
1050 |
+
'src' => WYSIJA_EDITOR_IMG.'transparent.png',
|
1051 |
+
'width' => 600,
|
1052 |
+
'height' => 86,
|
1053 |
+
'alignment' => 'center',
|
1054 |
+
'static' => true,
|
1055 |
+
),
|
1056 |
+
'alignment' => 'center',
|
1057 |
+
'static' => true,
|
1058 |
+
'type' => 'footer'
|
1059 |
+
)
|
1060 |
+
);
|
1061 |
+
|
1062 |
+
} else {
|
1063 |
+
if(!isset($emaildata['params'])) $emaildata['params']=array();
|
1064 |
+
$emaildata['params']['quickselection'] = array(
|
1065 |
+
'wp-301' => array(
|
1066 |
+
'identifier' => 'wp-301',
|
1067 |
+
'width' => 281,
|
1068 |
+
'height' => 190,
|
1069 |
+
'url' => WYSIJA_EDITOR_IMG.'default-newsletter/newsletter/pigeon.png',
|
1070 |
+
'thumb_url' => WYSIJA_EDITOR_IMG.'default-newsletter/newsletter/pigeon-150x150.png'
|
1071 |
+
)
|
1072 |
+
);
|
1073 |
+
// get solid divider
|
1074 |
+
$hDividers = WYSIJA::get('dividers', 'helper');
|
1075 |
+
$defaultDivider = $hDividers->getDefault();
|
1076 |
+
|
1077 |
+
// get bookmarks from iconset 2
|
1078 |
+
$hBookmarks = WYSIJA::get('bookmarks', 'helper');
|
1079 |
+
$bookmarks = $hBookmarks->getAllByIconset('medium', '02');
|
1080 |
+
|
1081 |
+
// sample data for regular newsletter
|
1082 |
+
$newwjdata = array(
|
1083 |
+
'version' => WYSIJA::get_version(),
|
1084 |
+
'header' => array(
|
1085 |
+
'text' => null,
|
1086 |
+
'image' => array(
|
1087 |
+
// 'src' => WYSIJA_EDITOR_IMG.'default-newsletter/newsletter/header.png',
|
1088 |
+
'src' => WYSIJA_EDITOR_IMG.'transparent.png',
|
1089 |
+
'width' => 600,
|
1090 |
+
'height' => 86,
|
1091 |
+
'alignment' => 'center',
|
1092 |
+
'static' => true
|
1093 |
+
),
|
1094 |
+
'alignment' => 'center',
|
1095 |
+
'static' => true,
|
1096 |
+
'type' => 'header'
|
1097 |
+
),
|
1098 |
+
'body' => array(
|
1099 |
+
'block-1' => array(
|
1100 |
+
'text' => array(
|
1101 |
+
'value' => '<h2><strong>'.__('Step 1:', WYSIJA).'</strong> '.__('hey, click on this text!', WYSIJA).'</h2>'.'<p>'.__('To edit, simply click on this block of text.', WYSIJA).'</p>'
|
1102 |
+
),
|
1103 |
+
'image' => null,
|
1104 |
+
'alignment' => 'left',
|
1105 |
+
'static' => false,
|
1106 |
+
'position' => 1,
|
1107 |
+
'type' => 'content'
|
1108 |
+
),
|
1109 |
+
'block-2' => array_merge(array(
|
1110 |
+
'position' => 2,
|
1111 |
+
'type' => 'divider'
|
1112 |
+
), $defaultDivider
|
1113 |
+
),
|
1114 |
+
'block-3' => array(
|
1115 |
+
'text' => array(
|
1116 |
+
'value' => '<h2><strong>'.__('Step 2:', WYSIJA).'</strong> '.__('play with this image', WYSIJA).'</h2>'
|
1117 |
+
),
|
1118 |
+
'image' => null,
|
1119 |
+
'alignment' => 'left',
|
1120 |
+
'static' => false,
|
1121 |
+
'position' => 3,
|
1122 |
+
'type' => 'content'
|
1123 |
+
),
|
1124 |
+
'block-4' => array(
|
1125 |
+
'text' => array(
|
1126 |
+
'value' => '<p>'.__('Position your mouse over the image to the left.', WYSIJA).'</p>'
|
1127 |
+
),
|
1128 |
+
'image' => array(
|
1129 |
+
'src' => WYSIJA_EDITOR_IMG.'default-newsletter/newsletter/pigeon.png',
|
1130 |
+
'width' => 281,
|
1131 |
+
'height' => 190,
|
1132 |
+
'alignment' => 'left',
|
1133 |
+
'static' => false
|
1134 |
+
),
|
1135 |
+
'alignment' => 'left',
|
1136 |
+
'static' => false,
|
1137 |
+
'position' => 4,
|
1138 |
+
'type' => 'content'
|
1139 |
+
),
|
1140 |
+
'block-5' => array_merge(array(
|
1141 |
+
'position' => 5,
|
1142 |
+
'type' => 'divider'
|
1143 |
+
), $defaultDivider
|
1144 |
+
),
|
1145 |
+
'block-6' => array(
|
1146 |
+
'text' => array(
|
1147 |
+
'value' => '<h2><strong>'.__('Step 3:', WYSIJA).'</strong> '.__('drop content here', WYSIJA).'</h2>'.
|
1148 |
+
'<p>'.sprintf(__('Drag and drop %1$stext, posts, dividers.%2$s Look on the right!', WYSIJA), '<strong>', '</strong>').'</p>'.
|
1149 |
+
'<p>'.sprintf(__('You can even %1$ssocial bookmarks%2$s like these:', WYSIJA), '<strong>', '</strong>').'</p>'
|
1150 |
+
),
|
1151 |
+
'image' => null,
|
1152 |
+
'alignment' => 'left',
|
1153 |
+
'static' => false,
|
1154 |
+
'position' => 6,
|
1155 |
+
'type' => 'content'
|
1156 |
+
),
|
1157 |
+
'block-7' => array(
|
1158 |
+
'width' => 184,
|
1159 |
+
'alignment' => 'center',
|
1160 |
+
'items' => array(
|
1161 |
+
array_merge(array(
|
1162 |
+
'url' => 'http://www.facebook.com/wysija',
|
1163 |
+
'alt' => 'Facebook',
|
1164 |
+
'cellWidth' => 61,
|
1165 |
+
'cellHeight' => 32
|
1166 |
+
), $bookmarks['facebook']),
|
1167 |
+
array_merge(array(
|
1168 |
+
'url' => 'http://www.twitter.com/wysija',
|
1169 |
+
'alt' => 'Twitter',
|
1170 |
+
'cellWidth' => 61,
|
1171 |
+
'cellHeight' => 32
|
1172 |
+
), $bookmarks['twitter']),
|
1173 |
+
array_merge(array(
|
1174 |
+
'url' => 'https://plus.google.com/104749849451537343615',
|
1175 |
+
'alt' => 'Google',
|
1176 |
+
'cellWidth' => 61,
|
1177 |
+
'cellHeight' => 32
|
1178 |
+
), $bookmarks['google'])
|
1179 |
+
),
|
1180 |
+
'position' => 7,
|
1181 |
+
'type' => 'gallery'
|
1182 |
+
),
|
1183 |
+
'block-8' => array_merge(array(
|
1184 |
+
'position' => 8,
|
1185 |
+
'type' => 'divider'
|
1186 |
+
), $defaultDivider
|
1187 |
+
),
|
1188 |
+
'block-9' => array(
|
1189 |
+
'text' => array(
|
1190 |
+
'value' => '<h2><strong>'.__('Step 4:', WYSIJA).'</strong> '.__('and the footer?', WYSIJA).'</h2>'.
|
1191 |
+
'<p>'.sprintf(__('Change the footer\'s content in Wysija\'s %1$sSettings%2$s page.', WYSIJA), '<strong>', '</strong>').'</p>'
|
1192 |
+
),
|
1193 |
+
'image' => null,
|
1194 |
+
'alignment' => 'left',
|
1195 |
+
'static' => false,
|
1196 |
+
'position' => 9,
|
1197 |
+
'type' => 'content'
|
1198 |
+
)
|
1199 |
+
),
|
1200 |
+
'footer' => array(
|
1201 |
+
'text' => NULL,
|
1202 |
+
'image' => array(
|
1203 |
+
// 'src' => WYSIJA_EDITOR_IMG.'default-newsletter/newsletter/footer.png',
|
1204 |
+
'src' => WYSIJA_EDITOR_IMG.'transparent.png',
|
1205 |
+
'width' => 600,
|
1206 |
+
'height' => 86,
|
1207 |
+
'alignment' => 'center',
|
1208 |
+
'static' => true,
|
1209 |
+
),
|
1210 |
+
'alignment' => 'center',
|
1211 |
+
'static' => true,
|
1212 |
+
'type' => 'footer'
|
1213 |
+
)
|
1214 |
+
);
|
1215 |
+
}
|
1216 |
+
|
1217 |
+
// set default styles
|
1218 |
+
$helper_engine = WYSIJA::get('wj_engine', 'helper');
|
1219 |
+
$styles = $helper_engine->getDefaultStyles();
|
1220 |
+
|
1221 |
+
$model_config = WYSIJA::get('config', 'model');
|
1222 |
+
$default_theme = $model_config->getValue('newsletter_default_theme', 'default');
|
1223 |
+
|
1224 |
+
$helper_themes = WYSIJA::get('themes', 'helper');
|
1225 |
+
$theme_data = $helper_themes->getData($default_theme);
|
1226 |
+
|
1227 |
+
if($theme_data['header'] !== null) {
|
1228 |
+
$newwjdata['header'] = $theme_data['header'];
|
1229 |
+
}
|
1230 |
+
if($theme_data['footer'] !== null) {
|
1231 |
+
$newwjdata['footer'] = $theme_data['footer'];
|
1232 |
+
}
|
1233 |
+
// end - set default styles
|
1234 |
+
|
1235 |
+
$emaildata['wj_data'] = base64_encode(serialize($newwjdata));
|
1236 |
+
$emaildata['wj_styles'] = base64_encode(serialize($styles));
|
1237 |
+
|
1238 |
+
$email_id=$data['email']['email_id']=$modelEmail->insert($emaildata);
|
1239 |
+
|
1240 |
+
$this->notice(__('Newsletter successfully created.',WYSIJA));
|
1241 |
+
}
|
1242 |
+
|
1243 |
+
$this->_saveLists($campaign_id,true);
|
1244 |
+
|
1245 |
+
if(isset($_REQUEST['return'])) $this->redirect();
|
1246 |
+
else {
|
1247 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=editTemplate&id='.$email_id);
|
1248 |
+
}
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
function saveemail(){
|
1252 |
+
$this->redirectAfterSave=false;
|
1253 |
+
//$this->requireSecurity();
|
1254 |
+
$modelEmail=WYSIJA::get("email","model");
|
1255 |
+
$modelEmail->fieldValid=false;
|
1256 |
+
$emaildataarr=$modelEmail->getOne(array('email_id'=>$_REQUEST['id']));
|
1257 |
+
|
1258 |
+
if(isset($_REQUEST['save-reactivate'])){
|
1259 |
+
//if the button save and reactivate has been clicked then we reactivate and redirect to the newsletter page
|
1260 |
+
$dataEmail['status']=99;
|
1261 |
+
$_REQUEST['return']=1;
|
1262 |
+
}
|
1263 |
+
|
1264 |
+
if(isset($_REQUEST['return'])) $this->redirect();
|
1265 |
+
else {
|
1266 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=editDetails&id='.$emaildataarr['email_id']);
|
1267 |
+
}
|
1268 |
+
}
|
1269 |
+
|
1270 |
+
|
1271 |
+
function savelast(){
|
1272 |
+
$this->redirectAfterSave=false;
|
1273 |
+
$post_notification=false;
|
1274 |
+
$this->requireSecurity();
|
1275 |
+
|
1276 |
+
if(!isset($_POST['wysija']['email']['from_name'])|| !isset($_POST['wysija']['email']['from_email']) || !isset($_POST['wysija']['email']['replyto_name']) || !isset($_POST['wysija']['email']['replyto_email'])){
|
1277 |
+
$this->error(__('Information is missing.',WYSIJA));
|
1278 |
+
return $this->editDetails();
|
1279 |
+
}
|
1280 |
+
if(isset($_REQUEST['wysija']['email']['params']['googletrackingcode']) && $_REQUEST['wysija']['email']['params']['googletrackingcode'] &&
|
1281 |
+
(!is_string($_REQUEST['wysija']['email']['params']['googletrackingcode'])
|
1282 |
+
OR
|
1283 |
+
preg_match('#[^a-z0-9_-\s]#i',$_REQUEST['wysija']['email']['params']['googletrackingcode']) !== 0 )){
|
1284 |
+
//force to simple text
|
1285 |
+
$_REQUEST['wysija']['email']['params']['googletrackingcode']=preg_replace('#[^a-z0-9_-\s]#i', '_',$_REQUEST['wysija']['email']['params']['googletrackingcode']);
|
1286 |
+
$this->error(__('The Google Campaign name needs to be only letters, number, spaces and hyphens. We\'ll improve this in the future!',WYSIJA),1);
|
1287 |
+
return $this->editDetails();
|
1288 |
+
}
|
1289 |
+
|
1290 |
+
$update_email=array(
|
1291 |
+
'email_id'=>$_POST['wysija']['email']['email_id'],
|
1292 |
+
'from_name'=>$_POST['wysija']['email']['from_name'],
|
1293 |
+
'from_email'=>$_POST['wysija']['email']['from_email'],
|
1294 |
+
'replyto_name'=>$_POST['wysija']['email']['replyto_name'],
|
1295 |
+
'replyto_email'=>$_POST['wysija']['email']['replyto_email'],
|
1296 |
+
'subject'=>$_POST['wysija']['email']['subject'],
|
1297 |
+
);
|
1298 |
+
$model_email=WYSIJA::get('email','model');
|
1299 |
+
if(isset($_POST['wysija']['email']['params'])) $update_email['params']=$_POST['wysija']['email']['params'];
|
1300 |
+
|
1301 |
+
//insert into campaigns lists
|
1302 |
+
$this->_saveLists($_POST['wysija']['campaign']['campaign_id']);
|
1303 |
+
$email_data=$model_email->getOne($_POST['wysija']['email']['email_id']);
|
1304 |
+
|
1305 |
+
// if we just save the draf we don't go through the big sending process setup
|
1306 |
+
if(isset($_POST['submit-draft']) || isset($_POST['submit-pause']) || (isset($_REQUEST['wj_redir']) && $_REQUEST['wj_redir']=='savelastback')){
|
1307 |
+
if(isset($_POST['wysija']['email']['params']['schedule']['isscheduled'])) $this->notice(__('Newsletter has been scheduled.',WYSIJA));
|
1308 |
+
else $this->notice(__('Newsletter has been saved as a draft.',WYSIJA));
|
1309 |
+
}else{
|
1310 |
+
// we update the param attribute with what's has been posted
|
1311 |
+
foreach($update_email as $ki =>$vi) {
|
1312 |
+
if($ki=='params'){
|
1313 |
+
foreach($vi as $parake=>$paraval){
|
1314 |
+
$email_data['params'][$parake]=$paraval;
|
1315 |
+
}
|
1316 |
+
$update_email[$ki]=$email_data[$ki];
|
1317 |
+
}else $email_data[$ki]=$vi;
|
1318 |
+
}
|
1319 |
+
|
1320 |
+
// if the checkbox to ignore retroactivity is here we just tell the class
|
1321 |
+
if(isset($_POST['wysija']['email']['ignore_subscribers'])){
|
1322 |
+
$model_email->retro_active_autoresponders=false;
|
1323 |
+
}
|
1324 |
+
|
1325 |
+
// activate or send the email depending on the typ
|
1326 |
+
$model_email->send_activate($email_data);
|
1327 |
+
}
|
1328 |
+
|
1329 |
+
// update email
|
1330 |
+
$update_email['type']=$email_data['type'];
|
1331 |
+
|
1332 |
+
if($post_notification){
|
1333 |
+
$helper_autonews=WYSIJA::get('autonews','helper');
|
1334 |
+
$update_email['params']['autonl']['nextSend']=$helper_autonews->getNextSend($update_email);
|
1335 |
+
}
|
1336 |
+
|
1337 |
+
$model_email->reset();
|
1338 |
+
$model_email->columns['modified_at']['autoup']=1;
|
1339 |
+
|
1340 |
+
// update some fields of the email
|
1341 |
+
$model_email->update($update_email);
|
1342 |
+
|
1343 |
+
// update the campaign subject which ispretty much useless but good to keep in sync with the email
|
1344 |
+
$model_campaign=WYSIJA::get('campaign','model');
|
1345 |
+
$model_campaign->reset();
|
1346 |
+
$update_campaign=array('campaign_id'=>$_REQUEST['id'],'name'=>$_POST['wysija']['email']['subject']);
|
1347 |
+
$model_campaign->update($update_campaign);
|
1348 |
+
|
1349 |
+
if(isset($_REQUEST['wj_redir']) && $_REQUEST['wj_redir']=='savelastback'){
|
1350 |
+
return $this->redirect('admin.php?page=wysija_campaigns&action=editTemplate&id='.$_POST['wysija']['email']['email_id']);
|
1351 |
+
} else return $this->redirect();
|
1352 |
+
}
|
1353 |
+
|
1354 |
+
|
1355 |
+
function _saveLists($campaignId,$flagup=false){
|
1356 |
+
//record the list that we have in that campaign
|
1357 |
+
$modelCampL=WYSIJA::get('campaign_list','model');
|
1358 |
+
if($flagup || (int)$campaignId>0){
|
1359 |
+
$modelCampL->delete(array('equal'=>array('campaign_id'=>$campaignId)));
|
1360 |
+
$modelCampL->reset();
|
1361 |
+
}
|
1362 |
+
|
1363 |
+
if(isset($_POST['wysija']['campaign_list']['list_id'])){
|
1364 |
+
//$modelCampL=WYSIJA::get("campaign_list","model");
|
1365 |
+
foreach($_POST['wysija']['campaign_list']['list_id'] as $listid){
|
1366 |
+
$modelCampL->insert(array('campaign_id'=>$campaignId,"list_id"=>$listid));
|
1367 |
+
}
|
1368 |
+
}
|
1369 |
+
}
|
1370 |
+
|
1371 |
+
|
1372 |
+
function _addLinkFilter($status,$type='status'){
|
1373 |
+
switch($type){
|
1374 |
+
case 'status':
|
1375 |
+
switch($status){
|
1376 |
+
case 'draft':
|
1377 |
+
$this->filters['equal']=array('status'=>0);
|
1378 |
+
break;
|
1379 |
+
case 'sending':
|
1380 |
+
$this->filters['equal']=array('status'=>99);
|
1381 |
+
break;
|
1382 |
+
case 'sent':
|
1383 |
+
$this->filters['equal']=array('status'=>2);
|
1384 |
+
break;
|
1385 |
+
case 'paused':
|
1386 |
+
$this->filters['equal']=array('status'=>-1);
|
1387 |
+
break;
|
1388 |
+
case 'scheduled':
|
1389 |
+
$this->filters['equal']=array('status'=>4);
|
1390 |
+
break;
|
1391 |
+
}
|
1392 |
+
break;
|
1393 |
+
case 'type':
|
1394 |
+
switch($status){
|
1395 |
+
case 'regular':
|
1396 |
+
$this->filters['equal']=array('type'=>1);
|
1397 |
+
break;
|
1398 |
+
case 'autonl':
|
1399 |
+
$this->filters['equal']=array('type'=>2);
|
1400 |
+
break;
|
1401 |
+
}
|
1402 |
+
break;
|
1403 |
+
}
|
1404 |
+
}
|
1405 |
+
|
1406 |
+
function defaultDisplay(){
|
1407 |
+
$this->data['base_url'] = $this->base_url.'?'.http_build_query($_REQUEST); // saved filter
|
1408 |
+
$this->title=__('Newsletters',WYSIJA);
|
1409 |
+
$this->viewShow=$this->action='main';
|
1410 |
+
$this->js[]='wysija-admin-list';
|
1411 |
+
$this->jsTrans["selecmiss"]=__('Please select a newsletter.',WYSIJA);
|
1412 |
+
$this->jsTrans['suredelete']=__('Delete this newsletter for ever?',WYSIJA);
|
1413 |
+
$this->jsTrans['processqueue']=__('Sending batch of emails...',WYSIJA);
|
1414 |
+
$this->jsTrans['viewnews']=__('View newsletter',WYSIJA);
|
1415 |
+
$this->jsTrans['confirmpauseedit']=__('The newsletter will be deactivated, you will need to reactivate it once you\'re over editing it. Do you want to proceed?',WYSIJA);
|
1416 |
+
|
1417 |
+
//get the filters
|
1418 |
+
if(isset($_REQUEST['search']) && $_REQUEST['search']){
|
1419 |
+
$this->filters['like']=array();
|
1420 |
+
foreach($this->searchable as $field)
|
1421 |
+
$this->filters['like'][$field]=$_REQUEST['search'];
|
1422 |
+
}
|
1423 |
+
|
1424 |
+
if(isset($_REQUEST['filter-list']) && $_REQUEST['filter-list']){
|
1425 |
+
$this->filters['equal']=array('C.list_id'=>$_REQUEST['filter-list']);
|
1426 |
+
}
|
1427 |
+
|
1428 |
+
if(isset($_REQUEST['filter-date']) && $_REQUEST['filter-date']){
|
1429 |
+
$this->filters['greater_eq']=array('created_at'=>$_REQUEST['filter-date']);
|
1430 |
+
$this->filters['less_eq']=array('created_at'=>strtotime('+1 month',$_REQUEST['filter-date']));
|
1431 |
+
}
|
1432 |
+
|
1433 |
+
$this->filters['is'] = array('type'=>'IS NOT NULL');
|
1434 |
+
|
1435 |
+
|
1436 |
+
if(isset($_REQUEST['link_filter']) && $_REQUEST['link_filter']){
|
1437 |
+
$linkfilters=explode('-',$_REQUEST['link_filter']);
|
1438 |
+
|
1439 |
+
if(count($linkfilters)>1){
|
1440 |
+
$this->_addLinkFilter($linkfilters[1],$linkfilters[0]);
|
1441 |
+
}else{
|
1442 |
+
$this->_addLinkFilter($_REQUEST['link_filter']);
|
1443 |
+
}
|
1444 |
+
}
|
1445 |
+
|
1446 |
+
$this->modelObj->noCheck=true;
|
1447 |
+
|
1448 |
+
// 0 - counting request
|
1449 |
+
$queryCmmonStart="SELECT count(distinct A.campaign_id) as campaigns FROM `[wysija]".$this->modelObj->table_name."` as A";
|
1450 |
+
$queryCmmonStart.=' LEFT JOIN `[wysija]email` as B on A.campaign_id=B.campaign_id';
|
1451 |
+
$queryCmmonStart.=' LEFT JOIN `[wysija]campaign_list` as C on A.campaign_id=C.campaign_id';
|
1452 |
+
|
1453 |
+
// all the counts query
|
1454 |
+
$query='SELECT count(email_id) as campaigns, status FROM `[wysija]email` WHERE campaign_id > 0 GROUP BY status';
|
1455 |
+
|
1456 |
+
$countss=$this->modelObj->query('get_res',$query,ARRAY_A);
|
1457 |
+
$counts=array();
|
1458 |
+
$total=0;
|
1459 |
+
|
1460 |
+
foreach($countss as $count){
|
1461 |
+
switch($count['status']){
|
1462 |
+
case '0':
|
1463 |
+
$type='draft';
|
1464 |
+
break;
|
1465 |
+
case '1':
|
1466 |
+
case '3':
|
1467 |
+
case '99':
|
1468 |
+
$type='sending';
|
1469 |
+
break;
|
1470 |
+
case '2':
|
1471 |
+
$type='sent';
|
1472 |
+
break;
|
1473 |
+
case '-1':
|
1474 |
+
$type='paused';
|
1475 |
+
break;
|
1476 |
+
case '4':
|
1477 |
+
$type='scheduled';
|
1478 |
+
break;
|
1479 |
+
}
|
1480 |
+
$total=$total+$count['campaigns'];
|
1481 |
+
$counts['status-'.$type]=$count['campaigns'];
|
1482 |
+
}
|
1483 |
+
|
1484 |
+
|
1485 |
+
$query='SELECT count(email_id) as campaigns, type FROM `[wysija]email` WHERE campaign_id > 0 GROUP BY type';
|
1486 |
+
$countss=$this->modelObj->query('get_res',$query,ARRAY_A);
|
1487 |
+
foreach($countss as $count){
|
1488 |
+
switch($count['type']){
|
1489 |
+
case '1':
|
1490 |
+
$type='regular';
|
1491 |
+
break;
|
1492 |
+
case '2':
|
1493 |
+
$type='autonl';
|
1494 |
+
break;
|
1495 |
+
}
|
1496 |
+
$counts['type-'.$type]=$count['campaigns'];
|
1497 |
+
}
|
1498 |
+
|
1499 |
+
$counts['all']=$total;
|
1500 |
+
|
1501 |
+
$this->modelObj->reset();
|
1502 |
+
if($this->filters) $this->modelObj->setConditions($this->filters);
|
1503 |
+
|
1504 |
+
// 1 - campaign request
|
1505 |
+
$query='SELECT A.campaign_id, A.name as campaign_name, B.subject as name, A.description, B.params , B.type , B.number_opened,B.number_clicked,B.number_unsub,B.status,B.status,B.created_at,B.modified_at,B.sent_at,B.email_id FROM `[wysija]'.$this->modelObj->table_name.'` as A';
|
1506 |
+
$query.=' LEFT JOIN `[wysija]email` as B on A.campaign_id=B.campaign_id';
|
1507 |
+
$query.=' LEFT JOIN `[wysija]campaign_list` as C on A.campaign_id=C.campaign_id';
|
1508 |
+
$queryFinal=$this->modelObj->makeWhere();
|
1509 |
+
|
1510 |
+
|
1511 |
+
//campaign created the longest ago
|
1512 |
+
$query2='SELECT MIN(B.created_at) as datemin FROM `[wysija]'.$this->modelObj->table_name.'` as A';
|
1513 |
+
$query2.=' LEFT JOIN `[wysija]email` as B on A.campaign_id=B.campaign_id';
|
1514 |
+
$query2.=' LEFT JOIN `[wysija]campaign_list` as C on A.campaign_id=C.campaign_id';
|
1515 |
+
$queryFinal2=$this->modelObj->makeWhere();
|
1516 |
+
|
1517 |
+
//without filter we already have the total number of campaigns
|
1518 |
+
|
1519 |
+
if($this->filters) $this->modelObj->countRows=$this->modelObj->count($queryCmmonStart.$queryFinal,'campaigns');
|
1520 |
+
else $this->modelObj->countRows=$counts['all'];
|
1521 |
+
|
1522 |
+
$orderby=' ORDER BY ';
|
1523 |
+
|
1524 |
+
if(isset($_REQUEST['orderby'])){
|
1525 |
+
if(!is_string($_REQUEST['orderby']) OR preg_match('|[^a-z0-9#_.-]|i',$_REQUEST['orderby']) !== 0 ){
|
1526 |
+
$_REQUEST['orderby']='';
|
1527 |
+
}
|
1528 |
+
if(!in_array(strtoupper($_REQUEST['ordert']),array('DESC','ASC'))) $_REQUEST['ordert'] = 'DESC';
|
1529 |
+
$orderby.=$_REQUEST['orderby'].' '.$_REQUEST['ordert'];
|
1530 |
+
}else{
|
1531 |
+
$orderby=' ORDER BY ';
|
1532 |
+
$orderby.='FIELD(B.status, 99,3,1,0,2), ';
|
1533 |
+
$orderby.='B.status desc, ';
|
1534 |
+
$orderby.='B.modified_at desc, ';
|
1535 |
+
$orderby.='B.sent_at desc, ';
|
1536 |
+
$orderby.='B.type desc, ';
|
1537 |
+
|
1538 |
+
$orderby.='A.'.$this->modelObj->getPk().' desc';
|
1539 |
+
}
|
1540 |
+
|
1541 |
+
|
1542 |
+
//$this->data['campaigns']=$this->modelObj->getResults($query.$queryFinal." GROUP BY A.campaign_id".$orderby.$this->modelObj->setLimit());
|
1543 |
+
$this->data['campaigns']=$this->modelObj->getResults($query.$queryFinal.' GROUP BY B.email_id'.$orderby.$this->modelObj->setLimit());
|
1544 |
+
//dbg($this->data['campaigns']);
|
1545 |
+
$emailids=array();
|
1546 |
+
foreach($this->data['campaigns'] as $emailcamp){
|
1547 |
+
if(in_array($emailcamp['status'], array(1,3,99))) $emailids[]=$emailcamp['email_id'];
|
1548 |
+
}
|
1549 |
+
$modelQ=WYSIJA::get('queue','model');
|
1550 |
+
$modelQ->setConditions(array("email_id"=>$emailids));
|
1551 |
+
$modelQ->groupBy('email_id');
|
1552 |
+
$queue=$modelQ->count();
|
1553 |
+
if($queue){
|
1554 |
+
$this->viewObj->queuedemails=$queue;
|
1555 |
+
}
|
1556 |
+
|
1557 |
+
$this->modelObj->reset();
|
1558 |
+
|
1559 |
+
$this->data['datemin']=$this->modelObj->query('get_row',$query2.$queryFinal2);
|
1560 |
+
$this->modelObj->reset();
|
1561 |
+
|
1562 |
+
//make a loop from the first created to now and increment an array of months
|
1563 |
+
$now=time();
|
1564 |
+
$this->data['dates']=array();
|
1565 |
+
|
1566 |
+
if((int)$this->data['datemin']['datemin']>1){
|
1567 |
+
setlocale(LC_TIME, 'en_US');
|
1568 |
+
$firstdayof=getdate($this->data['datemin']['datemin']);
|
1569 |
+
|
1570 |
+
$formtlettres="1 ".date("F",$this->data['datemin']['datemin'])." ".date("Y",$this->data['datemin']['datemin']) ;
|
1571 |
+
$monthstart=strtotime($formtlettres);
|
1572 |
+
|
1573 |
+
if($monthstart>0){
|
1574 |
+
for($i=$monthstart;$i<$now;$i=strtotime('+1 month',$i)){
|
1575 |
+
$this->data['dates'][$i]=date_i18n('F Y',$i);//date('F Y',$i);
|
1576 |
+
}
|
1577 |
+
}
|
1578 |
+
|
1579 |
+
}
|
1580 |
+
|
1581 |
+
//make the data object for the listing view*/
|
1582 |
+
$modelList=WYSIJA::get('list','model');
|
1583 |
+
|
1584 |
+
// 2 - list request */
|
1585 |
+
$query='SELECT A.list_id, A.name,A.is_enabled, count( B.campaign_id ) AS users FROM `[wysija]'.$modelList->table_name.'` as A';
|
1586 |
+
$query.=' LEFT JOIN `[wysija]campaign_list` as B on A.list_id = B.list_id';
|
1587 |
+
$query.=' GROUP BY A.list_id';
|
1588 |
+
$listsDB=$modelList->getResults($query);
|
1589 |
+
|
1590 |
+
$lists=array();
|
1591 |
+
foreach($listsDB as $listobj){
|
1592 |
+
$lists[$listobj["list_id"]]=$listobj;
|
1593 |
+
}
|
1594 |
+
|
1595 |
+
$listsDB=null;
|
1596 |
+
|
1597 |
+
$campaign_ids_sent=$campaign_ids=array();
|
1598 |
+
foreach($this->data['campaigns'] as &$campaign){
|
1599 |
+
$campaign_ids[]=$campaign['campaign_id'];
|
1600 |
+
$modelEmail=WYSIJA::get('email','model');
|
1601 |
+
$modelEmail->getParams($campaign);
|
1602 |
+
if(in_array((int)$campaign['status'],array(-1,1,2,3,99))) $campaign_ids_sent[]=$campaign['campaign_id'];
|
1603 |
+
}
|
1604 |
+
|
1605 |
+
// 3 - campaign_list request & count request for queue */
|
1606 |
+
if($campaign_ids){
|
1607 |
+
$modeluList=WYSIJA::get('campaign_list','model');
|
1608 |
+
$userlists=$modeluList->get(array('list_id','campaign_id'),array('campaign_id'=>$campaign_ids));
|
1609 |
+
|
1610 |
+
if($campaign_ids_sent){
|
1611 |
+
$modeluList=WYSIJA::get("email_user_stat","model");
|
1612 |
+
$statstotal=$modeluList->getResults("SELECT COUNT(A.user_id) as count,B.email_id FROM `[wysija]queue` as A
|
1613 |
+
JOIN `[wysija]email` as B on A.email_id=B.email_id
|
1614 |
+
WHERE B.campaign_id IN (".implode(",",$campaign_ids_sent).") group by B.email_id");
|
1615 |
+
|
1616 |
+
$senttotalgroupedby=$modeluList->getResults("SELECT COUNT(A.user_id) as count,B.campaign_id,B.email_id,B.type,B.status,A.status as statususer FROM `[wysija]".$modeluList->table_name."` as A
|
1617 |
+
JOIN `[wysija]email` as B on A.email_id=B.email_id
|
1618 |
+
WHERE B.campaign_id IN (".implode(",",$campaign_ids_sent).") group by A.status,B.email_id");//,A.status
|
1619 |
+
|
1620 |
+
|
1621 |
+
$updateEmail=array();
|
1622 |
+
$columnnamestatus=array(0=>"number_sent",1=>"number_opened",2=>"number_clicked",3=>"number_unsub",-1=>"number_bounce");
|
1623 |
+
foreach($senttotalgroupedby as $sentbystatus){
|
1624 |
+
if($sentbystatus['statususer']!="-2") $updateEmail[$sentbystatus['email_id']][$columnnamestatus[$sentbystatus['statususer']]]=$sentbystatus['count'];
|
1625 |
+
if(isset($senttotal[$sentbystatus['email_id']])){
|
1626 |
+
$senttotal[$sentbystatus['email_id']]['count']=(int)$senttotal[$sentbystatus['email_id']]['count']+(int)$sentbystatus['count'];
|
1627 |
+
}else{
|
1628 |
+
unset($sentbystatus['statususer']);
|
1629 |
+
$senttotal[$sentbystatus['email_id']]=$sentbystatus;
|
1630 |
+
}
|
1631 |
+
}
|
1632 |
+
|
1633 |
+
$modelEmail=WYSIJA::get('email','model');
|
1634 |
+
|
1635 |
+
foreach($updateEmail as $emailid=>$update){
|
1636 |
+
|
1637 |
+
foreach($columnnamestatus as $v){
|
1638 |
+
if(!isset($update[$v])) $update[$v]=0;
|
1639 |
+
}
|
1640 |
+
|
1641 |
+
$modelEmail->update($update,array('email_id'=>$emailid));
|
1642 |
+
$modelEmail->reset();
|
1643 |
+
}
|
1644 |
+
|
1645 |
+
|
1646 |
+
/**/
|
1647 |
+
$modelC=WYSIJA::get('config','model');
|
1648 |
+
$running=false;
|
1649 |
+
|
1650 |
+
$is_multisite=is_multisite();
|
1651 |
+
|
1652 |
+
//$is_multisite=true;//PROD comment that line
|
1653 |
+
if($is_multisite && $modelC->getValue('sending_method')=='network'){
|
1654 |
+
$sending_emails_each=$modelC->getValue('ms_sending_emails_each');
|
1655 |
+
}else{
|
1656 |
+
$sending_emails_each=$modelC->getValue('sending_emails_each');
|
1657 |
+
}
|
1658 |
+
|
1659 |
+
if($modelC->getValue('cron_manual')){
|
1660 |
+
$formsHelp=WYSIJA::get('forms','helper');
|
1661 |
+
$queue_frequency=$formsHelp->eachValuesSec[$sending_emails_each];
|
1662 |
+
$queue_scheduled=WYSIJA::get_cron_schedule('queue');
|
1663 |
+
|
1664 |
+
$next_scheduled_queue=$queue_scheduled['next_schedule'];
|
1665 |
+
$running=$queue_scheduled['running'];
|
1666 |
+
|
1667 |
+
if($running){
|
1668 |
+
$helperToolbox=WYSIJA::get('toolbox','helper');
|
1669 |
+
$running=time()-$running;
|
1670 |
+
$running=$helperToolbox->duration($running,true,4);
|
1671 |
+
|
1672 |
+
}
|
1673 |
+
}else{
|
1674 |
+
$schedules=wp_get_schedules();
|
1675 |
+
$queue_frequency=$schedules[wp_get_schedule('wysija_cron_queue')]['interval'];
|
1676 |
+
$next_scheduled_queue=wp_next_scheduled('wysija_cron_queue');
|
1677 |
+
}
|
1678 |
+
|
1679 |
+
|
1680 |
+
|
1681 |
+
$status_sent_complete=array();
|
1682 |
+
if(isset($senttotal) && $senttotal){
|
1683 |
+
foreach($senttotal as $sentot){
|
1684 |
+
if($sentot){
|
1685 |
+
$this->data['sent'][$sentot['email_id']]['total']=$sentot['count'];
|
1686 |
+
$this->data['sent'][$sentot['email_id']]['to']=$sentot['count'];
|
1687 |
+
}else{
|
1688 |
+
$this->data['sent'][$sentot['email_id']]['total']=$this->data['sent'][$sentot['email_id']]['to']=0;
|
1689 |
+
}
|
1690 |
+
$this->data['sent'][$sentot['email_id']]['status']=$sentot['status'];
|
1691 |
+
$this->data['sent'][$sentot['email_id']]['type']=$sentot['type'];
|
1692 |
+
$this->data['sent'][$sentot['email_id']]['left']= (int)$this->data['sent'][$sentot['email_id']]['total'] - (int)$this->data['sent'][$sentot['email_id']]['to'];
|
1693 |
+
}
|
1694 |
+
}
|
1695 |
+
|
1696 |
+
foreach($statstotal as $sentot){
|
1697 |
+
if(!isset($this->data['sent'][$sentot['email_id']])) {
|
1698 |
+
$this->data['sent'][$sentot['email_id']]['total']=0;
|
1699 |
+
$this->data['sent'][$sentot['email_id']]['to']=0;
|
1700 |
+
}
|
1701 |
+
$this->data['sent'][$sentot['email_id']]['total']=$this->data['sent'][$sentot['email_id']]['total']+$sentot['count'];
|
1702 |
+
$this->data['sent'][$sentot['email_id']]['left']= (int)$this->data['sent'][$sentot['email_id']]['total'] - (int)$this->data['sent'][$sentot['email_id']]['to'];
|
1703 |
+
}
|
1704 |
+
|
1705 |
+
|
1706 |
+
$is_multisite=is_multisite();
|
1707 |
+
|
1708 |
+
//$is_multisite=true;//PROD comment that line
|
1709 |
+
if($is_multisite && $modelC->getValue('sending_method')=='network'){
|
1710 |
+
$sending_emails_number=$modelC->getValue('ms_sending_emails_number');
|
1711 |
+
}else{
|
1712 |
+
$sending_emails_number=$modelC->getValue('sending_emails_number');
|
1713 |
+
}
|
1714 |
+
|
1715 |
+
if(isset($this->data['sent'])){
|
1716 |
+
foreach($this->data['sent'] as $key => $camp){
|
1717 |
+
if($this->data['sent'][$key]['left']>0){
|
1718 |
+
$cronsneeded=ceil($this->data['sent'][$key]['left']/$sending_emails_number);
|
1719 |
+
$this->data['sent'][$key]['remaining_time']=$cronsneeded *$queue_frequency;
|
1720 |
+
$this->data['sent'][$key]['running_for']=$running;
|
1721 |
+
$this->data['sent'][$key]['next_batch']=$next_scheduled_queue-time();
|
1722 |
+
$this->data['sent'][$key]['remaining_time']=$this->data['sent'][$key]['remaining_time']-($queue_frequency)+$this->data['sent'][$key]['next_batch'];
|
1723 |
+
}else{
|
1724 |
+
if( (in_array($this->data['sent'][$key]['status'], array(1,3,99))) && $this->data['sent'][$key]['type']==1) $status_sent_complete[]=$key;
|
1725 |
+
}
|
1726 |
+
}
|
1727 |
+
}
|
1728 |
+
|
1729 |
+
|
1730 |
+
/* status update to sent for the one that are sent*/
|
1731 |
+
if(count($status_sent_complete)>0){
|
1732 |
+
$modelEmail=WYSIJA::get('email','model');
|
1733 |
+
$modelEmail->noCheck=true;
|
1734 |
+
$modelEmail->reset();
|
1735 |
+
$modelEmail->update(array('status'=>2),array('equal'=>array('email_id'=>$status_sent_complete)));
|
1736 |
+
}
|
1737 |
+
}
|
1738 |
+
}
|
1739 |
+
|
1740 |
+
$this->data['lists']=$lists;
|
1741 |
+
$this->data['counts']=array_reverse($counts);
|
1742 |
+
|
1743 |
+
/* regrouping all the data in the same array */
|
1744 |
+
foreach($this->data['campaigns'] as $keysus=>&$campaign){
|
1745 |
+
/* default key while we don't have the data*/
|
1746 |
+
//TODO add data for stats about emails opened clicked etc
|
1747 |
+
$campaign["emails"]=0;
|
1748 |
+
$campaign["opened"]=0;
|
1749 |
+
$campaign["clicked"]=0;
|
1750 |
+
|
1751 |
+
if($userlists){
|
1752 |
+
foreach($userlists as $key=>$userlist){
|
1753 |
+
if($campaign["campaign_id"]==$userlist["campaign_id"] && isset($lists[$userlist["list_id"]])){
|
1754 |
+
if(!isset($campaign["lists"]) ) $campaign["lists"]=$lists[$userlist["list_id"]]["name"];
|
1755 |
+
else $campaign["lists"].=", ".$lists[$userlist["list_id"]]["name"];
|
1756 |
+
}
|
1757 |
+
}
|
1758 |
+
}
|
1759 |
+
if(isset($campaign["lists"]) && !$campaign["lists"]) unset($campaign["lists"]);
|
1760 |
+
|
1761 |
+
if(((isset($campaign['params']['schedule']['isscheduled'])
|
1762 |
+
||
|
1763 |
+
($campaign['type']==2 && isset($campaign['params']['autonl']['event']) && in_array($campaign['params']['autonl']['event'],array('new-articles'/*,'subs-2-nl'*/)))
|
1764 |
+
)
|
1765 |
+
&& $campaign['status']!=2 && !isset($campaign["lists"]))
|
1766 |
+
|| ($campaign['type']==2 && isset($campaign['params']['autonl']['event']) && in_array($campaign['params']['autonl']['event'],array('subs-2-nl')) && $campaign['status']!=2 && (!isset($campaign['params']['autonl']['subscribetolist']) || !isset($lists[$campaign['params']['autonl']['subscribetolist']]) ))
|
1767 |
+
){
|
1768 |
+
$campaign['classRow']=" listmissing ";
|
1769 |
+
$campaign['msgListEdit']='<strong>'.__('The list has been deleted.',WYSIJA).'</strong>';
|
1770 |
+
$campaign['msgSendSuspended']='<strong>'.__('Sending suspended.',WYSIJA).'</strong>';
|
1771 |
+
}
|
1772 |
+
|
1773 |
+
|
1774 |
+
}
|
1775 |
+
|
1776 |
+
$this->dataAutoNl();
|
1777 |
+
if(!$this->data['campaigns']){
|
1778 |
+
$this->notice(__('There are no newsletters.',WYSIJA));
|
1779 |
+
}
|
1780 |
+
|
1781 |
+
}
|
1782 |
+
|
1783 |
+
|
1784 |
+
|
1785 |
+
function setviewStatsfilter(){
|
1786 |
+
/*get the filters*/
|
1787 |
+
$this->searchable=array("email", "firstname", "lastname");
|
1788 |
+
$this->filters=array();
|
1789 |
+
if(isset($_REQUEST['search']) && $_REQUEST['search']){
|
1790 |
+
$this->filters["like"]=array();
|
1791 |
+
foreach($this->searchable as $field)
|
1792 |
+
$this->filters["like"][$field]=$_REQUEST['search'];
|
1793 |
+
}
|
1794 |
+
$this->tableQuery='email_user_stat';
|
1795 |
+
$this->statusemail='B.status as umstatus';
|
1796 |
+
if(isset($_REQUEST['link_filter']) && $_REQUEST['link_filter']){
|
1797 |
+
switch($_REQUEST['link_filter']){
|
1798 |
+
case 'inqueue':
|
1799 |
+
$this->tableQuery='queue';
|
1800 |
+
$this->statusemail='-2 as umstatus';
|
1801 |
+
break;
|
1802 |
+
case 'sent':
|
1803 |
+
$this->filters['equal']=array('B.status'=>0);
|
1804 |
+
break;
|
1805 |
+
case 'bounced':
|
1806 |
+
$this->filters['equal']=array('B.status'=>-1);
|
1807 |
+
break;
|
1808 |
+
case 'opened':
|
1809 |
+
$this->filters['equal']=array('B.status'=>1);
|
1810 |
+
break;
|
1811 |
+
case 'clicked':
|
1812 |
+
$this->filters['equal']=array('B.status'=>2);
|
1813 |
+
break;
|
1814 |
+
case 'unsubscribe':
|
1815 |
+
$this->filters['equal']=array('B.status'=>3);
|
1816 |
+
break;
|
1817 |
+
case 'notsent':
|
1818 |
+
$this->filters['equal']=array('B.status'=>-2);
|
1819 |
+
break;
|
1820 |
+
}
|
1821 |
+
}
|
1822 |
+
// filter by url id
|
1823 |
+
if(isset($_REQUEST['url_id']) && (int)$_REQUEST['url_id'] > 0){
|
1824 |
+
$this->tableQuery='email_user_url';
|
1825 |
+
$this->filters['equal']=array('B.url_id'=>(int)$_REQUEST['url_id']);
|
1826 |
+
$this->statusemail = '2 as umstatus'; //by default, when filter by url_id, all subscribers had clicked
|
1827 |
+
}
|
1828 |
+
}
|
1829 |
+
|
1830 |
+
function viewstats(){
|
1831 |
+
$this->js[]='wysija-admin-list';
|
1832 |
+
$this->js[]='wysija-charts';
|
1833 |
+
$this->viewShow='viewstats';
|
1834 |
+
|
1835 |
+
$this->modelObj=WYSIJA::get("email","model");
|
1836 |
+
$this->modelObj->limitON=false;
|
1837 |
+
|
1838 |
+
$emailObj=$this->modelObj->getOne(false,array("email_id"=>$_REQUEST['id']));
|
1839 |
+
$this->viewObj->model=$this->modelObj;
|
1840 |
+
$this->viewObj->namecampaign=$emailObj['subject'];
|
1841 |
+
$this->viewObj->title=sprintf(__('Stats : %1$s',WYSIJA),$emailObj['subject']);
|
1842 |
+
|
1843 |
+
$modelObjCamp=WYSIJA::get("campaign","model");
|
1844 |
+
$limit_pp=false;
|
1845 |
+
if(isset($modelObjCamp->limit_pp)) $limit_pp = $modelObjCamp->limit_pp;
|
1846 |
+
$modelObjCamp->limitON=false;
|
1847 |
+
$campaign=$modelObjCamp->getOne(false,array("campaign_id"=>$emailObj['campaign_id']));
|
1848 |
+
|
1849 |
+
|
1850 |
+
$this->setviewStatsfilter();
|
1851 |
+
|
1852 |
+
$this->modelObj->reset();
|
1853 |
+
$this->modelObj->noCheck=true;
|
1854 |
+
|
1855 |
+
/* 0 - counting request */
|
1856 |
+
$queryCmmonStart='SELECT count(distinct B.user_id) as users FROM `[wysija]user` as A';
|
1857 |
+
$queryCmmonStart.=' LEFT JOIN `[wysija]'.$this->tableQuery.'` as B on A.user_id=B.user_id';
|
1858 |
+
|
1859 |
+
/* all the counts query */
|
1860 |
+
$query="SELECT count(user_id) as users, status FROM `[wysija]email_user_stat` as A
|
1861 |
+
WHERE A.email_id=".$emailObj['email_id']." GROUP BY status";
|
1862 |
+
$countss=$this->modelObj->query("get_res",$query,ARRAY_A);
|
1863 |
+
|
1864 |
+
/*we also count what is in the queue */
|
1865 |
+
$query="SELECT count(user_id) as users FROM `[wysija]queue` as A
|
1866 |
+
WHERE A.email_id=".$emailObj['email_id'];
|
1867 |
+
$countss[-2]['status']=-3;
|
1868 |
+
$countss[-2]['users']=$this->modelObj->count($query,'users');
|
1869 |
+
|
1870 |
+
$counts=array();
|
1871 |
+
$truetotal=$total=0;
|
1872 |
+
|
1873 |
+
foreach($countss as $count){
|
1874 |
+
switch($count['status']){
|
1875 |
+
case "-3":
|
1876 |
+
$type='inqueue';
|
1877 |
+
break;
|
1878 |
+
case "-2":
|
1879 |
+
$type='notsent';
|
1880 |
+
break;
|
1881 |
+
case "-1":
|
1882 |
+
$type='bounced';
|
1883 |
+
break;
|
1884 |
+
case "0":
|
1885 |
+
$type='sent';
|
1886 |
+
break;
|
1887 |
+
case "1":
|
1888 |
+
$type='opened';
|
1889 |
+
break;
|
1890 |
+
case "2":
|
1891 |
+
$type='clicked';
|
1892 |
+
break;
|
1893 |
+
case "3":
|
1894 |
+
$type='unsubscribe';
|
1895 |
+
break;
|
1896 |
+
}
|
1897 |
+
if($count['status']!="-2") $total=$total+$count['users'];
|
1898 |
+
$truetotal=$truetotal+$count['users'];
|
1899 |
+
$counts[$type]=$count['users'];
|
1900 |
+
}
|
1901 |
+
|
1902 |
+
$counts['allsent']=$total;
|
1903 |
+
$counts['all']=$truetotal;
|
1904 |
+
|
1905 |
+
$this->modelObj->reset();
|
1906 |
+
$this->filters['equal']["B.email_id"]=$emailObj['email_id'];
|
1907 |
+
|
1908 |
+
$this->modelObj->noCheck=true;
|
1909 |
+
if($this->filters) $this->modelObj->setConditions($this->filters);
|
1910 |
+
|
1911 |
+
//$this->modelObj->setConditions(array("equal"=>array("B.email_id"=>$emailObj['email_id'])));
|
1912 |
+
|
1913 |
+
/* 1 - subscriber request */
|
1914 |
+
$query='SELECT A.user_id, A.firstname, A.lastname,A.status as ustatus,'.$this->statusemail.' , A.email, B.* FROM `[wysija]user` as A';
|
1915 |
+
$query.=' LEFT JOIN `[wysija]'.$this->tableQuery.'` as B on A.user_id=B.user_id';
|
1916 |
+
$queryFinal=$this->modelObj->makeWhere();
|
1917 |
+
|
1918 |
+
/* without filter we already have the total number of subscribers */
|
1919 |
+
if($this->filters) $this->modelObj->countRows=$this->modelObj->count($queryCmmonStart.$queryFinal,'users');
|
1920 |
+
else $this->modelObj->countRows=$counts['all'];
|
1921 |
+
|
1922 |
+
$orderby=" ORDER BY ";
|
1923 |
+
/**
|
1924 |
+
* Until now, we have
|
1925 |
+
* - 3 possible values of $this->tableQuery (queue, email_user_url, email_user_stat), set by $this->setviewStatsfilter()
|
1926 |
+
* - 2 possible values of $_REQUEST['orderby']
|
1927 |
+
* => 3x2 = 6 cases
|
1928 |
+
*/
|
1929 |
+
if(isset($_REQUEST['orderby'])){
|
1930 |
+
switch ($this->tableQuery){
|
1931 |
+
case 'email_user_url':
|
1932 |
+
case 'email_user_stat':
|
1933 |
+
$orderby .= 'B.'.$_REQUEST['orderby']." ".$_REQUEST['ordert'];
|
1934 |
+
break;
|
1935 |
+
|
1936 |
+
case 'queue':
|
1937 |
+
default:
|
1938 |
+
$orderby .= 'A.user_id DESC';
|
1939 |
+
break;
|
1940 |
+
}
|
1941 |
+
}else{
|
1942 |
+
switch ($this->tableQuery){
|
1943 |
+
case 'email_user_url':
|
1944 |
+
$orderby .= 'B.clicked_at DESC, B.number_clicked DESC'; // by default, sort by last clicked and biggest hit
|
1945 |
+
break;
|
1946 |
+
|
1947 |
+
case 'email_user_stat':
|
1948 |
+
$orderby .= 'B.opened_at DESC, B.status DESC'; // by default, sort by last open and its staus value
|
1949 |
+
break;
|
1950 |
+
|
1951 |
+
case 'queue':
|
1952 |
+
default:
|
1953 |
+
$orderby .= 'A.user_id DESC';
|
1954 |
+
break;
|
1955 |
+
}
|
1956 |
+
}
|
1957 |
+
$this->data['tableQuery'] = $this->tableQuery;
|
1958 |
+
$this->modelObj->limitON=true;
|
1959 |
+
$this->data['subscribers']=$this->modelObj->getResults($query.$queryFinal." GROUP BY A.user_id".$orderby.$this->modelObj->setLimit(0,$limit_pp));
|
1960 |
+
$this->modelObj->reset();
|
1961 |
+
|
1962 |
+
/*make the data object for the listing view*/
|
1963 |
+
$modelList=WYSIJA::get("list","model");
|
1964 |
+
|
1965 |
+
/* 2 - list request */
|
1966 |
+
$query="SELECT A.list_id, A.name,A.is_enabled, count( B.user_id ) AS users FROM `[wysija]".$modelList->table_name."` as A";
|
1967 |
+
$query.=" LEFT JOIN `[wysija]user_list` as B on A.list_id = B.list_id";
|
1968 |
+
$query.=" GROUP BY A.list_id";
|
1969 |
+
$listsDB=$modelList->getResults($query);
|
1970 |
+
|
1971 |
+
$lists=array();
|
1972 |
+
foreach($listsDB as $listobj){
|
1973 |
+
$lists[$listobj["list_id"]]=$listobj;
|
1974 |
+
}
|
1975 |
+
|
1976 |
+
$listsDB=null;
|
1977 |
+
|
1978 |
+
$user_ids=array();
|
1979 |
+
foreach($this->data['subscribers'] as $subscriber){
|
1980 |
+
$user_ids[]=$subscriber['user_id'];
|
1981 |
+
}
|
1982 |
+
|
1983 |
+
/* 3 - user_list request */
|
1984 |
+
if($user_ids){
|
1985 |
+
$modeluList=WYSIJA::get("user_list","model");
|
1986 |
+
$userlists=$modeluList->get(array("list_id","user_id"),array("user_id"=>$user_ids));
|
1987 |
+
}
|
1988 |
+
|
1989 |
+
|
1990 |
+
$this->data['lists']=$lists;
|
1991 |
+
$this->data['counts']=array_reverse($counts);
|
1992 |
+
|
1993 |
+
/* regrouping all the data in the same array */
|
1994 |
+
foreach($this->data['subscribers'] as $keysus=>$subscriber){
|
1995 |
+
/* default key while we don't have the data*/
|
1996 |
+
//TODO add data for stats about emails opened clicked etc
|
1997 |
+
$this->data['subscribers'][$keysus]["emails"]=0;
|
1998 |
+
$this->data['subscribers'][$keysus]["opened"]=0;
|
1999 |
+
$this->data['subscribers'][$keysus]["clicked"]=0;
|
2000 |
+
|
2001 |
+
if($userlists){
|
2002 |
+
foreach($userlists as $key=>$userlist){
|
2003 |
+
if($subscriber["user_id"]==$userlist["user_id"] && isset($lists[$userlist["list_id"]])){
|
2004 |
+
if(!isset($this->data['subscribers'][$keysus]["lists"]) ) $this->data['subscribers'][$keysus]["lists"]=$lists[$userlist["list_id"]]["name"];
|
2005 |
+
else $this->data['subscribers'][$keysus]["lists"].=", ".$lists[$userlist["list_id"]]["name"];
|
2006 |
+
}
|
2007 |
+
}
|
2008 |
+
}
|
2009 |
+
}
|
2010 |
+
|
2011 |
+
|
2012 |
+
/* we prepare the data to be pased to the charts script*/
|
2013 |
+
//$this->data['charts']['title']=__('Statistics for campaign.',WYSIJA);
|
2014 |
+
$this->data['charts']['title']=" ";
|
2015 |
+
$this->data['charts']['stats']=array();
|
2016 |
+
$keys=array(
|
2017 |
+
'opened'=>array('order'=>0),
|
2018 |
+
'bounced'=>array('order'=>1),
|
2019 |
+
'sent'=>array('order'=>2),
|
2020 |
+
'clicked'=>array('order'=>3),
|
2021 |
+
'unsubscribe'=>array('order'=>4),
|
2022 |
+
'notsent'=>array('order'=>5),
|
2023 |
+
'inqueue'=>array('order'=>6)
|
2024 |
+
);
|
2025 |
+
|
2026 |
+
foreach(array_reverse($counts) as $key=> $count){
|
2027 |
+
if($key!="all" && $key!="allsent"){
|
2028 |
+
if(isset($keys[$key]['name'])) $name=$keys[$key]['name'];
|
2029 |
+
else $name=$this->viewObj->getTransStatusEmail($key);
|
2030 |
+
if($count>0) $this->data['charts']['stats'][$keys[$key]['order']]=array("name"=>$name,"number"=>$count);
|
2031 |
+
}
|
2032 |
+
}
|
2033 |
+
|
2034 |
+
$modelEUU=WYSIJA::get('email_user_url',"model");
|
2035 |
+
$modelEUU->colCheck=false;
|
2036 |
+
$modelEUU->setConditions(array("equal"=>array("A.email_id"=>$emailObj['email_id'])));
|
2037 |
+
$query="SELECT count(A.user_id) as count,A.*,B.*,C.subject as name FROM `[wysija]".$modelEUU->table_name."` as A JOIN `[wysija]url` as B on A.url_id=B.url_id JOIN `[wysija]email` as C on C.email_id=A.email_id ";
|
2038 |
+
$query.=$modelEUU->makeWhere();
|
2039 |
+
$query.=" GROUP BY A.url_id ";
|
2040 |
+
$query.=" ORDER BY count Desc";
|
2041 |
+
$this->data['clicks']=$modelEUU->query("get_res",$query,ARRAY_A);
|
2042 |
+
|
2043 |
+
foreach($this->data['clicks'] as $k => &$v){
|
2044 |
+
$this->data['clicks'][$k]['name']="<strong>".sprintf(_n('%1$s click', '%1$s clicks', $v['count'],WYSIJA), $v['count'])."</strong> ";
|
2045 |
+
$v['url']=urldecode(utf8_encode($v['url']));
|
2046 |
+
}
|
2047 |
+
|
2048 |
+
$this->data['email']=$emailObj;
|
2049 |
+
$chartsencoded=base64_encode(json_encode($this->data['charts']));
|
2050 |
+
wp_enqueue_script('wysija-admin-subscribers-edit-manual', WYSIJA_URL."js/admin-subscribers-edit-manual.php?data=".$chartsencoded, array( 'wysija-charts' ), true);
|
2051 |
+
|
2052 |
+
if(!$this->data['subscribers']){
|
2053 |
+
$this->notice(__("Your request can't retrieve any subscribers. Change your filters!",WYSIJA));
|
2054 |
+
}
|
2055 |
+
}
|
2056 |
+
|
2057 |
+
function getListSubscriberQry($selectcolumns){
|
2058 |
+
$this->modelObj=WYSIJA::get("email","model");
|
2059 |
+
$this->emailObj=$this->modelObj->getOne(false,array('email_id' => $_REQUEST['id']));
|
2060 |
+
|
2061 |
+
/* use the filter if there is */
|
2062 |
+
$this->setviewStatsfilter();
|
2063 |
+
|
2064 |
+
if($selectcolumns=="B.user_id"){
|
2065 |
+
//unset($this->filters["like"]);
|
2066 |
+
}
|
2067 |
+
|
2068 |
+
$this->filters['equal']["B.email_id"]=$this->emailObj['email_id'];
|
2069 |
+
$this->modelObj->noCheck=true;
|
2070 |
+
if($this->filters) $this->modelObj->setConditions($this->filters);
|
2071 |
+
|
2072 |
+
/* select insert all the subscribers from that campaign into user_list */
|
2073 |
+
if($selectcolumns=="B.user_id"){
|
2074 |
+
$query="SELECT $selectcolumns FROM `[wysija]".$this->tableQuery."` as B";
|
2075 |
+
$query.=$this->modelObj->makeWhere();
|
2076 |
+
}else{
|
2077 |
+
$query="SELECT $selectcolumns FROM `[wysija]user` as A";
|
2078 |
+
$query.=" LEFT JOIN `[wysija]".$this->tableQuery."` as B on A.user_id=B.user_id";
|
2079 |
+
$query.=$this->modelObj->makeWhere();
|
2080 |
+
}
|
2081 |
+
|
2082 |
+
return $query;
|
2083 |
+
}
|
2084 |
+
|
2085 |
+
function createnewlist(){
|
2086 |
+
/* get the email subject */
|
2087 |
+
$emailModel = WYSIJA::get('email', 'model');
|
2088 |
+
$email = $emailModel->getOne(array('subject'), array('email_id' => $_REQUEST['id']));
|
2089 |
+
|
2090 |
+
$this->modelObj->reset();
|
2091 |
+
|
2092 |
+
/* set the name of the new list*/
|
2093 |
+
$prefix="";
|
2094 |
+
if(isset($_REQUEST['link_filter'])) $prefix=' ('.$this->viewObj->getTransStatusEmail($_REQUEST['link_filter']).')';
|
2095 |
+
$listname=sprintf(__('Segment of %1$s',WYSIJA), $email['subject'].$prefix);
|
2096 |
+
|
2097 |
+
/*insert new list*/
|
2098 |
+
$modelL=WYSIJA::get('list','model');
|
2099 |
+
$listid=$modelL->insert(array('is_enabled'=>1,'name'=>$listname,'description'=>__('List created based on a newsletter segment.',WYSIJA)));
|
2100 |
+
|
2101 |
+
/* get list of subscribers filtered or not */
|
2102 |
+
$query=$this->getListSubscriberQry($listid.', A.user_id, '.time().', 0');
|
2103 |
+
|
2104 |
+
$query2='INSERT INTO `[wysija]user_list` (`list_id`,`user_id`,`sub_date`,`unsub_date`) '.$query;
|
2105 |
+
|
2106 |
+
$this->modelObj->query($query2);
|
2107 |
+
|
2108 |
+
$this->notice(sprintf(__('A new list "%1$s" has been created out of this segment.',WYSIJA), $listname));
|
2109 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=viewstats&id='.$_REQUEST['id']);
|
2110 |
+
}
|
2111 |
+
|
2112 |
+
function unsubscribeall(){
|
2113 |
+
//delete from user_lists where select from email_user_stat
|
2114 |
+
$query=$this->getListSubscriberQry('B.user_id');
|
2115 |
+
$query2="UPDATE `[wysija]user_list` where user_id IN ($query) AND list_id not IN(SELECT list_id from `[wysija]list` WHERE is_enabled<1)";
|
2116 |
+
$this->modelObj->query($query2);
|
2117 |
+
|
2118 |
+
//unsubscribe from user where select from email_user_stat
|
2119 |
+
$query2="UPDATE `[wysija]user` set `status`=-1 where user_id IN ($query)";
|
2120 |
+
$this->modelObj->query($query2);
|
2121 |
|
2122 |
+
$this->notice(__('The segment has been unbsubscribed from all the lists.',WYSIJA));
|
2123 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=viewstats&id='.$_REQUEST['id']);
|
2124 |
+
}
|
2125 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2126 |
|
2127 |
+
function sendconfirmation(){
|
2128 |
+
//delete from user_lists where select from email_user_stat
|
2129 |
+
$query=$this->getListSubscriberQry('B.user_id ');
|
2130 |
|
2131 |
+
$user_ids=$this->modelObj->query('get_res',$query);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2132 |
|
2133 |
+
$uids=array();
|
2134 |
+
foreach($user_ids as $data){
|
2135 |
+
$uids[]=$data['user_id'];
|
2136 |
+
}
|
2137 |
|
2138 |
+
$helperUser=WYSIJA::get('user','helper');
|
2139 |
+
$helperUser->sendConfirmationEmail($uids);
|
2140 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=viewstats&id='.$_REQUEST['id']);
|
2141 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2142 |
|
|
|
|
|
|
|
2143 |
|
2144 |
+
function removequeue(){
|
2145 |
+
/* delete from queue where select from email_user_stat */
|
2146 |
+
$query=$this->getListSubscriberQry('B.user_id');
|
2147 |
+
$query2="DELETE FROM `[wysija]queue` where user_id IN ($query) AND email_id=".$this->emailObj['email_id'];
|
2148 |
+
$this->modelObj->query($query2);
|
2149 |
|
2150 |
+
$this->notice(__('The segment has been removed from the queue of this newsletter.',WYSIJA));
|
2151 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=viewstats&id='.$_REQUEST['id']);
|
2152 |
+
}
|
|
|
2153 |
|
2154 |
+
function export(){
|
2155 |
+
/* select from email_user_stat left join user */
|
2156 |
+
$query=$this->getListSubscriberQry('B.user_id');
|
2157 |
+
$result=$this->modelObj->query('get_res',$query);
|
2158 |
+
$user_ids=array();
|
2159 |
+
foreach($result as $user) $user_ids[]=$user['user_id'];
|
2160 |
|
2161 |
+
$fileHelp=WYSIJA::get('file','helper');
|
2162 |
+
$tempfilename=$fileHelp->temp(implode(',',$user_ids),'export_userids','.txt');
|
|
|
|
|
|
|
2163 |
|
2164 |
+
//$this->redirect("admin.php?page=wysija_campaigns&action=viewstats&id=".$_REQUEST['id']."&user_ids=".serialize($result));
|
2165 |
+
$this->redirect('admin.php?page=wysija_subscribers&action=exportcampaign&camp_id='.$_REQUEST['id'].'&file_name='. base64_encode($tempfilename['path']));
|
2166 |
+
}
|
2167 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2168 |
|
|
|
|
|
2169 |
|
2170 |
+
function unsubscribelist($data){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2171 |
|
2172 |
+
$modelL=WYSIJA::get('list','model');
|
2173 |
+
$list=$modelL->getOne(false,array('list_id'=>$data['listid']));
|
2174 |
+
if($list['is_enabled']){
|
2175 |
+
/* delete from user_lists where select from email_user_stat */
|
2176 |
+
$query=$this->getListSubscriberQry("B.user_id");
|
2177 |
+
$query2="DELETE FROM `[wysija]user_list` where user_id IN ($query) and list_id=".$data['listid'];
|
2178 |
+
$this->modelObj->query($query2);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2179 |
|
2180 |
+
$this->notice(sprintf(__('The segment has been unbsubscribed from the list "%1$s"',WYSIJA),$list['name']));
|
2181 |
+
}else{
|
2182 |
+
$this->notice(sprintf(__('The segment cannot be unbsubscribed from an [IMPORT] list.',WYSIJA),$list['name']));
|
2183 |
+
}
|
|
|
|
|
|
|
2184 |
|
2185 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=viewstats&id='.$_REQUEST['id']);
|
2186 |
+
}
|
2187 |
|
|
|
2188 |
|
|
|
|
|
2189 |
|
2190 |
+
function articles(){
|
2191 |
+
$this->iframeTabs=array('articles'=>__("Post Selection",WYSIJA));
|
2192 |
+
$this->js[]='wysija-admin-ajax';
|
2193 |
+
$this->js[]='wysija-base-script-64';
|
2194 |
|
2195 |
+
$_GET['tab']='articles';
|
2196 |
+
return $this->popupContent();
|
2197 |
+
}
|
|
|
|
|
|
|
2198 |
|
2199 |
+
function themeupload(){
|
2200 |
+
$helperNumbers=WYSIJA::get('numbers','helper');
|
2201 |
+
$bytes=$helperNumbers->get_max_file_upload();
|
2202 |
|
2203 |
+
if(isset($_SERVER['CONTENT_LENGTH']) && $_SERVER['CONTENT_LENGTH']>$bytes['maxbytes']){
|
2204 |
+
if(isset($_FILES['my-theme']['name']) && $_FILES['my-theme']['name']){
|
2205 |
+
$filename=$_FILES['my-theme']['name'];
|
2206 |
+
}else{
|
2207 |
+
$filename="";
|
2208 |
+
}
|
2209 |
+
|
2210 |
+
$this->error(sprintf(__('Upload error, file %1$s is too large! (MAX:%2$s)',WYSIJA),$filename,$bytes['maxmegas']),true);
|
2211 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=themes');
|
2212 |
+
|
2213 |
+
return false;
|
2214 |
+
}
|
2215 |
+
|
2216 |
+
|
2217 |
+
$ZipfileResult=trim(file_get_contents($_FILES['my-theme']['tmp_name']));
|
2218 |
+
|
2219 |
+
$themesHelp=WYSIJA::get('themes','helper');
|
2220 |
+
$result=$themesHelp->installTheme($_FILES['my-theme']['tmp_name'],true);
|
2221 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=themes&reload=1');
|
2222 |
+
|
2223 |
+
return true;
|
2224 |
+
|
2225 |
+
}
|
2226 |
+
|
2227 |
+
function themes(){
|
2228 |
+
$this->iframeTabs = array('themes' => __('Install Themes', WYSIJA));
|
2229 |
+
$this->js[] = 'wysija-admin-ajax';
|
2230 |
+
$this->js[] = 'wysija-base-script-64';
|
2231 |
+
$this->jsTrans['viewinfos'] = __('Details & PSD', WYSIJA);
|
2232 |
+
$this->jsTrans['viewback'] = __('<< Back', WYSIJA);
|
2233 |
+
$this->jsTrans['install'] = __('Download', WYSIJA);
|
2234 |
+
$this->jsTrans['reinstall'] = __('Reinstall', WYSIJA);
|
2235 |
+
$this->jsTrans['premiumonly'] = __('Premium', WYSIJA);
|
2236 |
+
|
2237 |
+
$model_config=WYSIJA::get('config','model');
|
2238 |
+
//change the translation of the button when it's premium
|
2239 |
+
if($model_config->getValue('premium_key'))$this->jsTrans['ispremium']=1;
|
2240 |
+
else $this->jsTrans['ispremium']=0;
|
2241 |
+
|
2242 |
+
$this->jsTrans['premiumfiles']=__('Photoshop file available as part of [link]Premium features[/link].',WYSIJA);
|
2243 |
+
|
2244 |
+
$helper_licence = WYSIJA::get('licence','helper');
|
2245 |
+
$url_checkout = $helper_licence->get_url_checkout('themes');
|
2246 |
+
$this->jsTrans['premiumfiles']=str_replace(array('[link]','[/link]'),array('<a href="'.$url_checkout.'" target="_blank" >','</a>'),$this->jsTrans['premiumfiles']);
|
2247 |
+
|
2248 |
+
$this->jsTrans['showallthemes']=__('Show all themes',WYSIJA);
|
2249 |
+
$this->jsTrans['totalvotes']=__('(%1$s votes)',WYSIJA);
|
2250 |
+
$this->jsTrans['voterecorded']=__("Your vote has been recorded.",WYSIJA);
|
2251 |
+
$this->jsTrans['votenotrecorded']=__("Your vote could not be recorded.",WYSIJA);
|
2252 |
+
$this->jsTrans['reinstallwarning']=__('Watch out! If you reinstall this theme all the files which are in the folder:/wp-content/uploads/wysija/themes/%1$s will be overwritten. Are you sure you want to reinstall?',WYSIJA);
|
2253 |
+
$this->jsTrans['errorconnecting']=__("We were unable to contact the API, the site may be down. Please try again later.",WYSIJA);
|
2254 |
+
|
2255 |
+
$this->jsTrans['viewallthemes']=__('View all themes by %1$s',WYSIJA);
|
2256 |
+
$this->jsTrans['downloadpsd']=__("Download original Photoshop file",WYSIJA);
|
2257 |
+
$this->jsTrans['downloadzip']=__("Download as .zip",WYSIJA);
|
2258 |
+
$this->jsTrans['viewauthorsite']=__("View author's website",WYSIJA);
|
2259 |
+
$this->jsTrans['stars']=__('Average rating: %1$s',WYSIJA);
|
2260 |
+
$this->jsTrans['starsyr']=__('My rating: %1$s',WYSIJA);
|
2261 |
+
$this->jsTrans['downloads']=__('Downloads: %1$s',WYSIJA);
|
2262 |
+
$this->jsTrans['tags']=__('Tags: %1$s',WYSIJA);
|
2263 |
+
$this->jsTrans['lastupdated']=__('Last updated: %1$s',WYSIJA);
|
2264 |
+
$this->jsTrans['includes']=__('Includes: %1$s',WYSIJA);
|
2265 |
+
|
2266 |
+
$helper_themes=WYSIJA::get('themes','helper');
|
2267 |
+
|
2268 |
+
$this->jsTrans['installedthemes']=$helper_themes->getInstalled();
|
2269 |
+
|
2270 |
+
$url=admin_url('admin.php');
|
2271 |
+
$helper_toolbox=WYSIJA::get("toolbox","helper");
|
2272 |
+
$domain_name=$helper_toolbox->_make_domain_name($url);
|
2273 |
+
$this->jsTrans['domainname']=$domain_name;
|
2274 |
+
|
2275 |
+
$_GET['tab']='themes';
|
2276 |
+
|
2277 |
+
return $this->popupContent();
|
2278 |
+
}
|
2279 |
+
|
2280 |
+
function bookmarks() {
|
2281 |
+
$this->iframeTabs=array('bookmarks'=>__('Bookmarks Selection',WYSIJA));
|
2282 |
+
$this->js[]='wysija-admin-ajax';
|
2283 |
+
|
2284 |
+
$_GET['tab']='bookmarks';
|
2285 |
+
|
2286 |
+
$networks = array(
|
2287 |
+
'facebook' => array(
|
2288 |
+
'label' => 'Facebook',
|
2289 |
+
'url' => 'https://www.facebook.com/wysija'
|
2290 |
+
),
|
2291 |
+
'twitter' => array(
|
2292 |
+
'label' => 'Twitter',
|
2293 |
+
'url' => 'https://twitter.com/#!/wysija'
|
2294 |
+
),
|
2295 |
+
'google' => array(
|
2296 |
+
'label' => 'Google+',
|
2297 |
+
'url' => null
|
2298 |
+
),
|
2299 |
+
'linkedin' => array(
|
2300 |
+
'label' => 'LinkedIn',
|
2301 |
+
'url' => null
|
2302 |
+
)
|
2303 |
+
);
|
2304 |
+
|
2305 |
+
// get networks' url from config
|
2306 |
+
$model_config=WYSIJA::get('config', 'model');
|
2307 |
+
$urls = $model_config->getValue('social_bookmarks');
|
2308 |
+
|
2309 |
+
// set url from config for each network if specified
|
2310 |
+
foreach($networks as $network => $values) {
|
2311 |
+
if(isset($urls[$network]) and strlen(trim($urls[$network])) > 0) {
|
2312 |
+
$networks[$network]['url'] = $urls[$network];
|
2313 |
+
}
|
2314 |
+
}
|
2315 |
+
|
2316 |
+
$this->data['networks'] = $networks;
|
2317 |
+
$this->data['size'] = 'medium';
|
2318 |
+
$this->data['theme'] = isset($_REQUEST['theme']) ? $_REQUEST['theme'] : 'default';
|
2319 |
+
|
2320 |
+
return $this->popupContent();
|
2321 |
+
}
|
2322 |
+
|
2323 |
+
function dividers() {
|
2324 |
+
$this->iframeTabs=array('dividers'=>__("Dividers Selection",WYSIJA));
|
2325 |
+
$this->js[]='wysija-admin-ajax';
|
2326 |
+
$this->js[]='wysija-base-script-64';
|
2327 |
+
|
2328 |
+
$_GET['tab']='dividers';
|
2329 |
+
|
2330 |
+
$model_email = WYSIJA::get('email', 'model');
|
2331 |
+
$this->data['email'] = $email = $model_email->getOne(false, array('email_id' => $_REQUEST['emailId']));
|
2332 |
+
|
2333 |
+
// get dividers
|
2334 |
+
$helper_dividers = WYSIJA::get('dividers', 'helper');
|
2335 |
+
$dividers = $helper_dividers->getAll();
|
2336 |
+
|
2337 |
+
// get theme divider if it's not the default theme
|
2338 |
+
if(isset($email['params']['theme'])) {
|
2339 |
+
$helper_themes = WYSIJA::get('themes', 'helper');
|
2340 |
+
$themeDivider = $helper_themes->getDivider($email['params']['theme']);
|
2341 |
+
if($themeDivider !== NULL) {
|
2342 |
+
array_unshift($dividers, $themeDivider);
|
2343 |
+
}
|
2344 |
+
}
|
2345 |
+
|
2346 |
+
// get selected divider
|
2347 |
+
if(isset($email['params']['divider'])) {
|
2348 |
+
$selected_divider = $email['params']['divider'];
|
2349 |
+
} else {
|
2350 |
+
$helper_dividers = WYSIJA::get('dividers', 'helper');
|
2351 |
+
$selected_divider = $helper_dividers->getDefault();
|
2352 |
+
}
|
2353 |
+
|
2354 |
+
// set selected divider in first position
|
2355 |
+
array_unshift($dividers, $selected_divider);
|
2356 |
+
|
2357 |
+
// remove selected divider if present in the list
|
2358 |
+
for($i = 1; $i < count($dividers); $i++) {
|
2359 |
+
if($dividers[$i]['src'] === $selected_divider['src']) {
|
2360 |
+
unset($dividers[$i]);
|
2361 |
+
break;
|
2362 |
+
}
|
2363 |
+
}
|
2364 |
+
|
2365 |
+
$this->data['selected'] = $selected_divider;
|
2366 |
+
$this->data['dividers'] = $dividers;
|
2367 |
+
return $this->popupContent();
|
2368 |
+
}
|
2369 |
+
|
2370 |
+
function autopost() {
|
2371 |
+
$this->iframeTabs=array('autopost'=>__("Add / Edit group of posts", WYSIJA));
|
2372 |
+
$this->js[]='wysija-admin-ajax';
|
2373 |
+
$this->js[]='wysija-base64';
|
2374 |
+
$this->js[]='wysija-colorpicker';
|
2375 |
+
|
2376 |
+
$_GET['tab'] = 'autopost';
|
2377 |
+
|
2378 |
+
// get parameters
|
2379 |
+
$params = array(
|
2380 |
+
'category_ids' => null,
|
2381 |
+
'category' => null,
|
2382 |
+
'title_tag' => 'h2',
|
2383 |
+
'title_alignment' => 'left',
|
2384 |
+
'image_alignment' => 'alternate',
|
2385 |
+
'post_content' => 'excerpt',
|
2386 |
+
'readmore' => __('Read more.', WYSIJA),
|
2387 |
+
'show_divider' => 'yes',
|
2388 |
+
'post_limit' => 5,
|
2389 |
+
'cpt' => 'post',
|
2390 |
+
'nopost_message' => __('Latest content already sent.', WYSIJA),
|
2391 |
+
'bgcolor1' => null,
|
2392 |
+
'bgcolor2' => null
|
2393 |
+
);
|
2394 |
+
|
2395 |
+
// check if GET parameters are specified
|
2396 |
+
foreach($params as $key => $value) {
|
2397 |
+
if(array_key_exists($key, $_GET)) {
|
2398 |
+
switch($key) {
|
2399 |
+
case 'autopost_count':
|
2400 |
+
$params[$key] = (int)$_GET[$key];
|
2401 |
+
break;
|
2402 |
+
case 'readmore':
|
2403 |
+
case 'nopost_message':
|
2404 |
+
$params[$key] = base64_decode($_GET[$key]);
|
2405 |
+
break;
|
2406 |
+
default:
|
2407 |
+
$params[$key] = $_GET[$key];
|
2408 |
+
}
|
2409 |
+
}
|
2410 |
+
}
|
2411 |
+
|
2412 |
+
// get autopost count
|
2413 |
+
$this->data['autopost_count'] = (array_key_exists('autopost_count', $_GET)) ? (int)$_GET['autopost_count'] : 0;
|
2414 |
+
|
2415 |
+
// get autopost type (single or multiple)
|
2416 |
+
$this->data['autopost_type'] = (array_key_exists('autopost_type', $_GET)) ? $_GET['autopost_type'] : 'multiple';
|
2417 |
+
|
2418 |
+
// if only one group of post can be added, change default alignment to left
|
2419 |
+
if($this->data['autopost_type'] === 'single') {
|
2420 |
+
if($params['image_alignment'] === 'alternate') $params['image_alignment'] = 'left';
|
2421 |
+
}
|
2422 |
+
|
2423 |
+
// get post categories (even when there's no post)
|
2424 |
+
$post_categories = get_categories(array('hide_empty' => 0));
|
2425 |
+
$categories = array();
|
2426 |
+
foreach($post_categories as $category) {
|
2427 |
+
$categories[] = array('id' => $category->cat_ID, 'name' => $category->name);
|
2428 |
+
}
|
2429 |
+
$this->data['categories'] = $categories;
|
2430 |
+
|
2431 |
+
// max number of posts
|
2432 |
+
$this->data['post_limits'] = array(1,2,3,4,5,6,7,8,9,10,20,30,50);
|
2433 |
+
|
2434 |
+
$this->data['params'] = $params;
|
2435 |
+
|
2436 |
+
return $this->popupContent();
|
2437 |
+
}
|
2438 |
+
|
2439 |
+
function image_data() {
|
2440 |
+
$this->data['url'] = (isset($_GET['url']) && $_GET['url'] !== '') ? trim(urldecode($_GET['url'])) : null;
|
2441 |
+
$this->data['alt'] = (isset($_GET['alt'])) ? trim(urldecode($_GET['alt'])) : '';
|
2442 |
+
|
2443 |
+
$this->iframeTabs =array('image_data'=>__("Image Parameters",WYSIJA));
|
2444 |
+
$_GET['tab']='image_data';
|
2445 |
+
return $this->popupContent();
|
2446 |
+
}
|
2447 |
+
|
2448 |
+
function medias(){
|
2449 |
+
$this->popupContent();
|
2450 |
+
}
|
2451 |
+
|
2452 |
+
function special_wysija_browse() {
|
2453 |
+
$this->_wysija_subaction();
|
2454 |
+
$this->jsTrans['deleteimg']=__('Delete image for all newsletters?',WYSIJA);
|
2455 |
+
return wp_iframe( array($this->viewObj,'popup_wysija_browse'), array() );
|
2456 |
+
}
|
2457 |
+
|
2458 |
+
function special_wordp_browse() {
|
2459 |
+
$this->_wysija_subaction();
|
2460 |
+
$this->jsTrans['deleteimg']=__('This image might be in an article. Delete anyway?',WYSIJA);
|
2461 |
+
return wp_iframe( array($this->viewObj,'popup_wp_browse'), array() );
|
2462 |
+
}
|
2463 |
+
|
2464 |
+
|
2465 |
+
function _wysija_subaction() {
|
2466 |
+
|
2467 |
+
if(isset($_REQUEST['subaction'])){
|
2468 |
+
if($_REQUEST['subaction'] === 'delete') {
|
2469 |
+
if(isset($_REQUEST['imgid']) && (int)$_REQUEST['imgid'] > 0){
|
2470 |
+
/* delete the image with id imgid */
|
2471 |
+
$res = wp_delete_attachment((int)$_REQUEST['imgid'], true);
|
2472 |
+
if($res) {
|
2473 |
+
$this->notice(__('Image has been deleted.', WYSIJA));
|
2474 |
+
}
|
2475 |
+
}
|
2476 |
+
}
|
2477 |
+
}
|
2478 |
+
return true;
|
2479 |
+
}
|
2480 |
+
|
2481 |
+
function special_new_wordp_upload() {
|
2482 |
+
|
2483 |
+
//wp_enqueue_script('plupload-all');
|
2484 |
+
wp_enqueue_script('wysija-plupload-handlers', WYSIJA_URL.'js/jquery/pluploadHandler.js', array('plupload-all', 'jquery'));
|
2485 |
+
$uploader_l10n = array(
|
2486 |
+
'queue_limit_exceeded' => __('You have attempted to queue too many files.'),
|
2487 |
+
'file_exceeds_size_limit' => __('%s exceeds the maximum upload size for this site.'),
|
2488 |
+
'zero_byte_file' => __('This file is empty. Please try another.'),
|
2489 |
+
'invalid_filetype' => __('This file type is not allowed. Please try another.'),
|
2490 |
+
'not_an_image' => __('This file is not an image. Please try another.'),
|
2491 |
+
'image_memory_exceeded' => __('Memory exceeded. Please try another smaller file.'),
|
2492 |
+
'image_dimensions_exceeded' => __('This is larger than the maximum size. Please try another.'),
|
2493 |
+
'default_error' => __('An error occurred in the upload. Please try again later.'),
|
2494 |
+
'missing_upload_url' => __('There was a configuration error. Please contact the server administrator.'),
|
2495 |
+
'upload_limit_exceeded' => __('You may only upload 1 file.'),
|
2496 |
+
'http_error' => __('HTTP error.'),
|
2497 |
+
'upload_failed' => __('Upload failed.'),
|
2498 |
+
'big_upload_failed' => __('Please try uploading this file with the %1$sbrowser uploader%2$s.'),
|
2499 |
+
'big_upload_queued' => __('%s exceeds the maximum upload size for the multi-file uploader when used in your browser.'),
|
2500 |
+
'io_error' => __('IO error.'),
|
2501 |
+
'security_error' => __('Security error.'),
|
2502 |
+
'file_cancelled' => __('File canceled.'),
|
2503 |
+
'upload_stopped' => __('Upload stopped.'),
|
2504 |
+
'dismiss' => __('Dismiss'),
|
2505 |
+
'crunching' => __('Crunching…'),
|
2506 |
+
'deleted' => __('moved to the trash.'),
|
2507 |
+
'error_uploading' => __('“%s” has failed to upload.')
|
2508 |
+
);
|
2509 |
+
|
2510 |
+
wp_localize_script('wysija-plupload-handlers', 'pluploadL10n', $uploader_l10n);
|
2511 |
+
|
2512 |
+
wp_enqueue_script('image-edit');
|
2513 |
+
wp_enqueue_script('set-post-thumbnail' );
|
2514 |
+
wp_enqueue_style('imgareaselect');
|
2515 |
+
wp_enqueue_script( 'media-gallery' );
|
2516 |
+
|
2517 |
+
/*wp_register_style('myplupload', '/adjust-this-url/myplupload.css');
|
2518 |
+
wp_enqueue_style('myplupload');*/
|
2519 |
+
|
2520 |
+
|
2521 |
+
$errors=array();
|
2522 |
+
return wp_iframe( array($this->viewObj,'popup_new_wp_upload'), $errors );
|
2523 |
+
}
|
2524 |
+
|
2525 |
+
function special_wordp_upload() {
|
2526 |
+
|
2527 |
+
wp_enqueue_script('swfupload-all');
|
2528 |
+
wp_enqueue_script('swfupload-handlers');
|
2529 |
+
wp_enqueue_script('wysija-upload-handlers',WYSIJA_URL."js/jquery/uploadHandlers.js");
|
2530 |
+
wp_enqueue_script('image-edit');
|
2531 |
+
wp_enqueue_script('set-post-thumbnail' );
|
2532 |
+
wp_enqueue_style('imgareaselect');
|
2533 |
+
|
2534 |
+
$errors = array();
|
2535 |
+
$id = 0;
|
2536 |
+
if(isset($_GET['flash']))$_GET['flash']=1;
|
2537 |
+
if ( isset($_POST['html-upload']) && !empty($_FILES) ) {
|
2538 |
+
// Upload File button was clicked
|
2539 |
+
$id = media_handle_upload('async-upload', $_REQUEST['post_id']);
|
2540 |
+
unset($_FILES);
|
2541 |
+
if ( is_wp_error($id) ) {
|
2542 |
+
$errors['upload_error'] = $id;
|
2543 |
+
$id = false;
|
2544 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2545 |
}
|
2546 |
|
2547 |
+
if ( !empty($_POST['insertonlybutton']) ) {
|
2548 |
+
$href = $_POST['insertonly']['href'];
|
2549 |
+
if ( !empty($href) && !strpos($href, '://') )
|
2550 |
+
$href = "http://$href";
|
2551 |
+
|
2552 |
+
$title = esc_attr($_POST['insertonly']['title']);
|
2553 |
+
if ( empty($title) )
|
2554 |
+
$title = basename($href);
|
2555 |
+
if ( !empty($title) && !empty($href) )
|
2556 |
+
$html = "<a href='" . esc_url($href) . "' >$title</a>";
|
2557 |
+
$html = apply_filters('file_send_to_editor_url', $html, esc_url_raw($href), $title);
|
2558 |
+
return media_send_to_editor($html);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2559 |
}
|
2560 |
|
2561 |
+
if ( !empty($_POST) ) {
|
2562 |
+
$return = media_upload_form_handler();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2563 |
|
2564 |
+
if ( is_string($return) )
|
2565 |
+
return $return;
|
2566 |
+
if ( is_array($return) )
|
2567 |
+
$errors = $return;
|
2568 |
}
|
2569 |
|
2570 |
+
if ( isset($_POST['save']) ) {
|
2571 |
+
$errors['upload_notice'] = __('Saved.',WYSIJA);
|
2572 |
+
return media_upload_gallery();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2573 |
}
|
2574 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2575 |
|
2576 |
+
return wp_iframe( array($this->viewObj,'popup_wp_upload'), $errors );
|
2577 |
+
}
|
2578 |
+
|
2579 |
+
function _checkEmailExists($emailId){
|
2580 |
+
$result=false;
|
2581 |
+
$modelEmail=WYSIJA::get('email','model');
|
2582 |
+
if($modelEmail->exists(array('email_id'=>$emailId))) $result= true;
|
2583 |
+
|
2584 |
+
if(!$result){
|
2585 |
+
$this->error(__("The newsletter doesn't exist.",WYSIJA),1);
|
2586 |
+
$this->redirect('admin.php?page=wysija_campaigns');
|
2587 |
+
}else return true;
|
2588 |
+
}
|
2589 |
+
|
2590 |
+
/**
|
2591 |
+
* action to reinstall the latest package from WordPress repository
|
2592 |
+
*/
|
2593 |
+
function switch_to_package(){
|
2594 |
+
$this->requireSecurity();
|
2595 |
+
if((is_multisite() && !WYSIJA::current_user_can('manage_network')) || (!is_multisite() && !WYSIJA::current_user_can('switch_themes'))) return false;
|
2596 |
+
|
2597 |
+
switch($_REQUEST['plugin']){
|
2598 |
+
case 'wysija-newsletters':
|
2599 |
+
$package_to_reinstall='wysija-newsletters/index.php';
|
2600 |
+
$plugin=$_REQUEST['plugin'];
|
2601 |
+
break;
|
2602 |
+
case 'wysija-newsletters-premium':
|
2603 |
+
$package_to_reinstall='wysija-newsletters-premium/index.php';
|
2604 |
+
$plugin=$_REQUEST['plugin'];
|
2605 |
+
break;
|
2606 |
+
}
|
2607 |
+
|
2608 |
+
$beta_mode=true;
|
2609 |
+
if(isset($_REQUEST['stable'])){
|
2610 |
+
$beta_mode=false;
|
2611 |
+
|
2612 |
+
// we only need to emulate a downgrade if we move back to stable
|
2613 |
+
$helper_package = WYSIJA::get('package','helper');
|
2614 |
+
$helper_package->emulate_downgrade_plugin($package_to_reinstall);
|
2615 |
+
}
|
2616 |
+
|
2617 |
+
$model_config = WYSIJA::get('config','model');
|
2618 |
+
$model_config->save(array('beta_mode'=>$beta_mode));
|
2619 |
+
|
2620 |
+
|
2621 |
+
|
2622 |
+
// modify the version in the index.php
|
2623 |
+
set_site_transient( 'update_plugins', '' );
|
2624 |
+
|
2625 |
+
$this->redirect('admin.php?page=wysija_campaigns&action=switch_to_package_step2&plugin='.$plugin);
|
2626 |
+
|
2627 |
+
}
|
2628 |
+
|
2629 |
+
/**
|
2630 |
+
* we need to do that in two steps
|
2631 |
+
*/
|
2632 |
+
function switch_to_package_step2(){
|
2633 |
+
if((is_multisite() && !WYSIJA::current_user_can('manage_network')) || (!is_multisite() && !WYSIJA::current_user_can('switch_themes'))) return false;
|
2634 |
+
switch($_REQUEST['plugin']){
|
2635 |
+
case 'wysija-newsletters':
|
2636 |
+
$package_to_reinstall='wysija-newsletters/index.php';
|
2637 |
+
break;
|
2638 |
+
case 'wysija-newsletters-premium':
|
2639 |
+
$package_to_reinstall='wysija-newsletters-premium/index.php';
|
2640 |
+
break;
|
2641 |
+
}
|
2642 |
+
|
2643 |
+
$helper_package = WYSIJA::get('package','helper');
|
2644 |
+
|
2645 |
+
echo '<html><head></head><body style="font-family: sans-serif;font-size: 12px;line-height: 1.4em;">';
|
2646 |
+
$helper_package->re_install($package_to_reinstall);
|
2647 |
+
echo '</body></html>';
|
2648 |
+
exit;
|
2649 |
+
}
|
2650 |
+
|
2651 |
+
/**
|
2652 |
+
* install the premium package from wysija's remote server
|
2653 |
+
*/
|
2654 |
+
function install_wjp(){
|
2655 |
+
$premiumpluginname='wysija-newsletters-premium/index.php';
|
2656 |
+
echo '<html><head></head><body style="font-family: sans-serif;font-size: 12px;line-height: 1.4em;">';
|
2657 |
+
if(WYSIJA::is_plugin_active($premiumpluginname)){
|
2658 |
+
echo '<p>'.__('Plugin is already installed and activated.',WYSIJA).'</p>';
|
2659 |
+
exit;
|
2660 |
+
}
|
2661 |
+
|
2662 |
+
//test if plugin is installed but not activated
|
2663 |
+
$pluginslist=get_plugins();
|
2664 |
+
|
2665 |
+
if(isset($pluginslist[$premiumpluginname])){
|
2666 |
+
//try to activate it simply
|
2667 |
+
error_reporting(E_ALL);
|
2668 |
+
ini_set('display_errors', '1');
|
2669 |
+
activate_plugin($premiumpluginname);
|
2670 |
+
echo '<p>'.__('Your Premium features are now activated. Happy emailing!',WYSIJA).'</p>';
|
2671 |
+
|
2672 |
+
}else{
|
2673 |
+
$helper_package=WYSIJA::get('package','helper');
|
2674 |
+
$helper_package->install('wysija-newsletters-premium',true);
|
2675 |
+
}
|
2676 |
+
echo '</body></html>';
|
2677 |
+
exit;
|
2678 |
+
}
|
2679 |
}
|
controllers/back/config.php
CHANGED
@@ -14,14 +14,18 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
14 |
|
15 |
if(!isset($_REQUEST['action'])) $this->action='main';
|
16 |
else $this->action=$_REQUEST['action'];
|
|
|
17 |
$this->jsTrans['testemail'] = __('Sending a test email', WYSIJA);
|
18 |
$this->jsTrans['bounceconnect'] = __('Bounce handling connection test', WYSIJA);
|
19 |
$this->jsTrans['processbounceT'] = __('Bounce handling processing', WYSIJA);
|
20 |
$this->jsTrans['doubleoptinon'] = __('Subscribers will now need to activate their subscription by email in order to receive your newsletters. This is recommended.', WYSIJA);
|
21 |
-
$this->jsTrans['doubleoptinoff'] = __('Unconfirmed subscribers will receive your
|
22 |
$this->jsTrans['processbounce'] = __('Process bounce handling now!', WYSIJA);
|
23 |
$this->jsTrans['errorbounceforward'] = __('When setting up the bounce system, you need to have a different address for the bounce email and the forward to address', WYSIJA);
|
24 |
|
|
|
|
|
|
|
25 |
// form list
|
26 |
$this->jsTrans['suredelete'] = __('Are you sure you want to delete this form?', WYSIJA);
|
27 |
|
@@ -30,14 +34,12 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
30 |
case 'save':
|
31 |
case 'clearlog':
|
32 |
wp_enqueue_script('wysija-config-settings', WYSIJA_URL.'js/admin-config-settings.js', array('wysija-admin-js-global'), WYSIJA::get_version());
|
33 |
-
wp_localize_script('wysija-config-settings', 'mpEmailCheck', WJ_Utils::get_tip_data());
|
34 |
wp_enqueue_script('jquery-cookie', WYSIJA_URL.'js/jquery/jquery.cookie.js', array('jquery'), WYSIJA::get_version());
|
35 |
case 'form_add':
|
36 |
case 'form_edit':
|
37 |
case 'form_duplicate':
|
38 |
case 'form_delete':
|
39 |
case 'form_widget_settings':
|
40 |
-
case 'form_add_field':
|
41 |
return $this->{$this->action}();
|
42 |
break;
|
43 |
case 'reinstall':
|
@@ -59,10 +61,7 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
59 |
return;
|
60 |
break;
|
61 |
default:
|
62 |
-
wp_enqueue_script(
|
63 |
-
wp_enqueue_style( 'mailpoet.tooltip', WYSIJA_URL . 'css/vendor/bootstrap.tooltip.css', array(), WYSIJA::get_version(), 'screen' );
|
64 |
-
wp_enqueue_script('wysija-config-settings', WYSIJA_URL.'js/admin-config-settings.js', array('wysija-admin-js-global'), WYSIJA::get_version(), true);
|
65 |
-
wp_localize_script('wysija-config-settings', 'mpEmailCheck', WJ_Utils::get_tip_data());
|
66 |
wp_enqueue_script('jquery-cookie', WYSIJA_URL.'js/jquery/jquery.cookie.js', array('jquery'), WYSIJA::get_version());
|
67 |
}
|
68 |
|
@@ -70,9 +69,7 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
70 |
$this->viewObj->arrayMenus = array('log' => 'View log');
|
71 |
}
|
72 |
|
73 |
-
$this->data
|
74 |
-
$hook_settings_super_advanced_params = array();
|
75 |
-
$this->data['hooks']['hook_settings_super_advanced'] = apply_filters('hook_settings_super_advanced',WYSIJA_module::execute_hook('hook_settings_super_advanced', $hook_settings_super_advanced_params), $hook_settings_super_advanced_params);
|
76 |
$this->action='main';
|
77 |
|
78 |
if(isset($_REQUEST['validate'])){
|
@@ -106,22 +103,14 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
106 |
$_REQUEST = stripslashes_deep($_REQUEST);
|
107 |
$_POST = stripslashes_deep($_POST);
|
108 |
$this->requireSecurity();
|
109 |
-
|
110 |
-
$hook_settings_before_save = array(
|
111 |
-
'REQUEST' =>& $_REQUEST
|
112 |
-
);
|
113 |
-
apply_filters('hook_settings_before_save',WYSIJA_module::execute_hook('hook_settings_before_save', $hook_settings_before_save),$hook_settings_before_save);
|
114 |
-
|
115 |
$this->modelObj->save($_REQUEST['wysija']['config'],true);
|
116 |
|
117 |
-
|
118 |
-
|
119 |
-
// redirect so that javascript values get updated
|
120 |
-
wp_redirect('admin.php?page=wysija_config'.$_REQUEST['redirecttab']);
|
121 |
}
|
122 |
|
123 |
function reinstall(){
|
124 |
-
$this->viewObj->title=__('Reinstall
|
125 |
return true;
|
126 |
}
|
127 |
|
@@ -149,7 +138,7 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
149 |
|
150 |
function log(){
|
151 |
$this->viewObj->arrayMenus=array('clearlog'=>'Clear log');
|
152 |
-
$this->viewObj->title='
|
153 |
return true;
|
154 |
}
|
155 |
|
@@ -166,21 +155,18 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
166 |
$helper_form_engine->set_data();
|
167 |
|
168 |
// create form in database with default data
|
169 |
-
$form = array(
|
|
|
|
|
|
|
170 |
|
171 |
// insert into form table
|
172 |
$model_forms = WYSIJA::get('forms', 'model');
|
173 |
$form_id = $model_forms->insert($form);
|
174 |
|
175 |
if($form_id !== null && (int)$form_id > 0) {
|
176 |
-
// merge form_id into form data for later use
|
177 |
-
$data = array_merge(array('form_id' => $form_id), $helper_form_engine->get_data());
|
178 |
-
// update form data in form engine
|
179 |
-
$helper_form_engine->set_data($data);
|
180 |
-
// update form data in database
|
181 |
-
$model_forms->update(array('data' => $helper_form_engine->get_encoded('data')), array('form_id' => (int)$form_id));
|
182 |
-
|
183 |
// redirect to form editor, passing along the newly created form id
|
|
|
184 |
WYSIJA::redirect('admin.php?page=wysija_config&action=form_edit&id='.$form_id);
|
185 |
} else {
|
186 |
WYSIJA::redirect('admin.php?page=wysija_config#tab-forms');
|
@@ -246,15 +232,11 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
246 |
}
|
247 |
|
248 |
function form_edit() {
|
249 |
-
// define whether the form can be edited
|
250 |
-
$this->data['can_edit'] = true;
|
251 |
-
|
252 |
// wysija form editor javascript files
|
253 |
$this->js[]='wysija-form-editor';
|
254 |
$this->js[]='wysija-admin-ajax-proto';
|
255 |
-
|
256 |
$this->js[]='wysija-base-script-64';
|
257 |
-
$this->js[] = 'mailpoet-select2';
|
258 |
|
259 |
// make sure the editor content is not cached
|
260 |
//header('Cache-Control: no-cache, max-age=0, must-revalidate, no-store'); // HTTP/1.1
|
@@ -285,18 +267,64 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
285 |
|
286 |
$helper_form_engine = WYSIJA::get('form_engine', 'helper');
|
287 |
$lists = $helper_form_engine->get_lists();
|
288 |
-
$this->data['lists'] = $lists;
|
289 |
|
290 |
-
//
|
291 |
-
|
292 |
-
|
|
|
|
|
|
|
|
|
293 |
}
|
294 |
|
295 |
-
|
296 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
|
298 |
// translations
|
299 |
$this->jsTrans = array_merge($this->jsTrans, $helper_form_engine->get_translations());
|
|
|
|
|
|
|
300 |
}
|
301 |
|
302 |
/*
|
@@ -306,78 +334,50 @@ class WYSIJA_control_back_config extends WYSIJA_control_back{
|
|
306 |
$this->iframeTabs = array('form_widget_settings' => __('Widget Settings', WYSIJA));
|
307 |
$this->js[] = 'wysija-admin-ajax';
|
308 |
$this->js[] = 'wysija-base-script-64';
|
309 |
-
$this->js[] = 'wysija-
|
310 |
|
311 |
$_GET['tab'] = 'form_widget_settings';
|
312 |
|
313 |
-
//
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
if(
|
322 |
-
|
323 |
-
$
|
324 |
-
$this->data['field'] = $custom_field->user_column_name();
|
325 |
-
$this->data['params'] = $custom_field->settings;
|
326 |
-
} else {
|
327 |
-
$this->data['name'] = (isset($_REQUEST['name'])) ? $_REQUEST['name'] : null;
|
328 |
-
$this->data['type'] = (isset($_REQUEST['type'])) ? $_REQUEST['type'] : null;
|
329 |
-
$this->data['field'] = null;
|
330 |
-
$this->data['params'] = null;
|
331 |
-
}
|
332 |
-
|
333 |
-
$this->data['field_id'] = $field_id;
|
334 |
-
} else {
|
335 |
-
// extract parameters from url
|
336 |
-
$params = array();
|
337 |
-
if(isset($_REQUEST['params']) && trim(strlen($_REQUEST['params'])) > 0) {
|
338 |
-
$pairs = explode('|', $_REQUEST['params']);
|
339 |
-
if(count($pairs) > 0) {
|
340 |
-
foreach($pairs as $pair) {
|
341 |
-
// extract both key and value
|
342 |
-
list($key, $value) = explode(':', $pair);
|
343 |
-
|
344 |
-
// decode value
|
345 |
-
$value = base64_decode($value);
|
346 |
-
// unserialize if necessary (using is_serialized from WordPress)
|
347 |
-
if(is_serialized($value) === true) {
|
348 |
-
$value = unserialize($value);
|
349 |
-
}
|
350 |
-
$params[$key] = $value;
|
351 |
-
}
|
352 |
-
}
|
353 |
}
|
|
|
|
|
354 |
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
|
360 |
-
|
361 |
-
|
362 |
|
363 |
-
|
364 |
-
|
365 |
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
}
|
375 |
-
|
376 |
-
$this->data['extra'] = $extra;
|
377 |
}
|
378 |
|
|
|
|
|
379 |
return $this->popupContent();
|
380 |
exit;
|
381 |
}
|
382 |
// End: WYSIJA Form Editor
|
383 |
-
}
|
14 |
|
15 |
if(!isset($_REQUEST['action'])) $this->action='main';
|
16 |
else $this->action=$_REQUEST['action'];
|
17 |
+
|
18 |
$this->jsTrans['testemail'] = __('Sending a test email', WYSIJA);
|
19 |
$this->jsTrans['bounceconnect'] = __('Bounce handling connection test', WYSIJA);
|
20 |
$this->jsTrans['processbounceT'] = __('Bounce handling processing', WYSIJA);
|
21 |
$this->jsTrans['doubleoptinon'] = __('Subscribers will now need to activate their subscription by email in order to receive your newsletters. This is recommended.', WYSIJA);
|
22 |
+
$this->jsTrans['doubleoptinoff'] = __('Unconfirmed subscribers will receive your newslettters from now on without the need to activate their subscriptions.', WYSIJA);
|
23 |
$this->jsTrans['processbounce'] = __('Process bounce handling now!', WYSIJA);
|
24 |
$this->jsTrans['errorbounceforward'] = __('When setting up the bounce system, you need to have a different address for the bounce email and the forward to address', WYSIJA);
|
25 |
|
26 |
+
$this->jsTrans['premium_activate'] = __('Already paid? Click here to activate', WYSIJA);
|
27 |
+
$this->jsTrans['premium_activating'] = __('Checking license', WYSIJA);
|
28 |
+
|
29 |
// form list
|
30 |
$this->jsTrans['suredelete'] = __('Are you sure you want to delete this form?', WYSIJA);
|
31 |
|
34 |
case 'save':
|
35 |
case 'clearlog':
|
36 |
wp_enqueue_script('wysija-config-settings', WYSIJA_URL.'js/admin-config-settings.js', array('wysija-admin-js-global'), WYSIJA::get_version());
|
|
|
37 |
wp_enqueue_script('jquery-cookie', WYSIJA_URL.'js/jquery/jquery.cookie.js', array('jquery'), WYSIJA::get_version());
|
38 |
case 'form_add':
|
39 |
case 'form_edit':
|
40 |
case 'form_duplicate':
|
41 |
case 'form_delete':
|
42 |
case 'form_widget_settings':
|
|
|
43 |
return $this->{$this->action}();
|
44 |
break;
|
45 |
case 'reinstall':
|
61 |
return;
|
62 |
break;
|
63 |
default:
|
64 |
+
wp_enqueue_script('wysija-config-settings', WYSIJA_URL.'js/admin-config-settings.js', array('wysija-admin-js-global'), WYSIJA::get_version());
|
|
|
|
|
|
|
65 |
wp_enqueue_script('jquery-cookie', WYSIJA_URL.'js/jquery/jquery.cookie.js', array('jquery'), WYSIJA::get_version());
|
66 |
}
|
67 |
|
69 |
$this->viewObj->arrayMenus = array('log' => 'View log');
|
70 |
}
|
71 |
|
72 |
+
$this->data=array();
|
|
|
|
|
73 |
$this->action='main';
|
74 |
|
75 |
if(isset($_REQUEST['validate'])){
|
103 |
$_REQUEST = stripslashes_deep($_REQUEST);
|
104 |
$_POST = stripslashes_deep($_POST);
|
105 |
$this->requireSecurity();
|
|
|
|
|
|
|
|
|
|
|
|
|
106 |
$this->modelObj->save($_REQUEST['wysija']['config'],true);
|
107 |
|
108 |
+
//wp_redirect('admin.php?page=wysija_config'.$_REQUEST['redirecttab']);
|
109 |
+
|
|
|
|
|
110 |
}
|
111 |
|
112 |
function reinstall(){
|
113 |
+
$this->viewObj->title=__('Reinstall Wysija?',WYSIJA);
|
114 |
return true;
|
115 |
}
|
116 |
|
138 |
|
139 |
function log(){
|
140 |
$this->viewObj->arrayMenus=array('clearlog'=>'Clear log');
|
141 |
+
$this->viewObj->title='Wysija\'s log';
|
142 |
return true;
|
143 |
}
|
144 |
|
155 |
$helper_form_engine->set_data();
|
156 |
|
157 |
// create form in database with default data
|
158 |
+
$form = array(
|
159 |
+
'name' => __('New Form', WYSIJA),
|
160 |
+
'data' => $helper_form_engine->get_encoded('data')
|
161 |
+
);
|
162 |
|
163 |
// insert into form table
|
164 |
$model_forms = WYSIJA::get('forms', 'model');
|
165 |
$form_id = $model_forms->insert($form);
|
166 |
|
167 |
if($form_id !== null && (int)$form_id > 0) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
168 |
// redirect to form editor, passing along the newly created form id
|
169 |
+
//$this->redirect('admin.php?page=wysija_config&action=form_edit&id='.$form_id);
|
170 |
WYSIJA::redirect('admin.php?page=wysija_config&action=form_edit&id='.$form_id);
|
171 |
} else {
|
172 |
WYSIJA::redirect('admin.php?page=wysija_config#tab-forms');
|
232 |
}
|
233 |
|
234 |
function form_edit() {
|
|
|
|
|
|
|
235 |
// wysija form editor javascript files
|
236 |
$this->js[]='wysija-form-editor';
|
237 |
$this->js[]='wysija-admin-ajax-proto';
|
238 |
+
$this->js[]='wysija-admin-ajax';
|
239 |
$this->js[]='wysija-base-script-64';
|
|
|
240 |
|
241 |
// make sure the editor content is not cached
|
242 |
//header('Cache-Control: no-cache, max-age=0, must-revalidate, no-store'); // HTTP/1.1
|
267 |
|
268 |
$helper_form_engine = WYSIJA::get('form_engine', 'helper');
|
269 |
$lists = $helper_form_engine->get_lists();
|
|
|
270 |
|
271 |
+
// select default list
|
272 |
+
$default_list = array();
|
273 |
+
if(!empty($lists)) {
|
274 |
+
$default_list[] = array(
|
275 |
+
'list_id' => $lists[0]['list_id'],
|
276 |
+
'is_checked' => 0
|
277 |
+
);
|
278 |
}
|
279 |
|
280 |
+
$this->data['lists'] = $lists;
|
281 |
+
|
282 |
+
// get available custom fields
|
283 |
+
$model_user_field = WYSIJA::get('user_field', 'model');
|
284 |
+
$model_user_field->orderBy('field_id');
|
285 |
+
$custom_fields = $model_user_field->getRows(false);
|
286 |
+
|
287 |
+
// extra widgets that can be added more than once
|
288 |
+
$extra_fields = array(
|
289 |
+
array(
|
290 |
+
'name' => __('List selection', WYSIJA),
|
291 |
+
'column_name' => 'list',
|
292 |
+
'column_type' => 'list',
|
293 |
+
'params' => array(
|
294 |
+
'label' => __('Select list(s):', WYSIJA),
|
295 |
+
'values' => $default_list
|
296 |
+
)
|
297 |
+
),
|
298 |
+
array(
|
299 |
+
'name' => __('Random text or HTML', WYSIJA),
|
300 |
+
'column_name' => 'html',
|
301 |
+
'column_type' => 'html',
|
302 |
+
'params' => array(
|
303 |
+
'text' => __('Random text or HTML', WYSIJA)
|
304 |
+
)
|
305 |
+
),
|
306 |
+
array(
|
307 |
+
'name' => __('Divider', WYSIJA),
|
308 |
+
'column_name' => 'divider',
|
309 |
+
'column_type' => 'divider'
|
310 |
+
)
|
311 |
+
// array(
|
312 |
+
// 'name' => __('HTML code', WYSIJA),
|
313 |
+
// 'column_name' => 'html',
|
314 |
+
// 'column_type' => 'html',
|
315 |
+
// 'params' => array(
|
316 |
+
// 'text' => __('HTML code', WYSIJA)
|
317 |
+
// )
|
318 |
+
);
|
319 |
+
|
320 |
+
// set data to be passed to the view
|
321 |
+
$this->data['custom_fields'] = array_merge($custom_fields, $extra_fields);
|
322 |
|
323 |
// translations
|
324 |
$this->jsTrans = array_merge($this->jsTrans, $helper_form_engine->get_translations());
|
325 |
+
|
326 |
+
// This should be the title of the page but I don't know how to make it happen...
|
327 |
+
// __('Edit', WYSIJA).' '.$this->data['form']['name'];
|
328 |
}
|
329 |
|
330 |
/*
|
334 |
$this->iframeTabs = array('form_widget_settings' => __('Widget Settings', WYSIJA));
|
335 |
$this->js[] = 'wysija-admin-ajax';
|
336 |
$this->js[] = 'wysija-base-script-64';
|
337 |
+
$this->js[] = 'wysija-form-widget-settings';
|
338 |
|
339 |
$_GET['tab'] = 'form_widget_settings';
|
340 |
|
341 |
+
// extract parameters from url
|
342 |
+
$params = array();
|
343 |
+
foreach(explode('|', $_REQUEST['params']) as $pair) {
|
344 |
+
// extract both key and value
|
345 |
+
list($key, $value) = explode(':', $pair);
|
346 |
+
|
347 |
+
// decode value
|
348 |
+
$value = base64_decode($value);
|
349 |
+
// unserialize if necessary (using is_serialized from WordPress)
|
350 |
+
if(is_serialized($value) === true) {
|
351 |
+
$value = unserialize($value);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
352 |
}
|
353 |
+
$params[$key] = $value;
|
354 |
+
}
|
355 |
|
356 |
+
// common widget data
|
357 |
+
$this->data['name'] = $_REQUEST['name'];
|
358 |
+
$this->data['type'] = $_REQUEST['type'];
|
359 |
+
$this->data['field'] = $_REQUEST['field'];
|
360 |
|
361 |
+
// widget params
|
362 |
+
$this->data['params'] = $params;
|
363 |
|
364 |
+
// extra data that needs to be fetched for some widget
|
365 |
+
$extra = array();
|
366 |
|
367 |
+
switch($this->data['type']) {
|
368 |
+
// in case of the list widget, we need to pass an array of all available lists
|
369 |
+
case 'list':
|
370 |
+
$model_list = WYSIJA::get('list', 'model');
|
371 |
|
372 |
+
// get lists users can subscribe to (aka "enabled list")
|
373 |
+
$extra['lists'] = $model_list->get(array('name', 'list_id', 'is_public'), array('is_enabled' => 1));
|
374 |
+
break;
|
|
|
|
|
|
|
375 |
}
|
376 |
|
377 |
+
$this->data['extra'] = $extra;
|
378 |
+
|
379 |
return $this->popupContent();
|
380 |
exit;
|
381 |
}
|
382 |
// End: WYSIJA Form Editor
|
383 |
+
}
|
controllers/back/premium.php
DELETED
@@ -1,34 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
defined('WYSIJA') or die('Restricted access');
|
4 |
-
|
5 |
-
class WYSIJA_control_back_premium extends WYSIJA_control_back {
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Main view of this controller
|
9 |
-
* @var string
|
10 |
-
*/
|
11 |
-
public $view = 'premium';
|
12 |
-
public $model = 'config';
|
13 |
-
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Constructor
|
17 |
-
*/
|
18 |
-
function WYSIJA_control_back_premium() {
|
19 |
-
}
|
20 |
-
function defaultDisplay() {
|
21 |
-
$this->jsTrans['premium_activate'] = __('Already paid? Click here to activate', WYSIJA);
|
22 |
-
$this->jsTrans['premium_activating'] = __('Checking license', WYSIJA);
|
23 |
-
}
|
24 |
-
|
25 |
-
function premium_ben() {
|
26 |
-
$this->jsTrans['premium_activate'] = __('Already paid? Click here to activate', WYSIJA);
|
27 |
-
$this->jsTrans['premium_activating'] = __('Checking license', WYSIJA);
|
28 |
-
}
|
29 |
-
|
30 |
-
function premium_kim() {
|
31 |
-
$this->jsTrans['premium_activate'] = __('Already paid? Click here to activate', WYSIJA);
|
32 |
-
$this->jsTrans['premium_activating'] = __('Checking license', WYSIJA);
|
33 |
-
}
|
34 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controllers/back/statistics.php
DELETED
@@ -1,197 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
defined('WYSIJA') or die('Restricted access');
|
3 |
-
require_once(WYSIJA_CORE.'module'.DS.'statistics.php'); // @todo
|
4 |
-
|
5 |
-
class WYSIJA_control_back_statistics extends WYSIJA_control_back
|
6 |
-
{
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Main model of this controller
|
10 |
-
* @var string
|
11 |
-
*/
|
12 |
-
public $model = 'statistics';
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Main view of this controller
|
16 |
-
* @var string
|
17 |
-
*/
|
18 |
-
public $view = 'statistics';
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Base URL of all requests
|
22 |
-
* @var string
|
23 |
-
*/
|
24 |
-
public $base_url = 'admin.php';
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Load blocks at a same time (FALSE) or one by one (TRUE)
|
28 |
-
* @var TRUE
|
29 |
-
*/
|
30 |
-
protected $lazy_load = true;
|
31 |
-
|
32 |
-
/**
|
33 |
-
* list of pre-defined dates
|
34 |
-
* @var Array
|
35 |
-
*/
|
36 |
-
protected $pre_defined_dates = array( );
|
37 |
-
|
38 |
-
protected $date_format = 'Y/m/d';
|
39 |
-
|
40 |
-
protected $js_date_format = 'yy/mm/dd';
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Constructor
|
44 |
-
*/
|
45 |
-
function WYSIJA_control_back_statistics()
|
46 |
-
{
|
47 |
-
|
48 |
-
}
|
49 |
-
|
50 |
-
public function defaultDisplay()
|
51 |
-
{
|
52 |
-
$this->pre_defined_dates = $this->get_pre_defined_dates();
|
53 |
-
// Define view
|
54 |
-
$this->viewShow = $this->action = 'main';
|
55 |
-
$this->js['jquery.core'] = 'jquery/ui/jquery.ui.core';
|
56 |
-
$this->js['jquery.datepicker'] = 'jquery/ui/jquery.ui.datepicker';
|
57 |
-
$this->js['wysijalazyload'] = 'wysija-lazyload';
|
58 |
-
$this->js['admin-statistics-filter'] = 'admin-statistics-filter';
|
59 |
-
wp_enqueue_style('jquery.core', WYSIJA_URL.'css/jquery/ui/themes/base/jquery.ui.core.min.css', array( ), WYSIJA::get_version());
|
60 |
-
wp_enqueue_style('jquery.core', WYSIJA_URL.'css/jquery/ui/themes/base/jquery.ui.theme.min.css', array( ), WYSIJA::get_version());
|
61 |
-
|
62 |
-
// date filter
|
63 |
-
$default_duration = $this->get_default_duration();
|
64 |
-
if (function_exists('date_diff'))
|
65 |
-
{
|
66 |
-
$this->data['date_interval'] = date_diff(date_create($default_duration['from']), date_create($default_duration['to']));
|
67 |
-
}
|
68 |
-
else
|
69 |
-
{
|
70 |
-
$duration = strtotime($default_duration['to']) - strtotime($default_duration['from']);
|
71 |
-
$helper_toolbox = WYSIJA::get('toolbox', 'helper');
|
72 |
-
$this->data['date_interval'] = (object)$helper_toolbox->convert_seconds_to_array($duration, false);
|
73 |
-
}
|
74 |
-
|
75 |
-
$this->data['custom_dates'] = $this->pre_defined_dates;
|
76 |
-
$this->data['default_duration'] = $default_duration;
|
77 |
-
$this->data['js_date_format'] = $this->js_date_format;
|
78 |
-
|
79 |
-
// Process and push data into view
|
80 |
-
$this->data['lazy_load'] = $this->lazy_load;
|
81 |
-
$hook_name = 'hook_stats';
|
82 |
-
$hook_params = array( );
|
83 |
-
$hook_params['top'] = WYSIJA_module_statistics::DEFAULT_TOP_RECORDS;
|
84 |
-
$hook_params['from'] = !empty($_REQUEST['filter']['from']) ? $_REQUEST['filter']['from'] : $default_duration['from'];
|
85 |
-
$hook_params['to'] = !empty($_REQUEST['filter']['to']) ? $_REQUEST['filter']['to'] : $default_duration['to'];
|
86 |
-
$hook_params['group_by'] = ($this->data['date_interval']->days == 0 || $this->data['date_interval']->days > WYSIJA_module_statistics::SWITCHING_DATE_TO_MONTH_THRESHOLD) ?
|
87 |
-
WYSIJA_module_statistics::GROUP_BY_MONTH :
|
88 |
-
WYSIJA_module_statistics::GROUP_BY_DATE; // $this->data['date_interval']->days == 0, means, no begin date, no end date
|
89 |
-
|
90 |
-
// Hack!
|
91 |
-
$_REQUEST['limit_pp'] = $hook_params['top'];// Pagination, mark current selected value
|
92 |
-
|
93 |
-
$modules = WYSIJA_module::get_modules_from_hook($hook_name);
|
94 |
-
$this->data['modules'] = $modules;
|
95 |
-
$this->data['lazy_load_modules'] = array( );
|
96 |
-
$this->data['first_module'] = '';
|
97 |
-
|
98 |
-
if (!$this->lazy_load)
|
99 |
-
{
|
100 |
-
$this->data['hooks'][$hook_name] = apply_filters('hook_stats', '', $hook_params);
|
101 |
-
}
|
102 |
-
else
|
103 |
-
{
|
104 |
-
if (!empty($modules))
|
105 |
-
{
|
106 |
-
$first_module = array_shift($modules);
|
107 |
-
// List of lazy loaded modules
|
108 |
-
$this->data['lazy_load_modules'] = $modules;
|
109 |
-
|
110 |
-
// Evenly we are lazy loading, we always load the first module by default
|
111 |
-
$this->data['first_module'] = apply_filters('custom_module_hook', '', $first_module, $hook_name, $hook_params);
|
112 |
-
}
|
113 |
-
}
|
114 |
-
}
|
115 |
-
|
116 |
-
/**
|
117 |
-
* get pre defined dates (duration)
|
118 |
-
* @return type
|
119 |
-
*/
|
120 |
-
protected function get_pre_defined_dates()
|
121 |
-
{
|
122 |
-
return array(
|
123 |
-
array(
|
124 |
-
'value' => 7,
|
125 |
-
'label' => __('Last 7 days', WYSIJA),
|
126 |
-
'selected' => false,
|
127 |
-
'from' => date($this->date_format, strtotime('-7 days')),
|
128 |
-
'to' => date($this->date_format, strtotime('tomorrow'))
|
129 |
-
),
|
130 |
-
array(
|
131 |
-
'value' => 'last_month',
|
132 |
-
'label' => __('Last month', WYSIJA),
|
133 |
-
'selected' => false,
|
134 |
-
'from' => date($this->date_format, mktime(0, 0, 0, date('m')-1, 1, date('Y'))),
|
135 |
-
'to' => date($this->date_format, mktime(0, 0, 0, date('m'), 0, date('Y')))
|
136 |
-
|
137 |
-
|
138 |
-
),
|
139 |
-
array(
|
140 |
-
'value' => 30,
|
141 |
-
'label' => __('Last 30 days', WYSIJA),
|
142 |
-
'selected' => false,
|
143 |
-
'from' => date($this->date_format, strtotime('-30 days')),
|
144 |
-
'to' => date($this->date_format, strtotime('tomorrow'))
|
145 |
-
),
|
146 |
-
array(
|
147 |
-
'value' => 90,
|
148 |
-
'label' => __('Last 90 days', WYSIJA),
|
149 |
-
'selected' => true,
|
150 |
-
'from' => date($this->date_format, strtotime('-90 days')),
|
151 |
-
'to' => date($this->date_format, strtotime('tomorrow'))
|
152 |
-
),
|
153 |
-
array(
|
154 |
-
'value' => 180,
|
155 |
-
'label' => __('Last 180 days', WYSIJA),
|
156 |
-
'selected' => false,
|
157 |
-
'from' => date($this->date_format, strtotime('-180 days')),
|
158 |
-
'to' => date($this->date_format, strtotime('tomorrow'))
|
159 |
-
),
|
160 |
-
array(
|
161 |
-
'value' => 365,
|
162 |
-
'label' => __('Last 365 days', WYSIJA),
|
163 |
-
'selected' => false,
|
164 |
-
'from' => date($this->date_format, strtotime('-365 days')),
|
165 |
-
'to' => date($this->date_format, strtotime('tomorrow'))
|
166 |
-
),
|
167 |
-
array(
|
168 |
-
'value' => 0,
|
169 |
-
'label' => __('Custom dates', WYSIJA),
|
170 |
-
'selected' => false,
|
171 |
-
'from' => '',
|
172 |
-
'to' => ''
|
173 |
-
),
|
174 |
-
);
|
175 |
-
}
|
176 |
-
|
177 |
-
/**
|
178 |
-
* Get default duration of stats
|
179 |
-
* @return int
|
180 |
-
*/
|
181 |
-
protected function get_default_duration()
|
182 |
-
{
|
183 |
-
foreach ($this->pre_defined_dates as $duration)
|
184 |
-
if (isset($duration['selected']) && $duration['selected'])
|
185 |
-
return $duration;
|
186 |
-
return end($this->pre_defined_dates);
|
187 |
-
}
|
188 |
-
|
189 |
-
function date_diff($time_start, $time_end)
|
190 |
-
{
|
191 |
-
$result = null;
|
192 |
-
$duration = $time_end - $time_start;
|
193 |
-
$result->days = floor($duration / (60 * 60 * 24));
|
194 |
-
return $result;
|
195 |
-
}
|
196 |
-
|
197 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controllers/back/subscribers.php
CHANGED
@@ -8,27 +8,8 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
8 |
var $_separators = array(',', ';'); // csv separator; comma is for standard csv, semi-colon is good for Excel
|
9 |
var $_default_separator = ';';
|
10 |
|
11 |
-
/**
|
12 |
-
* Inactive users = users who never opened or clicked
|
13 |
-
* @todo: disabled on 2.6. Once it's enabled, please double check in term of "inactive users".
|
14 |
-
* OR - users who never opened or clicked
|
15 |
-
* OR - users who never opened or clicked AND received at least 1 newsletter.
|
16 |
-
* @var boolean
|
17 |
-
*/
|
18 |
-
var $_filter_by_inactive_users = false;
|
19 |
-
|
20 |
function WYSIJA_control_back_subscribers(){
|
21 |
-
|
22 |
-
if ($this->_filter_by_inactive_users) {
|
23 |
-
if (
|
24 |
-
// default display
|
25 |
-
empty($_REQUEST['action'])
|
26 |
-
// bulk action
|
27 |
-
|| !empty($_REQUEST['doaction']) && trim(strtolower($_REQUEST['doaction'])) === 'apply'
|
28 |
-
) {
|
29 |
-
$this->modelObj->prepare_inactive_users_table();
|
30 |
-
}
|
31 |
-
}
|
32 |
}
|
33 |
|
34 |
function save(){
|
@@ -108,24 +89,13 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
108 |
$notEqual=array_merge($core_listids, $arrayLists);
|
109 |
|
110 |
//unsubscribe from lists which exist in the old list but does not exist in the new list
|
111 |
-
$unsubsribe_list = array_diff(array_keys($oldlistids)
|
112 |
if(!empty($unsubsribe_list))
|
113 |
{
|
114 |
$modelUL->reset();
|
115 |
$modelUL->update(array('unsub_date'=>time()),array('user_id'=>$id,'list_id'=>$unsubsribe_list));
|
116 |
}
|
117 |
$modelUL->reset();
|
118 |
-
|
119 |
-
/*
|
120 |
-
Custom Fields.
|
121 |
-
*/
|
122 |
-
if (isset($_POST['wysija']['field'])) {
|
123 |
-
WJ_FieldHandler::handle_all(
|
124 |
-
$_POST['wysija']['field'], $id
|
125 |
-
);
|
126 |
-
}
|
127 |
-
|
128 |
-
|
129 |
}else{
|
130 |
//instead of going through a classic save we should save through the helper
|
131 |
$data=$_REQUEST['wysija'];
|
@@ -145,22 +115,6 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
145 |
}
|
146 |
|
147 |
|
148 |
-
/**
|
149 |
-
* Get selected lists
|
150 |
-
* @return array
|
151 |
-
*/
|
152 |
-
protected function get_selected_lists() {
|
153 |
-
$result = array();
|
154 |
-
if (isset($_REQUEST['wysija']['filter']['filter_list'])) {
|
155 |
-
$result[] = $_REQUEST['wysija']['filter']['filter_list'];
|
156 |
-
} elseif (!empty($_REQUEST['filter-list'])) {
|
157 |
-
$lists = explode(',', trim($_REQUEST['filter-list']));// currently, only single list is allowed.
|
158 |
-
if (!empty($lists)) {
|
159 |
-
$result = array_merge ($result, $lists);
|
160 |
-
}
|
161 |
-
}
|
162 |
-
return $result;
|
163 |
-
}
|
164 |
|
165 |
function defaultDisplay(){
|
166 |
$this->viewShow=$this->action='main';
|
@@ -170,29 +124,17 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
170 |
$this->jsTrans['selecmiss'] = __('Select at least 1 subscriber!',WYSIJA);
|
171 |
|
172 |
// get the total count for subscribed, unsubscribed and unconfirmed users
|
173 |
-
$select = array( '
|
174 |
$count_group_by = 'status';
|
175 |
$count_by_status = $this->modelObj->get_subscribers( $select , array() , $count_group_by );
|
176 |
-
if ($this->_filter_by_inactive_users) {
|
177 |
-
$inactive_users = $this->modelObj->count_inactive_users();
|
178 |
-
if ($inactive_users) {
|
179 |
-
array_unshift($count_by_status, array(
|
180 |
-
'users' => $inactive_users['count'],
|
181 |
-
'status' => -99,//-99 = inactive
|
182 |
-
'max_create_at' => $inactive_users['max_created_at']
|
183 |
-
));
|
184 |
-
}
|
185 |
-
}
|
186 |
-
|
187 |
|
188 |
$counts = $this->modelObj->structure_user_status_count_array($count_by_status);
|
189 |
$arr_max_create_at = $this->modelObj->get_max_create($count_by_status);
|
190 |
|
191 |
// count the rows based on the filters
|
192 |
$filters = $this->modelObj->detect_filters();
|
193 |
-
|
194 |
$select = array( 'COUNT(DISTINCT([wysija]user.user_id)) as total_users', 'MAX([wysija]user.created_at) as max_create_at');
|
195 |
-
$count_rows = $this->modelObj->get_subscribers( $select, $filters);
|
196 |
|
197 |
// without filter we already have the total number of subscribers
|
198 |
$this->data['max_create_at'] = null; //max value of create_at field of current list of users
|
@@ -206,22 +148,12 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
206 |
$this->modelObj->countRows=$counts['all'];
|
207 |
}
|
208 |
|
209 |
-
$select = array(
|
210 |
-
'[wysija]user.firstname',
|
211 |
-
'[wysija]user.lastname',
|
212 |
-
'[wysija]user.status',
|
213 |
-
'[wysija]user.email',
|
214 |
-
'[wysija]user.created_at',
|
215 |
-
'[wysija]user.last_opened',
|
216 |
-
'[wysija]user.last_clicked',
|
217 |
-
'[wysija]user_list.user_id'
|
218 |
-
);
|
219 |
|
220 |
-
$this->data['subscribers'] = $this->modelObj->get_subscribers($select , $filters
|
221 |
|
222 |
$this->data['current_counts'] = $this->modelObj->countRows;
|
223 |
$this->data['show_batch_select'] = ($this->modelObj->limit >= $this->modelObj->countRows) ? false : true;
|
224 |
-
$this->data['selected_lists'] = $this->get_selected_lists();
|
225 |
$this->modelObj->reset();
|
226 |
|
227 |
|
@@ -290,7 +222,6 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
290 |
$this->messages['insert'][false]=__('Subscriber has not been saved.',WYSIJA);
|
291 |
$this->messages['update'][true]=__('Subscriber has been modified. [link]Edit again[/link].',WYSIJA);
|
292 |
$this->messages['update'][false]=__('Subscriber has not been modified.',WYSIJA);
|
293 |
-
$this->cleanup_form();
|
294 |
parent::WYSIJA_control_back();
|
295 |
|
296 |
//we change the default model of the controller based on the action
|
@@ -310,38 +241,9 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
310 |
if(!isset($_REQUEST['action']) || !$_REQUEST['action']) {
|
311 |
$this->defaultDisplay();
|
312 |
$this->checkTotalSubscribers();
|
313 |
-
} else {
|
314 |
-
$this->_tryAction($_REQUEST['action']);
|
315 |
}
|
316 |
-
|
317 |
-
$this->_tryAction($_REQUEST['method']);
|
318 |
-
}
|
319 |
-
}
|
320 |
|
321 |
-
/**
|
322 |
-
* We are using the same form for different purposes:
|
323 |
-
* - Bulk actions
|
324 |
-
* - Filter by list
|
325 |
-
* We need to remove all un-necessary values from interface
|
326 |
-
*/
|
327 |
-
protected function cleanup_form() {
|
328 |
-
if (!empty($_REQUEST['doaction'])) {
|
329 |
-
$action_type = strtolower(trim($_REQUEST['doaction']));
|
330 |
-
switch ($action_type)
|
331 |
-
{
|
332 |
-
// Filter by list
|
333 |
-
case 'filter':
|
334 |
-
if (!empty($_REQUEST['wysija']['user']))
|
335 |
-
unset($_REQUEST['wysija']['user']);
|
336 |
-
if (!empty($_REQUEST['action']))
|
337 |
-
unset($_REQUEST['action']);
|
338 |
-
break;
|
339 |
-
// Bulk action. Nothing to do, because we will invoke _tryAction() directly right after this step
|
340 |
-
case 'apply':
|
341 |
-
default:
|
342 |
-
break;
|
343 |
-
}
|
344 |
-
}
|
345 |
}
|
346 |
|
347 |
/**
|
@@ -363,49 +265,30 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
363 |
$this->notice(sprintf(__('%1$s subscribers have been added to "%2$s".',WYSIJA),$this->_affected_rows,$result['name']));
|
364 |
else
|
365 |
$this->notice(sprintf(__('%1$s subscriber have been added to "%2$s".',WYSIJA),$this->_affected_rows,$result['name']));
|
366 |
-
$this->
|
367 |
}
|
368 |
|
369 |
/**
|
370 |
-
*
|
371 |
-
*
|
372 |
-
* @param array $data List id to move, $data = array('listid' => 1);
|
373 |
*/
|
374 |
-
function movetolist($data)
|
375 |
-
$
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
$helper_user->moveToList($data['listid'], $_POST['wysija']['user']['user_id']);
|
381 |
-
}
|
382 |
-
|
383 |
-
$model_list = WYSIJA::get('list','model');
|
384 |
-
$result = $model_list->getOne(array('name'), array('list_id' => $data['listid']));
|
385 |
|
386 |
-
|
387 |
-
|
388 |
-
} else {
|
389 |
-
$this->notice(sprintf(__('%1$s subscriber have been moved to "%2$s".',WYSIJA), $this->_affected_rows, $result['name']));
|
390 |
-
}
|
391 |
|
392 |
-
$this->
|
|
|
|
|
|
|
|
|
393 |
}
|
394 |
|
395 |
-
/**
|
396 |
-
* After performing a bulk action, let's keep the current list filter
|
397 |
-
*/
|
398 |
-
protected function redirect_after_bulk_action() {
|
399 |
-
$filter_list = !empty($_REQUEST['wysija']['filter']['filter_list']) ? $_REQUEST['wysija']['filter']['filter_list'] : 0;
|
400 |
-
if (empty($filter_list)) {// view all lists
|
401 |
-
$this->redirect('admin.php?page=wysija_subscribers');
|
402 |
-
} elseif (is_numeric($filter_list)) {
|
403 |
-
$this->redirect('admin.php?page=wysija_subscribers&filter-list='.$filter_list);
|
404 |
-
} else {// subscribers in no list
|
405 |
-
$this->redirect('admin.php?page=wysija_subscribers&filter-list=orphaned');
|
406 |
-
}
|
407 |
-
}
|
408 |
-
|
409 |
/**
|
410 |
* Bulk action remove subscribers from all existing lists
|
411 |
* @param type $data = array('list_id'=>?)
|
@@ -418,10 +301,10 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
418 |
$helpU->removeFromLists(array(),$_POST['wysija']['user']['user_id']);
|
419 |
|
420 |
if($this->_affected_rows > 1)
|
421 |
-
$this->notice(sprintf(__('%1$s subscribers have been removed from all
|
422 |
else
|
423 |
-
$this->notice(sprintf(__('%1$s subscriber have been removed from all
|
424 |
-
$this->
|
425 |
}
|
426 |
|
427 |
/**
|
@@ -441,8 +324,7 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
441 |
$this->notice(sprintf(__('%1$s subscribers have been removed from "%2$s".',WYSIJA),$this->_affected_rows, $result['name']));
|
442 |
else
|
443 |
$this->notice(sprintf(__('%1$s subscriber have been removed from "%2$s".',WYSIJA),$this->_affected_rows, $result['name']));
|
444 |
-
|
445 |
-
$this->redirect_after_bulk_action();
|
446 |
}
|
447 |
|
448 |
/**
|
@@ -459,7 +341,7 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
459 |
$this->notice(sprintf(__('%1$s subscribers have been confirmed.',WYSIJA),$this->_affected_rows));
|
460 |
else
|
461 |
$this->notice(sprintf(__('%1$s subscriber have been confirmed.',WYSIJA),$this->_affected_rows));
|
462 |
-
$this->
|
463 |
}
|
464 |
|
465 |
/**
|
@@ -564,38 +446,62 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
564 |
|
565 |
function edit($id=false){
|
566 |
|
567 |
-
if
|
568 |
-
|
569 |
-
return;
|
570 |
-
}
|
571 |
|
572 |
-
|
|
|
573 |
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
580 |
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
|
|
587 |
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
);
|
592 |
-
$this->data['hooks']['hook_subscriber_left'] = apply_filters('hook_subscriber_left',WYSIJA_module::execute_hook('hook_subscriber_left', $hook_params), $hook_params);
|
593 |
-
$this->data['hooks']['hook_subscriber_right'] = apply_filters('hook_subscriber_right',WYSIJA_module::execute_hook('hook_subscriber_right', $hook_params), $hook_params);
|
594 |
-
$this->data['hooks']['hook_subscriber_bottom'] = apply_filters('hook_subscriber_bottom',WYSIJA_module::execute_hook('hook_subscriber_bottom', $hook_params), $hook_params);
|
595 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
596 |
|
597 |
-
// prepare js, for rendering
|
598 |
-
$this->js[]='wysija-validator';
|
599 |
}
|
600 |
|
601 |
function deletelist(){
|
@@ -667,7 +573,7 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
667 |
if($_REQUEST['wysija']['list']['is_public']=='on')$_REQUEST['wysija']['list']['is_public']=1;
|
668 |
else $_REQUEST['wysija']['list']['is_public']=0;
|
669 |
}else{
|
670 |
-
|
671 |
}
|
672 |
|
673 |
if($update){
|
@@ -691,7 +597,7 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
691 |
$this->requireSecurity();
|
692 |
$this->_resetGlobMsg();
|
693 |
$model_config=WYSIJA::get('config','model');
|
694 |
-
$helper_import=WYSIJA::get('
|
695 |
$plugins_importable=$model_config->getValue('pluginsImportableEgg');
|
696 |
$plugins_imported=array();
|
697 |
foreach($_REQUEST['wysija']['import'] as $table_name =>$result){
|
@@ -747,10 +653,7 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
747 |
}
|
748 |
|
749 |
function importmatch(){
|
750 |
-
$this->jsTrans['subscribers_import_match_confirmation_1'] = __('The selected value is already matched to another column.', WYSIJA);
|
751 |
-
$this->jsTrans['subscribers_import_match_confirmation_2'] = __('Can you confirm that this column is corresponding to that field?', WYSIJA);
|
752 |
$this->js[] = 'wysija-validator';
|
753 |
-
wp_enqueue_script('jquery-matchColumn', WYSIJA_URL.'js/jquery/jquery.matchColumn.js', array('jquery'), WYSIJA::get_version());
|
754 |
$helper_numbers = WYSIJA::get('numbers','helper');
|
755 |
$bytes = $helper_numbers->get_max_file_upload();
|
756 |
|
@@ -859,16 +762,16 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
859 |
}
|
860 |
|
861 |
//get a list of list name
|
862 |
-
$model
|
863 |
-
$results
|
864 |
|
865 |
-
$
|
866 |
-
foreach($results as $k =>$v) $
|
867 |
|
868 |
-
$this->notice(
|
869 |
$data_numbers['list_user_ids'],
|
870 |
-
'"'.implode('", "',$
|
871 |
-
)
|
872 |
|
873 |
if(count($duplicate_emails_count)>0){
|
874 |
$list_emails = '';
|
@@ -883,8 +786,7 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
883 |
}
|
884 |
|
885 |
if(count($data_numbers['invalid'])>0){
|
886 |
-
$
|
887 |
-
$this->notice($string,0);
|
888 |
}
|
889 |
|
890 |
$this->redirect();
|
@@ -974,7 +876,7 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
974 |
|
975 |
// make sure the total count of subscribers is updated
|
976 |
$helper_user->refreshUsers();
|
977 |
-
$this->
|
978 |
}
|
979 |
|
980 |
/**
|
@@ -1011,10 +913,6 @@ class WYSIJA_control_back_subscribers extends WYSIJA_control_back{
|
|
1011 |
|
1012 |
|
1013 |
|
1014 |
-
function bulk_action(){
|
1015 |
-
return true;
|
1016 |
-
}
|
1017 |
-
|
1018 |
|
1019 |
|
1020 |
|
8 |
var $_separators = array(',', ';'); // csv separator; comma is for standard csv, semi-colon is good for Excel
|
9 |
var $_default_separator = ';';
|
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
function WYSIJA_control_back_subscribers(){
|
12 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
}
|
14 |
|
15 |
function save(){
|
89 |
$notEqual=array_merge($core_listids, $arrayLists);
|
90 |
|
91 |
//unsubscribe from lists which exist in the old list but does not exist in the new list
|
92 |
+
$unsubsribe_list = array_diff(array_keys($oldlistids),$_POST['wysija']['user_list']['list_id']);
|
93 |
if(!empty($unsubsribe_list))
|
94 |
{
|
95 |
$modelUL->reset();
|
96 |
$modelUL->update(array('unsub_date'=>time()),array('user_id'=>$id,'list_id'=>$unsubsribe_list));
|
97 |
}
|
98 |
$modelUL->reset();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
99 |
}else{
|
100 |
//instead of going through a classic save we should save through the helper
|
101 |
$data=$_REQUEST['wysija'];
|
115 |
}
|
116 |
|
117 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
118 |
|
119 |
function defaultDisplay(){
|
120 |
$this->viewShow=$this->action='main';
|
124 |
$this->jsTrans['selecmiss'] = __('Select at least 1 subscriber!',WYSIJA);
|
125 |
|
126 |
// get the total count for subscribed, unsubscribed and unconfirmed users
|
127 |
+
$select = array( 'count(user_id) as users' , 'status' , 'max(created_at) as max_create_at');
|
128 |
$count_group_by = 'status';
|
129 |
$count_by_status = $this->modelObj->get_subscribers( $select , array() , $count_group_by );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
130 |
|
131 |
$counts = $this->modelObj->structure_user_status_count_array($count_by_status);
|
132 |
$arr_max_create_at = $this->modelObj->get_max_create($count_by_status);
|
133 |
|
134 |
// count the rows based on the filters
|
135 |
$filters = $this->modelObj->detect_filters();
|
|
|
136 |
$select = array( 'COUNT(DISTINCT([wysija]user.user_id)) as total_users', 'MAX([wysija]user.created_at) as max_create_at');
|
137 |
+
$count_rows = $this->modelObj->get_subscribers( $select, $filters );
|
138 |
|
139 |
// without filter we already have the total number of subscribers
|
140 |
$this->data['max_create_at'] = null; //max value of create_at field of current list of users
|
148 |
$this->modelObj->countRows=$counts['all'];
|
149 |
}
|
150 |
|
151 |
+
$select = array( '[wysija]user.firstname', '[wysija]user.lastname', '[wysija]user.status', '[wysija]user.email', '[wysija]user.created_at', '[wysija]user_list.user_id' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
152 |
|
153 |
+
$this->data['subscribers'] = $this->modelObj->get_subscribers($select , $filters);
|
154 |
|
155 |
$this->data['current_counts'] = $this->modelObj->countRows;
|
156 |
$this->data['show_batch_select'] = ($this->modelObj->limit >= $this->modelObj->countRows) ? false : true;
|
|
|
157 |
$this->modelObj->reset();
|
158 |
|
159 |
|
222 |
$this->messages['insert'][false]=__('Subscriber has not been saved.',WYSIJA);
|
223 |
$this->messages['update'][true]=__('Subscriber has been modified. [link]Edit again[/link].',WYSIJA);
|
224 |
$this->messages['update'][false]=__('Subscriber has not been modified.',WYSIJA);
|
|
|
225 |
parent::WYSIJA_control_back();
|
226 |
|
227 |
//we change the default model of the controller based on the action
|
241 |
if(!isset($_REQUEST['action']) || !$_REQUEST['action']) {
|
242 |
$this->defaultDisplay();
|
243 |
$this->checkTotalSubscribers();
|
|
|
|
|
244 |
}
|
245 |
+
else $this->_tryAction($_REQUEST['action']);
|
|
|
|
|
|
|
246 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
247 |
}
|
248 |
|
249 |
/**
|
265 |
$this->notice(sprintf(__('%1$s subscribers have been added to "%2$s".',WYSIJA),$this->_affected_rows,$result['name']));
|
266 |
else
|
267 |
$this->notice(sprintf(__('%1$s subscriber have been added to "%2$s".',WYSIJA),$this->_affected_rows,$result['name']));
|
268 |
+
$this->redirect('admin.php?page=wysija_subscribers&filter-list='.$data['listid']);
|
269 |
}
|
270 |
|
271 |
/**
|
272 |
+
* bulk action move to list
|
273 |
+
* @param type $data = array('list_id'=>?)
|
|
|
274 |
*/
|
275 |
+
function movetolist($data){
|
276 |
+
$helpU=WYSIJA::get('user','helper');
|
277 |
+
if(!empty($this->_batch_select))
|
278 |
+
$helpU->moveToList($data['listid'],$this->_batch_select, true);
|
279 |
+
else
|
280 |
+
$helpU->moveToList($data['listid'],$_POST['wysija']['user']['user_id']);
|
|
|
|
|
|
|
|
|
|
|
281 |
|
282 |
+
$modelL=WYSIJA::get('list','model');
|
283 |
+
$result=$modelL->getOne(array('name'),array('list_id'=>$data['listid']));
|
|
|
|
|
|
|
284 |
|
285 |
+
if($this->_affected_rows > 1)
|
286 |
+
$this->notice(sprintf(__('%1$s subscribers have been moved to "%2$s".',WYSIJA),$this->_affected_rows,$result['name']));
|
287 |
+
else
|
288 |
+
$this->notice(sprintf(__('%1$s subscriber have been moved to "%2$s".',WYSIJA),$this->_affected_rows,$result['name']));
|
289 |
+
$this->redirect('admin.php?page=wysija_subscribers&filter-list='.$data['listid']);
|
290 |
}
|
291 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
/**
|
293 |
* Bulk action remove subscribers from all existing lists
|
294 |
* @param type $data = array('list_id'=>?)
|
301 |
$helpU->removeFromLists(array(),$_POST['wysija']['user']['user_id']);
|
302 |
|
303 |
if($this->_affected_rows > 1)
|
304 |
+
$this->notice(sprintf(__('%1$s subscribers have been removed from all exising lists.',WYSIJA),$this->_affected_rows));
|
305 |
else
|
306 |
+
$this->notice(sprintf(__('%1$s subscriber have been removed from all exising lists.',WYSIJA),$this->_affected_rows));
|
307 |
+
$this->defaultDisplay();
|
308 |
}
|
309 |
|
310 |
/**
|
324 |
$this->notice(sprintf(__('%1$s subscribers have been removed from "%2$s".',WYSIJA),$this->_affected_rows, $result['name']));
|
325 |
else
|
326 |
$this->notice(sprintf(__('%1$s subscriber have been removed from "%2$s".',WYSIJA),$this->_affected_rows, $result['name']));
|
327 |
+
$this->redirect('admin.php?page=wysija_subscribers&filter-list='.$data['listid']);
|
|
|
328 |
}
|
329 |
|
330 |
/**
|
341 |
$this->notice(sprintf(__('%1$s subscribers have been confirmed.',WYSIJA),$this->_affected_rows));
|
342 |
else
|
343 |
$this->notice(sprintf(__('%1$s subscriber have been confirmed.',WYSIJA),$this->_affected_rows));
|
344 |
+
$this->defaultDisplay();
|
345 |
}
|
346 |
|
347 |
/**
|
446 |
|
447 |
function edit($id=false){
|
448 |
|
449 |
+
if(isset($_REQUEST['id']) || $id){
|
450 |
+
if(!$id) $id=$_REQUEST['id'];
|
|
|
|
|
451 |
|
452 |
+
$this->js[]='wysija-validator';
|
453 |
+
$this->js[]='wysija-charts';
|
454 |
|
455 |
+
$this->data=array();
|
456 |
+
$this->data['user']=$this->modelObj->getDetails(array('user_id'=>$id),true);
|
457 |
+
if(!$this->data['user']){
|
458 |
+
$this->notice(__('No subscriber found, most probably because he was deleted.',WYSIJA));
|
459 |
+
return $this->redirect();
|
460 |
+
}
|
461 |
+
$model_list=WYSIJA::get('list','model');
|
462 |
+
$model_list->limitON=false;
|
463 |
+
$model_list->orderBy('is_enabled','DESC');
|
464 |
+
$this->data['list']=$model_list->get(false,array('greater'=>array('is_enabled'=>'-1') ));
|
465 |
+
|
466 |
+
//we prepare the data to be passed to the charts script
|
467 |
+
$this->data['charts']['title']=' ';
|
468 |
+
$this->data['charts']['stats']=array();
|
469 |
+
|
470 |
+
//group email user stats by status where userid
|
471 |
+
$model_email_user_stat=WYSIJA::get('email_user_stat','model');
|
472 |
+
$model_email_user_stat->setConditions(array('equal'=>array('user_id'=>$id)));
|
473 |
+
$query='SELECT count(email_id) as emails, status FROM `[wysija]'.$model_email_user_stat->table_name."`";
|
474 |
+
$query.=$model_email_user_stat->makeWhere();
|
475 |
+
$query.=' GROUP BY status';
|
476 |
+
$grouped_counts=$model_email_user_stat->query('get_res',$query,ARRAY_A);
|
477 |
+
|
478 |
+
//-2 is an automatic unsubscribed made through bounce processing
|
479 |
+
$statuses=array('-1'=>__('Bounced',WYSIJA),'0'=>__('Unopened',WYSIJA),'1'=>__('Opened',WYSIJA),'2'=>__('Clicked',WYSIJA),'3'=>__('Unsubscribed',WYSIJA) ,'-2'=>__('Unsubscribed',WYSIJA));
|
480 |
+
foreach($grouped_counts as $count){
|
481 |
+
$this->data['charts']['stats'][]=array('name'=>$statuses[$count['status']],'number'=>$count['emails']);
|
482 |
+
}
|
483 |
|
484 |
+
//email_user_url
|
485 |
+
$modelEUU=WYSIJA::get('email_user_url','model');
|
486 |
+
$modelEUU->setConditions(array('equal'=>array('user_id'=>$id)));
|
487 |
+
$query='SELECT A.*,B.*,C.subject as name FROM `[wysija]'.$modelEUU->table_name."` as A JOIN `[wysija]url` as B on A.url_id=B.url_id JOIN `[wysija]email` as C on C.email_id=A.email_id ";
|
488 |
+
$query.=$model_email_user_stat->makeWhere();
|
489 |
+
$query.=' ORDER BY A.number_clicked DESC ';
|
490 |
+
$this->data['clicks']=$model_email_user_stat->query('get_res',$query,ARRAY_A);
|
491 |
|
492 |
+
foreach($this->data['clicks'] as $k => &$v){
|
493 |
+
$v['url']=urldecode(utf8_encode($v['url']));
|
494 |
+
}
|
|
|
|
|
|
|
|
|
495 |
|
496 |
+
$chartsencoded=base64_encode(json_encode($this->data['charts']));
|
497 |
+
wp_enqueue_script('wysija-admin-subscribers-edit-manual', WYSIJA_URL.'js/admin-subscribers-edit-manual.php?data='.$chartsencoded, array( 'wysija-charts' ), true);
|
498 |
+
|
499 |
+
$this->viewObj->title=__('Edit',WYSIJA).' '.$this->data['user']['details']['email'];
|
500 |
+
|
501 |
+
}else{
|
502 |
+
$this->error('Cannot edit element primary key is missing : '. get_class($this));
|
503 |
+
}
|
504 |
|
|
|
|
|
505 |
}
|
506 |
|
507 |
function deletelist(){
|
573 |
if($_REQUEST['wysija']['list']['is_public']=='on')$_REQUEST['wysija']['list']['is_public']=1;
|
574 |
else $_REQUEST['wysija']['list']['is_public']=0;
|
575 |
}else{
|
576 |
+
$_REQUEST['wysija']['list']['is_public']=0;
|
577 |
}
|
578 |
|
579 |
if($update){
|
597 |
$this->requireSecurity();
|
598 |
$this->_resetGlobMsg();
|
599 |
$model_config=WYSIJA::get('config','model');
|
600 |
+
$helper_import=WYSIJA::get('import','helper');
|
601 |
$plugins_importable=$model_config->getValue('pluginsImportableEgg');
|
602 |
$plugins_imported=array();
|
603 |
foreach($_REQUEST['wysija']['import'] as $table_name =>$result){
|
653 |
}
|
654 |
|
655 |
function importmatch(){
|
|
|
|
|
656 |
$this->js[] = 'wysija-validator';
|
|
|
657 |
$helper_numbers = WYSIJA::get('numbers','helper');
|
658 |
$bytes = $helper_numbers->get_max_file_upload();
|
659 |
|
762 |
}
|
763 |
|
764 |
//get a list of list name
|
765 |
+
$model=WYSIJA::get('list','model');
|
766 |
+
$results=$model->get(array('name'),array('list_id'=>$_REQUEST['wysija']['user_list']['list']));
|
767 |
|
768 |
+
$listnames=array();
|
769 |
+
foreach($results as $k =>$v) $listnames[]=$v['name'];
|
770 |
|
771 |
+
$this->notice(sprintf(__('%1$s subscribers added to %2$s.', WYSIJA),
|
772 |
$data_numbers['list_user_ids'],
|
773 |
+
'"'.implode('", "',$listnames).'"'
|
774 |
+
));
|
775 |
|
776 |
if(count($duplicate_emails_count)>0){
|
777 |
$list_emails = '';
|
786 |
}
|
787 |
|
788 |
if(count($data_numbers['invalid'])>0){
|
789 |
+
$this->notice(sprintf(__('%1$s emails are not valid : %2$s.',WYSIJA),count($data_numbers['invalid']),implode(', ',$data_numbers['invalid'])),0);
|
|
|
790 |
}
|
791 |
|
792 |
$this->redirect();
|
876 |
|
877 |
// make sure the total count of subscribers is updated
|
878 |
$helper_user->refreshUsers();
|
879 |
+
$this->redirect();
|
880 |
}
|
881 |
|
882 |
/**
|
913 |
|
914 |
|
915 |
|
|
|
|
|
|
|
|
|
916 |
|
917 |
|
918 |
|
controllers/front/confirm.php
CHANGED
@@ -34,15 +34,7 @@ class WYSIJA_control_front_confirm extends WYSIJA_control_front{
|
|
34 |
$helper_user->confirm_user();
|
35 |
|
36 |
if(!empty($helper_user->title)) $this->title = $helper_user->title;
|
37 |
-
if(!empty($helper_user->subtitle)) $this->
|
38 |
-
}else{
|
39 |
-
$model_config=WYSIJA::get('config','model');
|
40 |
-
|
41 |
-
// we need to call the translation otherwise it will not be loaded and translated
|
42 |
-
$model_config->add_translated_default();
|
43 |
-
|
44 |
-
$this->title = sprintf($model_config->getValue('subscribed_title'), 'demo');
|
45 |
-
$this->optional_subtitle=$model_config->getValue('subscribed_subtitle');
|
46 |
}
|
47 |
|
48 |
return true;
|
@@ -54,13 +46,13 @@ class WYSIJA_control_front_confirm extends WYSIJA_control_front{
|
|
54 |
// we need to call the translation otherwise it will not be loaded and translated
|
55 |
$model_config->add_translated_default();
|
56 |
|
57 |
-
$this->title
|
58 |
-
if(!isset($model_config->values['unsubscribed_title'])) $this->title
|
59 |
|
60 |
-
$this->
|
61 |
-
if(!isset($model_config->values['unsubscribed_subtitle'])) $this->
|
62 |
|
63 |
-
$undo_paramsurl
|
64 |
'wysija-page'=>1,
|
65 |
'controller'=>'confirm',
|
66 |
'action'=>'undounsubscribe',
|
@@ -79,16 +71,13 @@ class WYSIJA_control_front_confirm extends WYSIJA_control_front{
|
|
79 |
return false;
|
80 |
}
|
81 |
}
|
82 |
-
}else{
|
83 |
-
$undo_paramsurl['demo'] = 1;
|
84 |
}
|
|
|
|
|
85 |
|
86 |
-
$
|
87 |
-
|
88 |
-
|
89 |
-
$this->undo_unsubscribe = str_replace(
|
90 |
array('[link]','[/link]'),
|
91 |
-
array('<a href="'
|
92 |
'<p><b>'.__('You made a mistake? [link]Undo unsubscribe[/link].',WYSIJA)).'</b></p>';
|
93 |
return true;
|
94 |
}
|
@@ -212,18 +201,16 @@ class WYSIJA_control_front_confirm extends WYSIJA_control_front{
|
|
212 |
$modelUL->backSave=true;
|
213 |
/* list of core list */
|
214 |
$modelLIST=WYSIJA::get('list','model');
|
215 |
-
|
216 |
-
|
217 |
-
$results=$modelLIST->get(array('list_id'),array('like' => array('is_enabled'=>0, 'is_public' => 0)));
|
218 |
-
$static_listids=array();
|
219 |
foreach($results as $res){
|
220 |
-
$
|
221 |
}
|
222 |
|
223 |
//0 - get current lists of the user
|
224 |
$userlists=$modelUL->get(array('list_id','unsub_date'),array('user_id'=>$id));
|
225 |
|
226 |
-
$oldlistids=$
|
227 |
foreach($userlists as $listdata) $oldlistids[$listdata['list_id']]=$listdata['unsub_date'];
|
228 |
|
229 |
$config=WYSIJA::get('config','model');
|
@@ -236,7 +223,7 @@ class WYSIJA_control_front_confirm extends WYSIJA_control_front{
|
|
236 |
//if the list is not already recorded for the user then we will need to insert it
|
237 |
if(!isset($oldlistids[$list_id])){
|
238 |
$modelUL->reset();
|
239 |
-
$
|
240 |
$dataul=array('user_id'=>$id,'list_id'=>$list_id,'sub_date'=>time());
|
241 |
//if double optin is on then we want to send a confirmation email for newly added subscription
|
242 |
if($dbloptin){
|
@@ -259,44 +246,21 @@ class WYSIJA_control_front_confirm extends WYSIJA_control_front{
|
|
259 |
|
260 |
|
261 |
//if a confirmation email needs to be sent then we send it
|
262 |
-
|
263 |
-
|
264 |
-
$send_confirmation = true;
|
265 |
-
$send_confirmation = apply_filters('mpoet_confirm_new_list_subscriptions_page', $send_confirmation);
|
266 |
-
|
267 |
-
if($send_confirmation === true){
|
268 |
-
$hUser->sendConfirmationEmail($id,true,$new_list_ids);
|
269 |
-
}else{
|
270 |
-
// this case has been made so that when subscribers add themselves to a
|
271 |
-
// list through the edit your subscription form they don't receive a confirmation email they already confirmed.
|
272 |
-
// so they receive also the autorespo,nders correspondign to that list immediately.
|
273 |
-
$helper_user = WYSIJA::get('user','helper');
|
274 |
-
$_REQUEST['wysiconf'] = base64_encode(serialize($new_list_ids));
|
275 |
-
$helper_user->confirm_user();
|
276 |
-
}
|
277 |
}
|
278 |
|
279 |
// list ids
|
280 |
$list_ids = !empty($_POST['wysija']['user_list']['list_id']) ? $_POST['wysija']['user_list']['list_id'] : array();
|
281 |
if(is_array($list_ids) === false) $list_ids = array();
|
282 |
|
283 |
-
$notEqual = array_merge($
|
284 |
|
285 |
//delete the lists from which you've removed yourself
|
286 |
$condiFirst = array('notequal'=>array('list_id'=> $notEqual), 'equal' => array('user_id' => $id, 'unsub_date' => 0));
|
287 |
$modelUL=WYSIJA::get('user_list','model');
|
288 |
$modelUL->update(array('unsub_date'=>time()),$condiFirst);
|
289 |
$modelUL->reset();
|
290 |
-
|
291 |
-
/*
|
292 |
-
Custom Fields.
|
293 |
-
*/
|
294 |
-
if (isset($_POST['wysija']['field'])) {
|
295 |
-
WJ_FieldHandler::handle_all(
|
296 |
-
$_POST['wysija']['field'], $id
|
297 |
-
);
|
298 |
-
}
|
299 |
-
|
300 |
$this->notice(__('Newsletter profile has been updated.',WYSIJA));
|
301 |
$this->subscriptions();
|
302 |
|
@@ -305,4 +269,4 @@ class WYSIJA_control_front_confirm extends WYSIJA_control_front{
|
|
305 |
}
|
306 |
return true;
|
307 |
}
|
308 |
-
}
|
34 |
$helper_user->confirm_user();
|
35 |
|
36 |
if(!empty($helper_user->title)) $this->title = $helper_user->title;
|
37 |
+
if(!empty($helper_user->subtitle)) $this->subtitle = $helper_user->subtitle;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
}
|
39 |
|
40 |
return true;
|
46 |
// we need to call the translation otherwise it will not be loaded and translated
|
47 |
$model_config->add_translated_default();
|
48 |
|
49 |
+
$this->title=$model_config->getValue('unsubscribed_title');
|
50 |
+
if(!isset($model_config->values['unsubscribed_title'])) $this->title=__("You've unsubscribed!",WYSIJA);
|
51 |
|
52 |
+
$this->subtitle=$model_config->getValue('unsubscribed_subtitle');
|
53 |
+
if(!isset($model_config->values['unsubscribed_subtitle'])) $this->subtitle=__("Great, you'll never hear from us again!",WYSIJA);
|
54 |
|
55 |
+
$undo_paramsurl=array(
|
56 |
'wysija-page'=>1,
|
57 |
'controller'=>'confirm',
|
58 |
'action'=>'undounsubscribe',
|
71 |
return false;
|
72 |
}
|
73 |
}
|
|
|
|
|
74 |
}
|
75 |
+
else
|
76 |
+
$undo_paramsurl['demo'] = 1;
|
77 |
|
78 |
+
$this->subtitle .= str_replace(
|
|
|
|
|
|
|
79 |
array('[link]','[/link]'),
|
80 |
+
array('<a href="'.WYSIJA::get_permalink($model_config->getValue('confirm_email_link'),$undo_paramsurl).'">','</a>'),
|
81 |
'<p><b>'.__('You made a mistake? [link]Undo unsubscribe[/link].',WYSIJA)).'</b></p>';
|
82 |
return true;
|
83 |
}
|
201 |
$modelUL->backSave=true;
|
202 |
/* list of core list */
|
203 |
$modelLIST=WYSIJA::get('list','model');
|
204 |
+
$results=$modelLIST->get(array('list_id'),array('is_enabled'=>'0'));
|
205 |
+
$core_listids=array();
|
|
|
|
|
206 |
foreach($results as $res){
|
207 |
+
$core_listids[]=$res['list_id'];
|
208 |
}
|
209 |
|
210 |
//0 - get current lists of the user
|
211 |
$userlists=$modelUL->get(array('list_id','unsub_date'),array('user_id'=>$id));
|
212 |
|
213 |
+
$oldlistids=$newlistids=array();
|
214 |
foreach($userlists as $listdata) $oldlistids[$listdata['list_id']]=$listdata['unsub_date'];
|
215 |
|
216 |
$config=WYSIJA::get('config','model');
|
223 |
//if the list is not already recorded for the user then we will need to insert it
|
224 |
if(!isset($oldlistids[$list_id])){
|
225 |
$modelUL->reset();
|
226 |
+
$newlistids[]=$list_id;
|
227 |
$dataul=array('user_id'=>$id,'list_id'=>$list_id,'sub_date'=>time());
|
228 |
//if double optin is on then we want to send a confirmation email for newly added subscription
|
229 |
if($dbloptin){
|
246 |
|
247 |
|
248 |
//if a confirmation email needs to be sent then we send it
|
249 |
+
if($dbloptin && !empty($newlistids)){
|
250 |
+
$hUser->sendConfirmationEmail($id,true,$newlistids);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
251 |
}
|
252 |
|
253 |
// list ids
|
254 |
$list_ids = !empty($_POST['wysija']['user_list']['list_id']) ? $_POST['wysija']['user_list']['list_id'] : array();
|
255 |
if(is_array($list_ids) === false) $list_ids = array();
|
256 |
|
257 |
+
$notEqual = array_merge($core_listids, $list_ids);
|
258 |
|
259 |
//delete the lists from which you've removed yourself
|
260 |
$condiFirst = array('notequal'=>array('list_id'=> $notEqual), 'equal' => array('user_id' => $id, 'unsub_date' => 0));
|
261 |
$modelUL=WYSIJA::get('user_list','model');
|
262 |
$modelUL->update(array('unsub_date'=>time()),$condiFirst);
|
263 |
$modelUL->reset();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
264 |
$this->notice(__('Newsletter profile has been updated.',WYSIJA));
|
265 |
$this->subscriptions();
|
266 |
|
269 |
}
|
270 |
return true;
|
271 |
}
|
272 |
+
}
|
controllers/front/email.php
CHANGED
@@ -20,7 +20,7 @@ class WYSIJA_control_front_email extends WYSIJA_control_front{
|
|
20 |
$emailM->getFormat = OBJECT;
|
21 |
// Get config model
|
22 |
$configM = WYSIJA::get('config','model');
|
23 |
-
|
24 |
// Helpers
|
25 |
$emailH = WYSIJA::get('email','helper');
|
26 |
$mailerH = WYSIJA::get('mailer','helper');
|
@@ -43,20 +43,17 @@ class WYSIJA_control_front_email extends WYSIJA_control_front{
|
|
43 |
|
44 |
// Get current user object if possible
|
45 |
$current_user = null;
|
46 |
-
if(isset($_REQUEST['user_id'])
|
47 |
// Get User Model
|
48 |
$userM = WYSIJA::get('user','model');
|
49 |
$userM->getFormat = OBJECT;
|
50 |
$current_user = $userM->getOne((int)$_REQUEST['user_id']);
|
51 |
}
|
|
|
52 |
// Parse and replace user tags.
|
53 |
$mailerH->parseUserTags($current_email);
|
54 |
$mailerH->parseSubjectUserTags($current_email);
|
55 |
-
|
56 |
-
// Start tracking if this preview is opened from a newsletter
|
57 |
-
if ($current_user !== null) {
|
58 |
-
$mailerH->tracker_replaceusertags($current_email, $current_user);
|
59 |
-
}
|
60 |
|
61 |
// Set Body
|
62 |
$email_render = $current_email->body;
|
@@ -72,22 +69,17 @@ class WYSIJA_control_front_email extends WYSIJA_control_front{
|
|
72 |
$find[] = '[total]';
|
73 |
$replace[] = $current_email->params['autonl']['articles']['total'];
|
74 |
}
|
75 |
-
|
76 |
-
// if (isset($current_email->params['autonl']['articles']['ids'])){
|
77 |
-
// $find[] = '[number]';
|
78 |
-
// $replace[] = count($current_email->params['autonl']['articles']['ids']);
|
79 |
-
// }
|
80 |
-
|
81 |
-
if (isset($current_email->params['autonl']['total_child'])){
|
82 |
$find[] = '[number]';
|
83 |
-
$replace[] = $current_email->params['autonl']['
|
84 |
}
|
85 |
|
86 |
-
$
|
|
|
87 |
// Strip unsubscribe links.
|
88 |
-
$
|
89 |
|
90 |
-
echo apply_filters('wysija_preview',$
|
91 |
|
92 |
exit;
|
93 |
}
|
20 |
$emailM->getFormat = OBJECT;
|
21 |
// Get config model
|
22 |
$configM = WYSIJA::get('config','model');
|
23 |
+
|
24 |
// Helpers
|
25 |
$emailH = WYSIJA::get('email','helper');
|
26 |
$mailerH = WYSIJA::get('mailer','helper');
|
43 |
|
44 |
// Get current user object if possible
|
45 |
$current_user = null;
|
46 |
+
if(isset($_REQUEST['user_id'])){
|
47 |
// Get User Model
|
48 |
$userM = WYSIJA::get('user','model');
|
49 |
$userM->getFormat = OBJECT;
|
50 |
$current_user = $userM->getOne((int)$_REQUEST['user_id']);
|
51 |
}
|
52 |
+
|
53 |
// Parse and replace user tags.
|
54 |
$mailerH->parseUserTags($current_email);
|
55 |
$mailerH->parseSubjectUserTags($current_email);
|
56 |
+
$mailerH->replaceusertags($current_email, $current_user);
|
|
|
|
|
|
|
|
|
57 |
|
58 |
// Set Body
|
59 |
$email_render = $current_email->body;
|
69 |
$find[] = '[total]';
|
70 |
$replace[] = $current_email->params['autonl']['articles']['total'];
|
71 |
}
|
72 |
+
if (isset($current_email->params['autonl']['articles']['ids'])){
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
$find[] = '[number]';
|
74 |
+
$replace[] = $current_email->params['autonl']['articles']['ids'];
|
75 |
}
|
76 |
|
77 |
+
$email_render = str_replace($find, $replace, $email_render);
|
78 |
+
|
79 |
// Strip unsubscribe links.
|
80 |
+
$email_render = $emailH->stripPersonalLinks($email_render);
|
81 |
|
82 |
+
echo apply_filters('wysija_preview',$email_render);
|
83 |
|
84 |
exit;
|
85 |
}
|
controllers/front/module.php
DELETED
@@ -1,38 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* http://wy351s.local/?wysija-page=1&controller=confirm&wysija-key=4d5c04e327932b99d394f0963fa71dc4&action=subscriptions&wysijap=subscriptions&demo=1
|
5 |
-
* http://wy351s.local/?wysija-page=1&controller=module&action=init&wysijap=subscriptions&module=a&hook=newsletter
|
6 |
-
*/
|
7 |
-
defined('WYSIJA') or die('Restricted access');
|
8 |
-
|
9 |
-
class WYSIJA_control_front_module extends WYSIJA_control_front{
|
10 |
-
/**
|
11 |
-
*
|
12 |
-
* @var string title of the page
|
13 |
-
*/
|
14 |
-
public $subtitle;
|
15 |
-
|
16 |
-
/**
|
17 |
-
*
|
18 |
-
* @var html content of the page
|
19 |
-
*/
|
20 |
-
public $title;
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Dispatcher of module
|
24 |
-
*/
|
25 |
-
public function init() {
|
26 |
-
if (empty($_REQUEST['module']) || empty($_REQUEST['hook'])) {
|
27 |
-
wp_redirect( home_url() ); exit;
|
28 |
-
}
|
29 |
-
$module_name = $_REQUEST['module'];
|
30 |
-
$hook = $_REQUEST['hook'];
|
31 |
-
$extension = !empty($_REQUEST['extension'])
|
32 |
-
?
|
33 |
-
in_array($_REQUEST['extension'], array(WYSIJA, WYSIJANLP)) ? $_REQUEST['extension'] : WYSIJA
|
34 |
-
: WYSIJA;
|
35 |
-
$hook_params = array_merge($_REQUEST, array('controller_object' => $this));
|
36 |
-
$this->subtitle = WYSIJA_module::get_instance_by_name($module_name, $extension)->{'hook_'.$hook}($hook_params);
|
37 |
-
}
|
38 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
controllers/front/stats.php
CHANGED
@@ -5,52 +5,297 @@ defined('WYSIJA') or die('Restricted access');
|
|
5 |
class WYSIJA_control_front_stats extends WYSIJA_control_front{
|
6 |
var $model='' ;
|
7 |
var $view='';
|
8 |
-
|
9 |
-
/**
|
10 |
-
* Possible characters to be url encoded
|
11 |
-
* @var array
|
12 |
-
*/
|
13 |
-
protected $characters_to_encode = array(
|
14 |
-
'@'
|
15 |
-
);
|
16 |
|
17 |
function WYSIJA_control_front_stats(){
|
18 |
parent::WYSIJA_control_front();
|
19 |
}
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
/**
|
22 |
* count the click statistic and redirect to the right url
|
23 |
* @return boolean
|
24 |
*/
|
25 |
function analyse(){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
if(isset($_REQUEST['email_id']) && isset($_REQUEST['user_id'])){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
-
$WJ_Stats = new WJ_Stats();
|
29 |
-
if(!empty($WJ_Stats->clicked_url)){
|
30 |
-
// clicked stats
|
31 |
-
$url = $this->encode_url($WJ_Stats->subscriber_clicked());
|
32 |
-
do_action('mpoet_click_stats', $WJ_Stats);
|
33 |
-
$this->redirect($url);
|
34 |
}else{
|
35 |
-
//
|
36 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
}
|
|
|
|
|
38 |
}
|
39 |
|
40 |
return true;
|
41 |
}
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
);
|
54 |
}
|
55 |
-
|
56 |
}
|
5 |
class WYSIJA_control_front_stats extends WYSIJA_control_front{
|
6 |
var $model='' ;
|
7 |
var $view='';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
function WYSIJA_control_front_stats(){
|
10 |
parent::WYSIJA_control_front();
|
11 |
}
|
12 |
|
13 |
+
|
14 |
+
function rm_url_param($param_rm=array(), $query='')
|
15 |
+
{
|
16 |
+
if(!$query) return $query;
|
17 |
+
$queries=explode('?',$query);
|
18 |
+
$params=array();
|
19 |
+
parse_str($queries[1], $params);
|
20 |
+
|
21 |
+
foreach($param_rm as $param_rmuniq)
|
22 |
+
unset($params[$param_rmuniq]);
|
23 |
+
$newquery = $queries[0];
|
24 |
+
|
25 |
+
if($params){
|
26 |
+
$newquery.='?';
|
27 |
+
$i=0;
|
28 |
+
foreach($params as $k => $v){
|
29 |
+
if($i>0) $newquery .= '&';
|
30 |
+
$newquery.=$k.'='.$v;
|
31 |
+
$i++;
|
32 |
+
|
33 |
+
}
|
34 |
+
}else return $newquery;
|
35 |
+
|
36 |
+
return substr($newquery,1);
|
37 |
+
}
|
38 |
+
|
39 |
/**
|
40 |
* count the click statistic and redirect to the right url
|
41 |
* @return boolean
|
42 |
*/
|
43 |
function analyse(){
|
44 |
+
if(isset($_REQUEST['debug'])){
|
45 |
+
if(version_compare(phpversion(), '5.4')>= 0){
|
46 |
+
error_reporting(E_ALL ^ E_STRICT);
|
47 |
+
|
48 |
+
}else{
|
49 |
+
error_reporting(E_ALL);
|
50 |
+
}
|
51 |
+
ini_set('display_errors', '1');
|
52 |
+
}
|
53 |
if(isset($_REQUEST['email_id']) && isset($_REQUEST['user_id'])){
|
54 |
+
$email_id=(int)$_REQUEST['email_id'];
|
55 |
+
$user_id=(int)$_REQUEST['user_id'];
|
56 |
+
|
57 |
+
//debug message
|
58 |
+
if(isset($_REQUEST['debug'])) echo '<h2>isset email_id and user_id</h2>';
|
59 |
+
|
60 |
+
$requesturlencoded=false;
|
61 |
+
if(isset($_REQUEST['urlencoded'])){
|
62 |
+
$requesturlencoded=$_REQUEST['urlencoded'];
|
63 |
+
}elseif(isset($_REQUEST['urlpassed'])){
|
64 |
+
$requesturlencoded=$_REQUEST['urlpassed'];
|
65 |
+
}
|
66 |
+
|
67 |
+
if($requesturlencoded){
|
68 |
+
//clicked stats
|
69 |
+
if(isset($_REQUEST['no64'])){
|
70 |
+
$recorded_url=$decoded_url=$requesturlencoded;
|
71 |
+
}else{
|
72 |
+
$recorded_url=$decoded_url=base64_decode($requesturlencoded);
|
73 |
+
}
|
74 |
+
if(strpos($recorded_url, 'utm_source')!==false){
|
75 |
+
$recorded_url=$this->rm_url_param(array('utm_source','utm_campaign','utm_medium'),$recorded_url);
|
76 |
+
}
|
77 |
+
|
78 |
+
//debug message
|
79 |
+
if(isset($_REQUEST['debug'])) echo '<h2>isset urlencoded '.$decoded_url.'</h2>';
|
80 |
+
|
81 |
+
if($email_id && !isset($_REQUEST['demo'])){ //if not email_id that means it is an email preview
|
82 |
+
//look for url entry and insert if not exists
|
83 |
+
$model_url = WYSIJA::get('url','model');
|
84 |
+
|
85 |
+
$url_array = $model_url->getOne(false,array('url'=>$recorded_url));
|
86 |
+
|
87 |
+
if(!$url_array){
|
88 |
+
//we need to insert in url
|
89 |
+
$model_url->insert(array('url'=>$recorded_url));
|
90 |
+
$url_array = $model_url->getOne(false,array('url'=>$recorded_url));
|
91 |
+
}
|
92 |
+
$model_url = null;
|
93 |
+
|
94 |
+
//look for email_user_url entry and insert if not exists
|
95 |
+
$model_email_user_url = WYSIJA::get('email_user_url','model');
|
96 |
+
$data_email_user_url = array('email_id'=>$email_id,'user_id'=>$user_id,'url_id'=>$url_array['url_id']);
|
97 |
+
$email_user_url_array = $model_email_user_url->getOne(false,$data_email_user_url);
|
98 |
+
$unique_click = false;
|
99 |
+
|
100 |
+
if( !$email_user_url_array && $email_id > 0 && $user_id > 0 && $url_array['url_id'] > 0 ){
|
101 |
+
//we need to insert in email_user_url
|
102 |
+
$model_email_user_url->reset();
|
103 |
+
$query_EmailUserUrl = 'INSERT IGNORE INTO [wysija]email_user_url (`email_id` ,`user_id`,`url_id`) ';
|
104 |
+
$query_EmailUserUrl .= 'VALUES ('.$email_id.', '.$user_id.', '.$url_array['url_id'].')';
|
105 |
+
|
106 |
+
$model_email_user_url->query($query_EmailUserUrl);
|
107 |
+
|
108 |
+
//$modelEmailUserUrl->insert($dataEmailUserUrl);
|
109 |
+
$unique_click=true;
|
110 |
+
}
|
111 |
+
|
112 |
+
//increment stats counter on email_user_url clicked
|
113 |
+
$model_email_user_url = WYSIJA::get('email_user_url','model');
|
114 |
+
$model_email_user_url->update(array('clicked_at'=>time(),'number_clicked'=>'[increment]'),$data_email_user_url);
|
115 |
+
$model_email_user_url=null;
|
116 |
+
|
117 |
+
//look for url_mail entry and insert if not exists
|
118 |
+
$model_url_mail = WYSIJA::get('url_mail','model');
|
119 |
+
$data_url_mail = array('email_id'=>$email_id,'url_id'=>$url_array['url_id']);
|
120 |
+
$urlMailObj=$model_url_mail->getOne(false,$data_url_mail);
|
121 |
+
if(!$urlMailObj){
|
122 |
+
//we need to insert in url_mail
|
123 |
+
$model_url_mail->reset();
|
124 |
+
$model_url_mail->insert($data_url_mail );
|
125 |
+
}
|
126 |
+
|
127 |
+
$dataUpdate = array('total_clicked'=>'[increment]');
|
128 |
+
if(!$unique_click) $dataUpdate['unique_clicked']='[increment]';
|
129 |
+
//increment stats counter on url_mail clicked
|
130 |
+
$model_url_mail->update($dataUpdate,$data_url_mail);
|
131 |
+
$model_url_mail = null;
|
132 |
+
|
133 |
+
$status_email_user_stat = 2;
|
134 |
+
if(in_array($recorded_url,array('[unsubscribe_link]','[subscriptions_link]','[view_in_browser_link]'))){
|
135 |
+
$this->subscriberClass = WYSIJA::get('user','model');
|
136 |
+
$this->subscriberClass->getFormat=OBJECT;
|
137 |
+
|
138 |
+
//check if the security hash is passed to insure privacy
|
139 |
+
$receiver = $link = false;
|
140 |
+
if(isset($_REQUEST['hash'])){
|
141 |
+
if($_REQUEST['hash']==md5(AUTH_KEY.$recorded_url.$user_id)){
|
142 |
+
$receiver = $this->subscriberClass->getOne(array('user_id'=>$user_id));
|
143 |
+
}else{
|
144 |
+
die('Security check failure.');
|
145 |
+
}
|
146 |
+
}else{
|
147 |
+
//link is not valid anymore
|
148 |
+
//propose to resend the newsletter with good links ?
|
149 |
+
$link = $this->subscriberClass->old_get_new_link_for_expired_links($user_id,$email_id);
|
150 |
+
}
|
151 |
+
|
152 |
+
|
153 |
+
switch($recorded_url){
|
154 |
+
case '[unsubscribe_link]':
|
155 |
+
//we need to make sure that this link belongs to that user
|
156 |
+
if($receiver){
|
157 |
+
$link = $this->subscriberClass->getUnsubLink($receiver,true);
|
158 |
+
$status_email_user_stat=3;
|
159 |
+
}
|
160 |
+
break;
|
161 |
+
case '[subscriptions_link]':
|
162 |
+
if($receiver){
|
163 |
+
$link = $this->subscriberClass->getEditsubLink($receiver,true);
|
164 |
+
}
|
165 |
+
break;
|
166 |
+
case '[view_in_browser_link]':
|
167 |
+
$model_email = WYSIJA::get('email','model');
|
168 |
+
$data_email = $model_email->getOne(false,array('email_id'=>$email_id));
|
169 |
+
$helper_email = WYSIJA::get('email','helper');
|
170 |
+
$link = $helper_email->getVIB($data_email);
|
171 |
+
break;
|
172 |
+
}
|
173 |
+
|
174 |
+
//if the subscriber still exists in the DB we will have a link
|
175 |
+
if($link){
|
176 |
+
$decoded_url = $link;
|
177 |
+
}else{
|
178 |
+
//the subscriber doesn't appear in the DB we can redirect to the web version
|
179 |
+
$decoded_url = $this->_get_browser_link($email_id);
|
180 |
+
|
181 |
+
return $this->redirect($decoded_url);
|
182 |
+
}
|
183 |
+
|
184 |
+
}else{
|
185 |
+
|
186 |
+
if(strpos($decoded_url, 'http://' )=== false && strpos($decoded_url, 'https://' )=== false) $decoded_url='http://'.$decoded_url;
|
187 |
+
//check that there is no broken unsubscribe link such as http://[unsubscribe_link]
|
188 |
+
if(strpos($decoded_url, '[unsubscribe_link]')!==false){
|
189 |
+
$this->subscriberClass = WYSIJA::get('user','model');
|
190 |
+
$this->subscriberClass->getFormat=OBJECT;
|
191 |
+
$receiver = $this->subscriberClass->getOne($user_id);
|
192 |
+
$decoded_url=$this->subscriberClass->getUnsubLink($receiver,true);
|
193 |
+
}
|
194 |
+
|
195 |
+
if(strpos($decoded_url, '[view_in_browser_link]')!==false){
|
196 |
+
$link=$this->_get_browser_link($email_id);
|
197 |
+
$decoded_url=$link;
|
198 |
+
}
|
199 |
+
|
200 |
+
}
|
201 |
+
|
202 |
+
//debug information
|
203 |
+
if(isset($_REQUEST['debug'])) echo '<h2>isset decoded url '.$decoded_url.'</h2>';
|
204 |
+
|
205 |
+
$model_email_user_stat = WYSIJA::get('email_user_stat','model');
|
206 |
+
$exists = $model_email_user_stat->getOne( false,array('equal'=>array('email_id'=>$email_id,'user_id'=>$user_id), 'less'=>array('status'=>$status_email_user_stat)) );
|
207 |
+
$data_update = array('status' => $status_email_user_stat);
|
208 |
+
if($exists && isset($exists['opened_at']) && !(int)$exists['opened_at']){
|
209 |
+
$data_update['opened_at']=time();
|
210 |
+
}
|
211 |
+
|
212 |
+
$model_email_user_stat->reset();
|
213 |
+
$model_email_user_stat->colCheck=false;
|
214 |
+
$model_email_user_stat->update($data_update,array('equal'=>array('email_id'=>$email_id,'user_id'=>$user_id), 'less'=>array('status'=>$status_email_user_stat)));
|
215 |
+
|
216 |
+
|
217 |
+
}else{
|
218 |
+
if(in_array($recorded_url,array('[unsubscribe_link]','[subscriptions_link]','[view_in_browser_link]'))){
|
219 |
+
$model_user = WYSIJA::get('user','model');
|
220 |
+
$model_user->getFormat=OBJECT;
|
221 |
+
$user_object = $model_user->getOne(false,array('wpuser_id'=>get_current_user_id()));
|
222 |
+
switch($recorded_url){
|
223 |
+
case '[unsubscribe_link]':
|
224 |
+
$link=$model_user->getConfirmLink($user_object,'unsubscribe',false,true).'&demo=1';
|
225 |
+
|
226 |
+
break;
|
227 |
+
case '[subscriptions_link]':
|
228 |
+
$link=$model_user->getConfirmLink($user_object,'subscriptions',false,true).'&demo=1';
|
229 |
+
//$link=$this->subscriberClass->getEditsubLink($receiver,true);
|
230 |
+
break;
|
231 |
+
case 'view_in_browser_link':
|
232 |
+
case '[view_in_browser_link]':
|
233 |
+
if(!$email_id) $email_id=$_REQUEST['id'];
|
234 |
+
|
235 |
+
$link=$this->_get_browser_link($email_id);
|
236 |
+
break;
|
237 |
+
}
|
238 |
+
$decoded_url=$link;
|
239 |
+
|
240 |
+
}else{
|
241 |
+
if(strpos($decoded_url, 'http://' )=== false && strpos($decoded_url, 'https://' )=== false) $decoded_url='http://'.$decoded_url;
|
242 |
+
}
|
243 |
+
if(isset($_REQUEST['debug'])) {
|
244 |
+
echo '<h2>not email_id </h2>';
|
245 |
+
}
|
246 |
+
}
|
247 |
+
|
248 |
+
//sometimes this will be a life saver :)
|
249 |
+
$decoded_url = str_replace('&','&',$decoded_url);
|
250 |
+
if(isset($_REQUEST['debug'])) {
|
251 |
+
echo '<h2>final decoded url '.$decoded_url.'</h2>';
|
252 |
+
exit;
|
253 |
+
}
|
254 |
+
$this->redirect($decoded_url);
|
255 |
+
|
256 |
|
|
|
|
|
|
|
|
|
|
|
|
|
257 |
}else{
|
258 |
+
//opened stat */
|
259 |
+
//$modelEmail=WYSIJA::get("email","model");
|
260 |
+
//$modelEmail->update(array('number_opened'=>"[increment]"),array("email_id"=>$email_id));
|
261 |
+
|
262 |
+
$model_email_user_stat=WYSIJA::get('email_user_stat','model');
|
263 |
+
$model_email_user_stat->reset();
|
264 |
+
$model_email_user_stat->update(
|
265 |
+
array('status'=>1,'opened_at'=>time()),
|
266 |
+
array('email_id'=>$email_id,'user_id'=>$user_id,'status'=>0));
|
267 |
+
|
268 |
+
header( 'Cache-Control: no-store, no-cache, must-revalidate' );
|
269 |
+
header( 'Cache-Control: post-check=0, pre-check=0', false );
|
270 |
+
header( 'Pragma: no-cache' );
|
271 |
+
|
272 |
+
if(empty($picture)) $picture = WYSIJA_DIR_IMG.'statpicture.png';
|
273 |
+
$handle = fopen($picture, 'r');
|
274 |
+
|
275 |
+
if(!$handle) exit;
|
276 |
+
header('Content-type: image/png');
|
277 |
+
$contents = fread($handle, filesize($picture));
|
278 |
+
fclose($handle);
|
279 |
+
echo $contents;
|
280 |
+
exit;
|
281 |
}
|
282 |
+
|
283 |
+
|
284 |
}
|
285 |
|
286 |
return true;
|
287 |
}
|
288 |
+
|
289 |
+
function _get_browser_link($email_id){
|
290 |
+
$paramsurl=array(
|
291 |
+
'wysija-page'=>1,
|
292 |
+
'controller'=>'email',
|
293 |
+
'action'=>'view',
|
294 |
+
'email_id'=>$email_id,
|
295 |
+
'user_id'=>0
|
296 |
+
);
|
297 |
+
$config=WYSIJA::get('config','model');
|
298 |
+
return WYSIJA::get_permalink($config->getValue('confirm_email_link'),$paramsurl);
|
|
|
299 |
}
|
300 |
+
|
301 |
}
|
core/base.php
CHANGED
@@ -1,1427 +1,1203 @@
|
|
1 |
<?php
|
2 |
// Require constants.
|
3 |
-
require_once(
|
4 |
-
|
5 |
// Require global classes autoloader
|
6 |
-
require_once(
|
7 |
-
|
8 |
-
defined( 'WYSIJA' ) or die( 'Restricted access' );
|
9 |
-
|
10 |
-
global $wysija_msg, $wysija_wpmsg;
|
11 |
-
if ( ! $wysija_msg ) {
|
12 |
-
$wysija_msg = array();
|
13 |
-
}
|
14 |
-
$wysija_wpmsg = array();
|
15 |
|
|
|
|
|
|
|
|
|
|
|
16 |
class WYSIJA_object{
|
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 |
-
function getMsgs(){
|
191 |
-
global $wysija_msg;
|
192 |
-
|
193 |
-
if(isset($wysija_msg['private']['error'])){
|
194 |
-
$wysija_msg['error'][]=str_replace(array('[link]','[/link]'),array('<a class="showerrors" href="javascript:;">','</a>'),__('An error occured. [link]Show more details.[/link]',WYSIJA));
|
195 |
-
}
|
196 |
-
|
197 |
-
if(isset($wysija_msg['private']['updated'])){
|
198 |
-
$wysija_msg['updated'][]=str_replace(array('[link]','[/link]'),array('<a class="shownotices" href="javascript:;">','</a>'),__('[link]Show more details.[/link]',WYSIJA));
|
199 |
-
}
|
200 |
-
if(isset($wysija_msg['private'])){
|
201 |
-
$prv=$wysija_msg['private'];
|
202 |
-
unset($wysija_msg['private']);
|
203 |
-
if(isset($prv['error'])) $wysija_msg['xdetailed-errors']=$prv['error'];
|
204 |
-
if(isset($prv['updated'])) $wysija_msg['xdetailed-updated']=$prv['updated'];
|
205 |
-
}
|
206 |
-
return $wysija_msg;
|
207 |
-
}
|
208 |
}
|
209 |
|
210 |
|
211 |
class WYSIJA_help extends WYSIJA_object{
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
'lt',
|
292 |
-
'nl',
|
293 |
-
'no',
|
294 |
-
'pl',
|
295 |
-
'pt',
|
296 |
-
'pt_BR',
|
297 |
-
'ro',
|
298 |
-
'ru',
|
299 |
-
'sv',
|
300 |
-
'tr',
|
301 |
-
'vi',
|
302 |
-
'zh_CN',
|
303 |
-
'zh_TW',
|
304 |
-
);
|
305 |
-
|
306 |
-
|
307 |
-
if ( in_array( $wp_language_code, $valid_language ) ) {
|
308 |
-
wp_register_script('wysija-validator-lang',WYSIJA_URL.'js/validate/languages/jquery.validationEngine-'.$wp_language_code.'.js', array( 'jquery' ),WYSIJA::get_version(),true );
|
309 |
-
}else{
|
310 |
-
wp_register_script('wysija-validator-lang',WYSIJA_URL.'js/validate/languages/jquery.validationEngine-en.js', array( 'jquery' ),WYSIJA::get_version(),true );
|
311 |
-
}
|
312 |
-
wp_register_script('wysija-validator',WYSIJA_URL.'js/validate/jquery.validationEngine.js', array( 'jquery' ),WYSIJA::get_version(),true );
|
313 |
-
wp_register_script('wysija-front-subscribers', WYSIJA_URL.'js/front-subscribers.js', array( 'jquery' ),WYSIJA::get_version(),true);
|
314 |
-
|
315 |
-
wp_register_style( 'mailpoet-dashicons', WYSIJA_URL . 'css/admin-dashicons.css', array(), WYSIJA::get_version() );
|
316 |
-
|
317 |
-
wp_register_script('wysija-form', WYSIJA_URL.'js/forms.js', array( 'jquery' ),WYSIJA::get_version());
|
318 |
-
wp_register_style('validate-engine-css',WYSIJA_URL.'css/validationEngine.jquery.css',array(),WYSIJA::get_version());
|
319 |
-
wp_register_script('wysija-admin-ajax', WYSIJA_URL.'js/admin-ajax.js',array(),WYSIJA::get_version());
|
320 |
-
wp_register_script('wysija-admin-ajax-proto', WYSIJA_URL.'js/admin-ajax-proto.js',array(),WYSIJA::get_version());
|
321 |
-
wp_register_script( 'mailpoet-global', WYSIJA_URL.'js/admin-global.js', array( 'jquery', 'underscore' ), WYSIJA::get_version() );
|
322 |
-
|
323 |
-
if(defined('WYSIJA_SIDE') && WYSIJA_SIDE=='front') wp_enqueue_style('validate-engine-css');
|
324 |
-
|
325 |
-
}
|
326 |
-
|
327 |
-
|
328 |
-
/**
|
329 |
-
* All the ajax requests are routed through here
|
330 |
-
*/
|
331 |
-
function ajax() {
|
332 |
-
|
333 |
-
$result_array = array();
|
334 |
-
if( !$_REQUEST || !isset( $_REQUEST['controller'] ) || !isset( $_REQUEST['task'] ) ){
|
335 |
-
$result_array = array( 'result' => false );
|
336 |
-
}else{
|
337 |
-
$plugin_requesting_ajax = 'wysija-newsletters';
|
338 |
-
|
339 |
-
// we override the plugin resquesting ajax if specified in the request
|
340 |
-
if( isset( $_REQUEST['wysijaplugin'] ) ){
|
341 |
-
$plugin_requesting_ajax = $_REQUEST['wysijaplugin'];
|
342 |
-
}
|
343 |
-
|
344 |
-
// fetching the right controller
|
345 |
-
$this->controller = WYSIJA::get( $_REQUEST['controller'] , 'controller' , false, $plugin_requesting_ajax );
|
346 |
|
347 |
-
// let's make sure the requested task exist
|
348 |
-
if( method_exists( $this->controller , $_REQUEST['task'] ) ){
|
349 |
-
$result_array['result'] = $this->controller->$_REQUEST['task']();
|
350 |
-
}else{
|
351 |
-
$this->error( 'Method "' . $_REQUEST['task'] . '" doesn\'t exist for controller : "'.$_REQUEST['controller'] );
|
352 |
-
}
|
353 |
-
}
|
354 |
|
355 |
-
|
356 |
-
$result_array['msgs'] = $this->getMsgs();
|
357 |
|
358 |
-
|
359 |
-
|
360 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
361 |
}
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
374 |
}
|
375 |
-
} else {
|
376 |
-
// standard header for unwrapped classic json response
|
377 |
-
header('Content-type: application/json');
|
378 |
-
print $json_data;
|
379 |
-
}
|
380 |
-
// our ajax response is printed, no need to let WordPress or 3rd party plugin execute more code
|
381 |
-
die();
|
382 |
-
}
|
383 |
-
}
|
384 |
-
|
385 |
-
|
386 |
-
class WYSIJA extends WYSIJA_object{
|
387 |
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
* from the frontend, it was used maybe in the shop but it can be ignored for wysija-newsletters
|
503 |
-
* @param type $extended_plugin : used only when calling the url from a different plugin it is used watch those files :
|
504 |
-
* -core/controller.php line 21, 23 ,24
|
505 |
-
* @param type $load_lang : the load lang is in the get to be sure we don't forget to load the language file for each plugin at least once
|
506 |
-
* the way I see it it could be moved to the index.php of each plugin. for now only wysija-newsletters is translated anyway
|
507 |
-
* @return boolean
|
508 |
-
*/
|
509 |
-
public static function get($name,$type,$force_side=false,$extended_plugin='wysija-newsletters',$load_lang=true){
|
510 |
-
static $array_of_objects;
|
511 |
-
|
512 |
-
if($load_lang) WYSIJA::load_lang($extended_plugin);
|
513 |
-
|
514 |
-
// store all the objects made so that we can reuse them accross the application if the object is already set we return it immediately
|
515 |
-
if(isset($array_of_objects[$extended_plugin][$type.$name])) {
|
516 |
-
return $array_of_objects[$extended_plugin][$type.$name];
|
517 |
-
}
|
518 |
-
|
519 |
-
// which folder do we pick for controllersand views ? back or front ?
|
520 |
-
if($force_side) {
|
521 |
-
$side=$force_side;
|
522 |
-
} else {
|
523 |
-
$side=WYSIJA_SIDE;
|
524 |
-
}
|
525 |
-
|
526 |
-
// for each plugin we will define the $extended_constant variable if it's not defined already
|
527 |
-
// also we will defined the $extended_plugin_name which corresponds to the folder name and also will be used to build the class to be called
|
528 |
-
switch($extended_plugin){
|
529 |
-
case 'wysija-newsletters-premium':
|
530 |
-
$extended_constant='WYSIJANLP';
|
531 |
-
if(!defined($extended_constant)) define($extended_constant,$extended_constant);
|
532 |
-
$extended_plugin_name='wysijanlp';
|
533 |
-
break;
|
534 |
-
case 'wysija-newsletters':
|
535 |
-
$extended_constant='WYSIJA';
|
536 |
-
if(!defined($extended_constant)) define($extended_constant,$extended_constant);
|
537 |
-
$extended_plugin_name='wysija';
|
538 |
-
break;
|
539 |
-
default :
|
540 |
-
$extended_constant=strtoupper($extended_plugin);
|
541 |
-
if(!defined($extended_constant)) define($extended_constant,$extended_constant);
|
542 |
-
$extended_plugin_name=$extended_plugin;
|
543 |
-
}
|
544 |
-
|
545 |
-
// security to protect against dangerous ./../ includes
|
546 |
-
$name = preg_replace('#[^a-z0-9_]#i','',$name);
|
547 |
-
|
548 |
-
// this switch will require_once the file needed and build a the class name depending on the parameters passed to the function
|
549 |
-
switch($type){
|
550 |
-
case 'controller':
|
551 |
-
// require the parent class necessary
|
552 |
-
require_once(WYSIJA_CORE.'controller.php');
|
553 |
-
|
554 |
-
$ctrdir=WYSIJA_PLG_DIR.$extended_plugin.DS.'controllers'.DS;
|
555 |
-
// Require module concept
|
556 |
-
require_once(WYSIJA_CORE.'module'.DS.'module.php');
|
557 |
-
|
558 |
-
// if we are doing ajax we don't go to one side, ajax is for frontend or backend in the same folder
|
559 |
-
if(defined('DOING_AJAX')) {
|
560 |
-
$class_path=$ctrdir.'ajax'.DS.$name.'.php';
|
561 |
-
}else {
|
562 |
-
// the other controllers are called in a side folder back or front
|
563 |
-
$class_path=$ctrdir.$side.DS.$name.'.php';
|
564 |
-
// require the side specific controller file
|
565 |
-
require_once(WYSIJA_CTRL.$side.'.php');
|
566 |
-
}
|
567 |
-
$class_name = strtoupper($extended_plugin_name).'_control_'.$side.'_'.$name;
|
568 |
-
break;
|
569 |
-
case 'view':
|
570 |
-
$viewdir=WYSIJA_PLG_DIR.$extended_plugin.DS.'views'.DS;
|
571 |
-
// let's get the right path for the view front or back and the right class_name
|
572 |
-
$class_path=$viewdir.$side.DS.$name.'.php';
|
573 |
-
$class_name = strtoupper($extended_plugin_name).'_view_'.$side.'_'.$name;
|
574 |
-
|
575 |
-
// require the common view file and the side view file
|
576 |
-
require_once(WYSIJA_CORE.'view.php');
|
577 |
-
require_once(WYSIJA_VIEWS.$side.'.php');
|
578 |
-
break;
|
579 |
-
case 'helper':
|
580 |
-
$helpdir=WYSIJA_PLG_DIR.$extended_plugin.DS.'helpers'.DS;
|
581 |
-
$class_path=$helpdir.$name.'.php';
|
582 |
-
$class_name = strtoupper($extended_plugin_name).'_help_'.$name;
|
583 |
-
|
584 |
-
break;
|
585 |
-
case 'model':
|
586 |
-
$modeldir=WYSIJA_PLG_DIR.$extended_plugin.DS.'models'.DS;
|
587 |
-
$class_path=$modeldir.$name.'.php';
|
588 |
-
$class_name = strtoupper($extended_plugin_name).'_model_'.$name;
|
589 |
-
// require the parent class necessary
|
590 |
-
require_once(WYSIJA_CORE.'model.php');
|
591 |
-
break;
|
592 |
-
case 'widget':
|
593 |
-
$modeldir=WYSIJA_PLG_DIR.$extended_plugin.DS.'widgets'.DS;
|
594 |
-
$class_path=$modeldir.$name.'.php';
|
595 |
-
if($name=='wysija_nl') $class_name='WYSIJA_NL_Widget';
|
596 |
-
else $class_name = strtoupper($extended_plugin_name).'_widget_'.$name;
|
597 |
-
break;
|
598 |
-
|
599 |
-
case 'module':
|
600 |
-
$moduledir = WYSIJA_PLG_DIR . $extended_plugin . DS . 'modules' . DS;
|
601 |
-
if (file_exists($moduledir . $name . '.php'))
|
602 |
-
$class_path = $moduledir . $name . '.php';
|
603 |
-
elseif (file_exists($moduledir . $name . DS . $name . '.php'))
|
604 |
-
$class_path = $moduledir . $name . DS . $name . '.php';
|
605 |
-
else
|
606 |
-
return;
|
607 |
-
$class_name = strtoupper($extended_plugin_name) . '_module_' . $name;
|
608 |
-
// require the parent class necessary
|
609 |
-
//require_once(WYSIJA_CORE.'module'.DS.'module.php');
|
610 |
-
require_once(WYSIJA_CORE . 'module' . DS . 'statistics_model.php');
|
611 |
-
require_once(WYSIJA_CORE . 'module' . DS . 'statistics.php');
|
612 |
-
require_once(WYSIJA_CORE . 'module' . DS . 'statisticschart.php');
|
613 |
-
require_once(WYSIJA_CORE . 'module' . DS . 'statisticstable.php');
|
614 |
-
|
615 |
-
break;
|
616 |
-
|
617 |
-
default:
|
618 |
-
WYSIJA::setInfo('error','WYSIJA::get does not accept this type of file "'.$type.'" .');
|
619 |
-
return false;
|
620 |
-
}
|
621 |
-
|
622 |
-
if(!file_exists($class_path)) {
|
623 |
-
WYSIJA::setInfo('error','file has not been recognised '.$class_path);
|
624 |
-
WYSIJA::setInfo('error',$class_name);
|
625 |
-
WYSIJA::setInfo('error',$type);
|
626 |
-
return;
|
627 |
-
}
|
628 |
-
|
629 |
-
// require the file needed once and store & return the object needed
|
630 |
-
require_once($class_path);
|
631 |
-
return $array_of_objects[$extended_plugin][$type.$name]=new $class_name($extended_plugin_name);
|
632 |
-
|
633 |
-
}
|
634 |
-
|
635 |
-
/**
|
636 |
-
* log function to spot some strange issues when sending emails for instance
|
637 |
-
* @param type $key
|
638 |
-
* @param type $data
|
639 |
-
* @param type $category
|
640 |
-
* @return type
|
641 |
-
*/
|
642 |
-
public static function log($key='default',$data='empty',$category='default'){
|
643 |
-
$config=WYSIJA::get('config','model');
|
644 |
-
|
645 |
-
if((int)$config->getValue('debug_new')>1 && $category && $config->getValue('debug_log_'.$category)){
|
646 |
-
|
647 |
-
$optionlog=get_option('wysija_log');
|
648 |
-
|
649 |
-
|
650 |
-
$optionlog[$category][(string)microtime(true)][$key]=$data;
|
651 |
-
|
652 |
-
WYSIJA::update_option('wysija_log' , $optionlog);
|
653 |
-
}
|
654 |
-
return false;
|
655 |
-
}
|
656 |
-
|
657 |
-
/**
|
658 |
-
* the filter to add option to the cron frequency instead of being stuck with hourly, daily and twicedaily...
|
659 |
-
* we can add filters but we cannot delete other values such as the default ones, as this might break other plugins crons
|
660 |
-
* @param type $param
|
661 |
-
* @return type
|
662 |
-
*/
|
663 |
-
public static function filter_cron_schedules( $param ) {
|
664 |
-
$frequencies=array(
|
665 |
-
'one_min' => array(
|
666 |
-
'interval' => 60,
|
667 |
-
'display' => __( 'Once every minute',WYSIJA)
|
668 |
-
),
|
669 |
-
'two_min' => array(
|
670 |
-
'interval' => 120,
|
671 |
-
'display' => __( 'Once every two minutes',WYSIJA)
|
672 |
-
),
|
673 |
-
'five_min' => array(
|
674 |
-
'interval' => 300,
|
675 |
-
'display' => __( 'Once every five minutes',WYSIJA)
|
676 |
-
),
|
677 |
-
'ten_min' => array(
|
678 |
-
'interval' => 600,
|
679 |
-
'display' => __( 'Once every ten minutes',WYSIJA)
|
680 |
-
),
|
681 |
-
'fifteen_min' => array(
|
682 |
-
'interval' => 900,
|
683 |
-
'display' => __( 'Once every fifteen minutes',WYSIJA)
|
684 |
-
),
|
685 |
-
'thirty_min' => array(
|
686 |
-
'interval' => 1800,
|
687 |
-
'display' => __( 'Once every thirty minutes',WYSIJA)
|
688 |
-
),
|
689 |
-
'two_hours' => array(
|
690 |
-
'interval' => 7200,
|
691 |
-
'display' => __( 'Once every two hours',WYSIJA)
|
692 |
-
),
|
693 |
-
'eachweek' => array(
|
694 |
-
'interval' => 604800,
|
695 |
-
'display' => __( 'Once a week',WYSIJA)
|
696 |
-
),
|
697 |
-
'each28days' => array(
|
698 |
-
'interval' => 2419200,
|
699 |
-
'display' => __( 'Once every 28 days',WYSIJA)
|
700 |
-
),
|
701 |
-
);
|
702 |
-
|
703 |
-
return array_merge($param, $frequencies);
|
704 |
-
}
|
705 |
-
|
706 |
-
/**
|
707 |
-
* scheduled task for sending the emails in the queue, the frequency is set in the settings
|
708 |
-
*/
|
709 |
-
public static function croned_queue( $check_scheduled_newsletter = true) {
|
710 |
-
|
711 |
-
// check the scheduled tasks only if it's a standard WP scheduled task free only
|
712 |
-
if($check_scheduled_newsletter){
|
713 |
-
WYSIJA::check_scheduled_newsletters();
|
714 |
-
}
|
715 |
-
|
716 |
-
$model_config = WYSIJA::get('config','model');
|
717 |
-
// check that the 2000 limit is not passed and process the queue
|
718 |
-
|
719 |
-
if((int)$model_config->getValue('total_subscribers') < 2000 ){
|
720 |
-
$helper_queue = WYSIJA::get('queue','helper');
|
721 |
-
$helper_queue->report=false;
|
722 |
-
WYSIJA::log('croned_queue process',true,'cron');
|
723 |
-
|
724 |
-
$helper_queue->process();
|
725 |
-
}
|
726 |
-
|
727 |
-
}
|
728 |
-
|
729 |
-
public static function check_scheduled_newsletters(){
|
730 |
-
$last_scheduled_check = get_option('wysija_last_scheduled_check');
|
731 |
-
|
732 |
-
// if the latest post notification check was done more than five minutes ago let's check it again
|
733 |
-
if(empty($last_scheduled_check) || ( time() > ($last_scheduled_check + 300) ) ){
|
734 |
-
// create the scheduled automatic post notifications email if there are any
|
735 |
-
$helper_autonews = WYSIJA::get('autonews','helper');
|
736 |
-
$helper_autonews->checkPostNotif();
|
737 |
-
|
738 |
-
// queue the scheduled newsletter also if there are any
|
739 |
-
$helper_autonews->checkScheduled();
|
740 |
-
WYSIJA::update_option('wysija_last_scheduled_check', time());
|
741 |
-
}
|
742 |
-
|
743 |
-
// send daily report about emails sent
|
744 |
-
$model_config = WYSIJA::get('config','model');
|
745 |
-
if($model_config->getValue('emails_notified_when_dailysummary')){
|
746 |
-
$helper_notification = WYSIJA::get('notifications','helper');
|
747 |
-
$helper_notification->send_daily_report();
|
748 |
-
}
|
749 |
-
|
750 |
-
}
|
751 |
-
|
752 |
-
|
753 |
-
/**
|
754 |
-
* everyday we make sure not to leave any trash files
|
755 |
-
* remove temporary files
|
756 |
-
*/
|
757 |
-
public static function croned_daily() {
|
758 |
-
|
759 |
-
@ini_set('max_execution_time',0);
|
760 |
-
|
761 |
-
/*user refresh count total*/
|
762 |
-
$helper_user = WYSIJA::get('user','helper');
|
763 |
-
$helper_user->refreshUsers();
|
764 |
-
|
765 |
-
/*user domain generation*/
|
766 |
-
$helper_user->generate_domains();
|
767 |
-
|
768 |
-
/*clear temporary folders*/
|
769 |
-
$helper_file = WYSIJA::get('file','helper');
|
770 |
-
$helper_file->clear();
|
771 |
-
|
772 |
-
/*clear queue from unsubscribed*/
|
773 |
-
$helper_queue = WYSIJA::get('queue','helper');
|
774 |
-
$helper_queue->clear();
|
775 |
-
|
776 |
-
|
777 |
-
}
|
778 |
-
|
779 |
-
// Weekly cron
|
780 |
-
public static function croned_weekly() {
|
781 |
-
|
782 |
-
@ini_set('max_execution_time',0);
|
783 |
-
|
784 |
-
$model_config = WYSIJA::get('config','model');
|
785 |
-
|
786 |
-
// If enabled, flag MixPanel sending on next page load.
|
787 |
-
if ($model_config->getValue('analytics') == 1) {
|
788 |
-
$model_config->save(array('send_analytics_now' => 1));
|
789 |
-
}
|
790 |
-
|
791 |
-
}
|
792 |
-
|
793 |
-
// Monthly cron
|
794 |
-
public static function croned_monthly() {
|
795 |
-
|
796 |
-
@ini_set('max_execution_time',0);
|
797 |
-
|
798 |
-
$model_config = WYSIJA::get('config','model');
|
799 |
-
|
800 |
-
/* send daily report about emails sent */
|
801 |
-
if ($model_config->getValue('sharedata')) {
|
802 |
-
$helper_stats = WYSIJA::get('stats','helper');
|
803 |
-
$helper_stats->share();
|
804 |
-
}
|
805 |
-
|
806 |
-
}
|
807 |
-
|
808 |
-
/**
|
809 |
-
* when we deactivate the plugin we clear the WP install from those cron records
|
810 |
-
*/
|
811 |
-
public static function deactivate() {
|
812 |
-
wp_clear_scheduled_hook('wysija_cron_queue');
|
813 |
-
wp_clear_scheduled_hook('wysija_cron_bounce');
|
814 |
-
wp_clear_scheduled_hook('wysija_cron_daily');
|
815 |
-
wp_clear_scheduled_hook('wysija_cron_weekly');
|
816 |
-
wp_clear_scheduled_hook('wysija_cron_monthly');
|
817 |
-
}
|
818 |
-
|
819 |
-
|
820 |
-
/**
|
821 |
-
* wysija's redirect allows to save some variables for the next page load such as notices etc..
|
822 |
-
* @global type $wysija_msg
|
823 |
-
* @global type $wysija_queries
|
824 |
-
* @global type $wysija_queries_errors
|
825 |
-
* @param type $location
|
826 |
-
*/
|
827 |
-
public static function redirect($location) {
|
828 |
-
//save the messages
|
829 |
-
global $wysija_msg,$wysija_queries,$wysija_queries_errors;
|
830 |
-
WYSIJA::update_option('wysija_msg',$wysija_msg);
|
831 |
-
WYSIJA::update_option('wysija_queries',$wysija_queries);
|
832 |
-
WYSIJA::update_option('wysija_queries_errors',$wysija_queries_errors);
|
833 |
-
|
834 |
-
// make sure we encode square brackets as wp_redirect will strip them off
|
835 |
-
$location = str_replace(array('[', ']'), array('%5B', '%5D'), $location);
|
836 |
-
|
837 |
-
// redirect to specified location
|
838 |
-
wp_redirect($location);
|
839 |
-
exit;
|
840 |
-
}
|
841 |
-
|
842 |
-
/**
|
843 |
-
* custom post type for wysija is call wysijap as in wysija's post
|
844 |
-
*/
|
845 |
-
public static function create_post_type() {
|
846 |
-
|
847 |
-
//by default there is url rewriteing on wysijap custom post, though in one client case I had to deactivate it.
|
848 |
-
//as this is rare we just need to set this setting to activate it
|
849 |
-
//by default let's deactivate the url rewriting of the wysijap confirmation page because it is breaking in some case.
|
850 |
-
$show_interface=false;
|
851 |
-
if(defined('WYSIJA_DBG') && WYSIJA_DBG>1) $show_interface=true;
|
852 |
-
register_post_type( 'wysijap',
|
853 |
-
array(
|
854 |
-
'labels' => array(
|
855 |
-
'name' => __('MailPoet page'),
|
856 |
-
'singular_name' => __('MailPoet page')
|
857 |
-
),
|
858 |
-
'public' => true,
|
859 |
-
'has_archive' => false,
|
860 |
-
'show_ui' =>$show_interface,
|
861 |
-
'show_in_menu' =>$show_interface,
|
862 |
-
'rewrite' => false,
|
863 |
-
'show_in_nav_menus'=>false,
|
864 |
-
'can_export'=>false,
|
865 |
-
'publicly_queryable'=>true,
|
866 |
-
'exclude_from_search'=>true,
|
867 |
-
)
|
868 |
-
);
|
869 |
-
|
870 |
-
if(!get_option('wysija_post_type_updated')) {
|
871 |
-
$modelPosts=new WYSIJA_model();
|
872 |
-
$modelPosts->tableWP=true;
|
873 |
-
$modelPosts->table_prefix='';
|
874 |
-
$modelPosts->table_name='posts';
|
875 |
-
$modelPosts->noCheck=true;
|
876 |
-
$modelPosts->pk='ID';
|
877 |
-
if($modelPosts->exists(array('post_type'=>'wysijapage'))){
|
878 |
-
$modelPosts->update(array('post_type'=>'wysijap'),array('post_type'=>'wysijapage'));
|
879 |
-
flush_rewrite_rules( false );
|
880 |
-
}
|
881 |
-
WYSIJA::update_option('wysija_post_type_updated',time());
|
882 |
-
}
|
883 |
-
|
884 |
-
if(!get_option('wysija_post_type_created')) {
|
885 |
-
flush_rewrite_rules( false );
|
886 |
-
WYSIJA::update_option('wysija_post_type_created',time());
|
887 |
-
}
|
888 |
-
|
889 |
-
}
|
890 |
-
|
891 |
-
/**
|
892 |
-
* wysija update_option function is very similar to WordPress' one but it
|
893 |
-
* can also manage new options not automatically loaded each time
|
894 |
-
* @param type $option_name
|
895 |
-
* @param type $newvalue
|
896 |
-
* @param type $defaultload this parameter is the advantage other Wp's update_option here
|
897 |
-
*/
|
898 |
-
public static function update_option($option_name,$newvalue,$defaultload='no'){
|
899 |
-
if ( get_option( $option_name ) != $newvalue ) {
|
900 |
-
update_option( $option_name, $newvalue );
|
901 |
-
} else {
|
902 |
-
add_option( $option_name, $newvalue, '', $defaultload );
|
903 |
-
}
|
904 |
-
}
|
905 |
-
|
906 |
-
/**
|
907 |
-
* When a WordPress user is added we also need to add it to the subscribers list
|
908 |
-
* @param type $user_id
|
909 |
-
* @return type
|
910 |
-
*/
|
911 |
-
public static function hook_add_WP_subscriber($user_id) {
|
912 |
-
$data=get_userdata($user_id);
|
913 |
-
|
914 |
-
|
915 |
-
//check first if a subscribers exists if it doesn't then let's insert it
|
916 |
-
$model_config=WYSIJA::get('config','model');
|
917 |
-
$model_user=WYSIJA::get('user','model');
|
918 |
-
$model_user->getFormat=ARRAY_A; // there is one case where we were getting an object instead of an array
|
919 |
-
$subscriber_exists=$model_user->getOne(array('user_id'),array('email'=>$data->user_email));
|
920 |
-
|
921 |
-
$first_name=$data->first_name;
|
922 |
-
$last_name=$data->last_name;
|
923 |
-
if(!$data->first_name && !$data->last_name) $first_name=$data->display_name;
|
924 |
-
|
925 |
-
$model_user->reset();
|
926 |
-
if($subscriber_exists){
|
927 |
-
$user_id=$subscriber_exists['user_id'];
|
928 |
-
// we need to update the current subscriber using it's id
|
929 |
-
$model_user->update(array('wpuser_id'=>$data->ID,'firstname'=>$first_name,'lastname'=>$last_name),array('user_id'=>$user_id));
|
930 |
-
}else{
|
931 |
-
$model_user->noCheck=true;
|
932 |
-
$user_id=$model_user->insert(array('email'=>$data->user_email,'wpuser_id'=>$data->ID,'firstname'=>$first_name,'lastname'=>$last_name,'status'=>$model_config->getValue('confirm_dbleoptin')));
|
933 |
-
}
|
934 |
-
|
935 |
-
$model_user_list=WYSIJA::get('user_list','model');
|
936 |
-
$model_user_list->insert(array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id'),'sub_date'=>time()),true);
|
937 |
-
|
938 |
-
$helper_user=WYSIJA::get('user','helper');
|
939 |
-
$helper_user->sendAutoNl($user_id,$data,'new-user');
|
940 |
-
return true;
|
941 |
-
}
|
942 |
-
|
943 |
-
/**
|
944 |
-
* when a WordPress user is updated we also need to update the corresponding subscriber
|
945 |
-
* @param type $user_id
|
946 |
-
* @return type
|
947 |
-
*/
|
948 |
-
public static function hook_edit_WP_subscriber($user_id) {
|
949 |
-
$data=get_userdata($user_id);
|
950 |
-
|
951 |
-
//check first if a subscribers exists if it doesn't then let's insert it
|
952 |
-
$model_user=WYSIJA::get('user','model');
|
953 |
-
$model_config=WYSIJA::get('config','model');
|
954 |
-
$model_user_list=WYSIJA::get('user_list','model');
|
955 |
-
$model_user->getFormat = ARRAY_A;
|
956 |
-
$subscriber_exists=$model_user->getOne(array('user_id'),array('email'=>$data->user_email));
|
957 |
-
|
958 |
-
$model_user->reset();
|
959 |
-
|
960 |
-
$first_name=$data->first_name;
|
961 |
-
$last_name=$data->last_name;
|
962 |
-
if(!$data->first_name && !$data->last_name) $first_name=$data->display_name;
|
963 |
-
|
964 |
-
if($subscriber_exists){
|
965 |
-
$user_id=$subscriber_exists['user_id'];
|
966 |
-
|
967 |
-
$model_user->update(array('wpuser_id'=>$data->ID, 'email'=>$data->user_email,'firstname'=>$first_name,'lastname'=>$last_name),array('user_id'=>$user_id));
|
968 |
-
|
969 |
-
$result=$model_user_list->getOne(false,array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id')));
|
970 |
-
$model_user_list->reset();
|
971 |
-
if(!$result)
|
972 |
-
$model_user_list->insert(array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id'),'sub_date'=>time()));
|
973 |
-
}else{
|
974 |
-
//chck that we didnt update the email
|
975 |
-
$subscriber_exists=$model_user->getOne(false,array('wpuser_id'=>$data->ID));
|
976 |
-
|
977 |
-
if($subscriber_exists){
|
978 |
-
$user_id=$subscriber_exists['user_id'];
|
979 |
-
|
980 |
-
$model_user->update(array('email'=>$data->user_email,'firstname'=>$first_name,'lastname'=>$last_name),array('wpuser_id'=>$data->ID));
|
981 |
-
|
982 |
-
$result=$model_user_list->getOne(false,array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id')));
|
983 |
-
$model_user_list->reset();
|
984 |
-
if(!$result)
|
985 |
-
$model_user_list->insert(array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id'),'sub_date'=>time()));
|
986 |
-
}else{
|
987 |
-
$model_user->noCheck=true;
|
988 |
-
$user_id=$model_user->insert(array('email'=>$data->user_email,'wpuser_id'=>$data->ID,'firstname'=>$first_name,'lastname'=>$last_name,'status'=>$model_config->getValue('confirm_dbleoptin')));
|
989 |
-
$model_user_list->insert(array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id'),'sub_date'=>time()));
|
990 |
-
}
|
991 |
-
}
|
992 |
-
return true;
|
993 |
-
}
|
994 |
-
|
995 |
-
/**
|
996 |
-
* when a wp user is deleted we also delete the subscriber corresponding to it
|
997 |
-
* @param type $user_id
|
998 |
-
*/
|
999 |
-
public static function hook_del_WP_subscriber($user_id) {
|
1000 |
-
$model_config=WYSIJA::get('config','model');
|
1001 |
-
$model_user=WYSIJA::get('user','model');
|
1002 |
-
$data = $model_user->getOne(array('email','user_id'),array('wpuser_id'=>$user_id));
|
1003 |
-
if(isset($data['email'])) {
|
1004 |
-
$model_user->delete(array('email'=>$data['email']));
|
1005 |
-
}
|
1006 |
-
if(isset($data['user_id'])) {
|
1007 |
-
$model_user = WYSIJA::get('user_list','model');
|
1008 |
-
$model_user->delete(array('user_id'=>$data['user_id'],'list_id'=>$model_config->getValue('importwp_list_id')));
|
1009 |
-
}
|
1010 |
-
}
|
1011 |
-
|
1012 |
-
|
1013 |
-
public static function hook_auto_newsletter_refresh($post_id) {
|
1014 |
-
$helper_autonews = WYSIJA::get('autonews', 'helper');
|
1015 |
-
$helper_autonews->refresh_automatic_content();
|
1016 |
-
|
1017 |
-
return true;
|
1018 |
-
}
|
1019 |
-
|
1020 |
-
/**
|
1021 |
-
* post notification transition hook, know when a post really gets published
|
1022 |
-
* @param type $new_status
|
1023 |
-
* @param type $old_status
|
1024 |
-
* @param type $post
|
1025 |
-
* @return type
|
1026 |
-
*/
|
1027 |
-
public static function hook_postNotification_transition($new_status, $old_status, $post) {
|
1028 |
-
//we run some process only if the status of the post changes from something to publish
|
1029 |
-
if($new_status === 'publish' && $old_status !== $new_status) {
|
1030 |
-
$model_email = WYSIJA::get('email', 'model');
|
1031 |
-
$emails = $model_email->get(false, array('type' => 2, 'status' => array(1, 3, 99)));
|
1032 |
-
|
1033 |
-
if(!empty($emails)) {
|
1034 |
-
//we loop through all of the automatic emails
|
1035 |
-
foreach($emails as $key => $email) {
|
1036 |
-
|
1037 |
-
//we will try to give birth to a child email only if the automatic newsletter is a post notification email and in immediate mode
|
1038 |
-
if(is_array($email) && $email['params']['autonl']['event'] === 'new-articles' && $email['params']['autonl']['when-article'] === 'immediate') {
|
1039 |
-
// set default include/exclude categories
|
1040 |
-
$include_category_ids = array();
|
1041 |
-
$exclude_category_ids = array();
|
1042 |
-
|
1043 |
-
// ALC need to check for post_type on each block of the autoposts
|
1044 |
-
$wj_data = maybe_unserialize( base64_decode( $email['wj_data'] ) );
|
1045 |
-
$post_types = array();
|
1046 |
-
$has_alc_blocks = false;
|
1047 |
-
|
1048 |
-
foreach ( $wj_data['body'] as $block_key => $block ){
|
1049 |
-
if ( $block['type'] !== 'auto-post' ){
|
1050 |
-
continue;
|
1051 |
-
}
|
1052 |
-
|
1053 |
-
$has_alc_blocks = true;
|
1054 |
-
|
1055 |
-
// get post type and post categories from block parameters
|
1056 |
-
foreach( $block['params'] as $param_data ) {
|
1057 |
-
if(in_array($param_data['key'], array('post_type', 'cpt')) && strlen(trim($param_data['value'])) > 0) {
|
1058 |
-
// store post type
|
1059 |
-
$post_types[] = trim($param_data['value']);
|
1060 |
-
} else if($param_data['key'] === 'category_ids' && strlen(trim($param_data['value'])) > 0) {
|
1061 |
-
// store post category ids
|
1062 |
-
$include_category_ids = array_map('intval', explode(',', trim($param_data['value'])));
|
1063 |
-
}
|
1064 |
-
}
|
1065 |
-
}
|
1066 |
-
|
1067 |
-
if ( $has_alc_blocks === true && ! in_array( $post->post_type, $post_types ) ) {
|
1068 |
-
continue;
|
1069 |
-
}
|
1070 |
-
|
1071 |
-
// get post categories
|
1072 |
-
$helper_wp_tools = WYSIJA::get('wp_tools', 'helper');
|
1073 |
-
$taxonomies = $helper_wp_tools->get_post_category_ids($post);
|
1074 |
-
|
1075 |
-
// assume the post has to be sent
|
1076 |
-
$do_send_post = true;
|
1077 |
-
|
1078 |
-
// post categories have to match at least one of the email's included categories
|
1079 |
-
$include_intersection = array_intersect($taxonomies, $include_category_ids);
|
1080 |
-
if(!empty($include_category_ids) && empty($include_intersection)) {
|
1081 |
-
$do_send_post = false;
|
1082 |
-
}
|
1083 |
-
|
1084 |
-
$exclude_intersection = array_intersect($taxonomies, $exclude_category_ids);
|
1085 |
-
// post categories should not match any one of the email's excluded categories
|
1086 |
-
if(!empty($exclude_category_ids) && !empty($exclude_intersection)) {
|
1087 |
-
$do_send_post = false;
|
1088 |
-
}
|
1089 |
-
|
1090 |
-
if($do_send_post) {
|
1091 |
-
WYSIJA::log('post_transition_hook_give_birth', array(
|
1092 |
-
'post_id' => $post->ID,
|
1093 |
-
'post_title' => $post->post_title,
|
1094 |
-
'newsletter' => $email,
|
1095 |
-
'old_status' => $old_status,
|
1096 |
-
'new_status' => $new_status
|
1097 |
-
),'post_notif');
|
1098 |
-
|
1099 |
-
$model_email->reset();
|
1100 |
-
$model_email->give_birth($email, $post->ID);
|
1101 |
-
}
|
1102 |
-
}
|
1103 |
-
}
|
1104 |
-
}
|
1105 |
-
|
1106 |
-
// we check for automatic latest content widget in automatic newsletter
|
1107 |
-
$helper_autonews = WYSIJA::get('autonews', 'helper');
|
1108 |
-
$helper_autonews->refresh_automatic_content();
|
1109 |
-
}
|
1110 |
-
|
1111 |
-
return true;
|
1112 |
-
}
|
1113 |
-
|
1114 |
-
/**
|
1115 |
-
* uninstall process not used
|
1116 |
-
*/
|
1117 |
-
public static function uninstall(){
|
1118 |
-
$helperUS=WYSIJA::get('uninstall','helper');
|
1119 |
-
$helperUS->uninstall();
|
1120 |
-
}
|
1121 |
-
|
1122 |
-
/**
|
1123 |
-
* this function is run when wysija gets activated
|
1124 |
-
* there is no installation process here, all is about checking the global status of the app
|
1125 |
-
*/
|
1126 |
-
public static function activate(){
|
1127 |
-
$encoded_option=get_option('wysija');
|
1128 |
-
$installApp=false;
|
1129 |
-
if($encoded_option){
|
1130 |
-
$values=unserialize(base64_decode($encoded_option));
|
1131 |
-
if(isset($values['installed'])) $installApp=true;
|
1132 |
-
}
|
1133 |
-
|
1134 |
-
//test again for plugins on reactivation
|
1135 |
-
if($installApp){
|
1136 |
-
$helper_import=WYSIJA::get('plugins_import','helper');
|
1137 |
-
$helper_import->testPlugins();
|
1138 |
-
|
1139 |
-
//resynch wordpress list
|
1140 |
-
$helper_user=WYSIJA::get('user','helper');
|
1141 |
-
$helper_user->synchList($values['importwp_list_id']);
|
1142 |
-
}
|
1143 |
-
}
|
1144 |
-
|
1145 |
-
/**
|
1146 |
-
* the is_plugin_active functions from WordPress sometimes are not loaded so here is one that works for single and multisites anywhere in the code
|
1147 |
-
* @param type $pluginName
|
1148 |
-
* @return type
|
1149 |
-
*/
|
1150 |
-
public static function is_plugin_active($pluginName){
|
1151 |
-
$arrayactiveplugins=get_option('active_plugins');
|
1152 |
-
//we check in the list of the site options if the plugin is activated
|
1153 |
-
if(in_array($pluginName, $arrayactiveplugins)) {
|
1154 |
-
//plugin is activated for that site
|
1155 |
-
return true;
|
1156 |
-
}
|
1157 |
-
|
1158 |
-
//if this is a multisite it might not be activated in the site option but network activated though
|
1159 |
-
if(is_multisite()){
|
1160 |
-
$plugins = get_site_option('active_sitewide_plugins');
|
1161 |
-
//plugin is activated for that multisite
|
1162 |
-
if(isset($plugins[$pluginName])){
|
1163 |
-
return true;
|
1164 |
-
}
|
1165 |
-
}
|
1166 |
-
return false;
|
1167 |
-
}
|
1168 |
-
|
1169 |
-
/**
|
1170 |
-
* make sure that the current user has the good access rights corresponding to its role
|
1171 |
-
* @global type $current_user
|
1172 |
-
* @return type
|
1173 |
-
*/
|
1174 |
-
public static function update_user_caps(){
|
1175 |
-
global $current_user;
|
1176 |
-
|
1177 |
-
if(empty($current_user) && function_exists('get_currentuserinfo')) get_currentuserinfo();
|
1178 |
-
if(empty($current_user)) return false;
|
1179 |
-
$current_user->get_role_caps();
|
1180 |
-
|
1181 |
-
return true;
|
1182 |
-
}
|
1183 |
-
|
1184 |
-
/**
|
1185 |
-
* test whether the plugin is a beta version or not
|
1186 |
-
* 2.4.4.4 is a beta
|
1187 |
-
* 2.4.4 is a bug fix release
|
1188 |
-
* 2.4 is a feature release
|
1189 |
-
* @param string $plugin_name
|
1190 |
-
*/
|
1191 |
-
public static function is_beta($plugin_name=false){
|
1192 |
-
// exceptions
|
1193 |
-
$not_beta_versions = array('2.5.9.1', '2.5.9.2', '2.5.9.3', "2.5.9.4");
|
1194 |
-
$mailpoet_version = WYSIJA::get_version($plugin_name);
|
1195 |
-
if(in_array($mailpoet_version, $not_beta_versions)) return false;
|
1196 |
-
|
1197 |
-
// standard way of defining a beta version
|
1198 |
-
if(count(explode('.', $mailpoet_version)) > 3 ) return true;
|
1199 |
-
return false;
|
1200 |
-
}
|
1201 |
-
|
1202 |
-
/**
|
1203 |
-
* depending where it's used the base function from WordPress doesn't work, so this one will work anywhere
|
1204 |
-
* @param type $capability
|
1205 |
-
* @return type
|
1206 |
-
*/
|
1207 |
-
public static function current_user_can($capability){
|
1208 |
-
if(!$capability) return false;
|
1209 |
-
WYSIJA::update_user_caps();
|
1210 |
-
if(!current_user_can($capability)) return false;
|
1211 |
-
return true;
|
1212 |
-
}
|
1213 |
-
|
1214 |
-
/**
|
1215 |
-
* this function get and sets the cron schedules when MailPoet's own cron system is active
|
1216 |
-
* @staticvar type $cron_schedules
|
1217 |
-
* @param type $schedule
|
1218 |
-
* @return type
|
1219 |
-
*/
|
1220 |
-
public static function get_cron_schedule($schedule='queue'){
|
1221 |
-
static $cron_schedules;
|
1222 |
-
|
1223 |
-
//if the cron schedules are already loaded statically then we just have to return the right schedule value
|
1224 |
-
if(!empty($cron_schedules)){
|
1225 |
-
if($schedule=='all') return $cron_schedules;
|
1226 |
-
if(isset($cron_schedules[$schedule])) {
|
1227 |
-
return $cron_schedules[$schedule];
|
1228 |
-
}else{
|
1229 |
-
WYSIJA::set_cron_schedule($schedule);
|
1230 |
-
return false;
|
1231 |
-
}
|
1232 |
-
}else{
|
1233 |
-
//this is the first time this function is executed so let's get them from the db and store them statically
|
1234 |
-
$cron_schedules=get_option('wysija_schedules',array());
|
1235 |
-
if(!empty($cron_schedules)){
|
1236 |
-
if(isset($cron_schedules[$schedule])) return $cron_schedules[$schedule];
|
1237 |
-
else return false;
|
1238 |
-
}else{
|
1239 |
-
WYSIJA::set_cron_schedule();
|
1240 |
-
return false;
|
1241 |
-
}
|
1242 |
-
}
|
1243 |
-
return false;
|
1244 |
-
}
|
1245 |
-
|
1246 |
-
/**
|
1247 |
-
* return the frequency for each cron task needed by MailPoet
|
1248 |
-
* @return type an array of frequencies
|
1249 |
-
*/
|
1250 |
-
public static function get_cron_frequencies(){
|
1251 |
-
$model_config = WYSIJA::get('config','model');
|
1252 |
-
$helper_forms = WYSIJA::get('forms','helper');
|
1253 |
-
|
1254 |
-
if(is_multisite() && $model_config->getValue('sending_method')=='network'){
|
1255 |
-
$sending_emails_each = $model_config->getValue('ms_sending_emails_each');
|
1256 |
-
}else{
|
1257 |
-
$sending_emails_each = $model_config->getValue('sending_emails_each');
|
1258 |
-
}
|
1259 |
-
|
1260 |
-
$queue_frequency = $helper_forms->eachValuesSec[$sending_emails_each];
|
1261 |
-
$bounce_frequency = 99999999999999;
|
1262 |
-
if(isset($helper_forms->eachValuesSec[$model_config->getValue('bouncing_emails_each')])){
|
1263 |
-
$bounce_frequency = $helper_forms->eachValuesSec[$model_config->getValue('bouncing_emails_each')];
|
1264 |
-
}
|
1265 |
-
return array('queue'=>$queue_frequency,'bounce'=>$bounce_frequency,'daily'=>86400,'weekly'=>604800,'monthly'=>2419200);
|
1266 |
-
}
|
1267 |
-
|
1268 |
-
/**
|
1269 |
-
* set the next cron schedule
|
1270 |
-
* TODO : needs probably to make the difference of running process for the next schedule, so that there is no delay(this is only problematic on some slow servers)
|
1271 |
-
* @param string $schedule
|
1272 |
-
* @param int $last_saved
|
1273 |
-
* @param boolean $set_running
|
1274 |
-
* @return boolean
|
1275 |
-
*/
|
1276 |
-
public static function set_cron_schedule($schedule = false , $last_saved = 0 , $set_running = false){
|
1277 |
-
$cron_schedules = array();
|
1278 |
-
|
1279 |
-
$start_time = $last_saved;
|
1280 |
-
if(!$start_time) $start_time = time();
|
1281 |
-
$processes = WYSIJA::get_cron_frequencies();
|
1282 |
-
if(!$schedule){
|
1283 |
-
foreach($processes as $process => $frequency){
|
1284 |
-
$next_schedule = $start_time + $frequency;
|
1285 |
-
$prev_schedule = 0;
|
1286 |
-
if(isset($cron_schedules[$process]['running']) && $cron_schedules[$process]['running']) $prev_schedule=$cron_schedules[$process]['running'];
|
1287 |
-
$cron_schedules[$process]=array(
|
1288 |
-
'next_schedule' => $next_schedule,
|
1289 |
-
'prev_schedule' => $prev_schedule,
|
1290 |
-
'running' => false);
|
1291 |
-
}
|
1292 |
-
}else{
|
1293 |
-
$cron_schedules = WYSIJA::get_cron_schedule('all');
|
1294 |
-
if($set_running){
|
1295 |
-
$cron_schedules[$schedule]['running'] = $set_running;
|
1296 |
-
}else{
|
1297 |
-
$running = 0;
|
1298 |
-
if(isset($cron_schedules[$schedule]['running'])) $running = $cron_schedules[$schedule]['running'];
|
1299 |
-
// if the process is not running or has been running for more than 15 minutes then we set the next_schedule date
|
1300 |
-
$process_frequency = $processes[$schedule];
|
1301 |
-
|
1302 |
-
if(!$running || ( time() > ($running + $process_frequency) ) ){
|
1303 |
-
|
1304 |
-
$next_schedule = $start_time + $process_frequency;
|
1305 |
-
// if the next schedule is already behind, we give it 30 seconds before it can triggers again
|
1306 |
-
if( $next_schedule < $start_time ){
|
1307 |
-
$next_schedule = $start_time + 30;
|
1308 |
-
}
|
1309 |
-
|
1310 |
-
$cron_schedules[$schedule] = array(
|
1311 |
-
'next_schedule' => $next_schedule,
|
1312 |
-
'prev_schedule' => $running,
|
1313 |
-
'running' => false);
|
1314 |
-
}
|
1315 |
-
}
|
1316 |
-
}
|
1317 |
-
WYSIJA::update_option( 'wysija_schedules' , $cron_schedules , 'yes' );
|
1318 |
-
return true;
|
1319 |
-
}
|
1320 |
-
|
1321 |
-
/**
|
1322 |
-
* check that there is no passed schedules that need to be executed now
|
1323 |
-
* @return void
|
1324 |
-
*/
|
1325 |
-
public static function cron_check() {
|
1326 |
-
|
1327 |
-
$cron_schedules = WYSIJA::get_cron_schedule('all');
|
1328 |
-
if(empty($cron_schedules)) return;
|
1329 |
-
else{
|
1330 |
-
$processes = WYSIJA::get_cron_frequencies();
|
1331 |
-
|
1332 |
-
$updated_sched = false;
|
1333 |
-
foreach($cron_schedules as $schedule => &$params){
|
1334 |
-
$running = 0;
|
1335 |
-
$time_now = time();
|
1336 |
-
if(isset($params['running'])) $running = $params['running'];
|
1337 |
-
//if the process has timedout we reschedule the next execution
|
1338 |
-
if($running && ( $time_now> ($running + $processes[$schedule]) ) ){
|
1339 |
-
//WYSIJA::setInfo('error','modifying next schedule for '.$proc);
|
1340 |
-
$process_frequency = $processes[$schedule];
|
1341 |
-
|
1342 |
-
$next_schedule = $running + $process_frequency;
|
1343 |
-
// if the next schedule is already behind, we give it 30 seconds before it can trigger again
|
1344 |
-
if( $next_schedule < $time_now ){
|
1345 |
-
$next_schedule = $time_now + 30;
|
1346 |
-
}
|
1347 |
-
$params=array(
|
1348 |
-
'next_schedule' => $next_schedule,
|
1349 |
-
'prev_schedule' => $running,
|
1350 |
-
'running' => false);
|
1351 |
-
$updated_sched=true;
|
1352 |
-
}
|
1353 |
-
}
|
1354 |
-
if($updated_sched){
|
1355 |
-
//WYSIJA::setInfo('error','updating scheds');
|
1356 |
-
WYSIJA::update_option( 'wysija_schedules' , $cron_schedules , 'yes' );
|
1357 |
-
}
|
1358 |
-
|
1359 |
-
}
|
1360 |
-
|
1361 |
-
$time_now = time();
|
1362 |
-
$processesToRun = array();
|
1363 |
-
foreach($cron_schedules as $schedule => $scheduled_times){
|
1364 |
-
if(strpos($schedule, '(bounce handling not activated)')!==false) continue;
|
1365 |
-
$process_frequency = $processes[$schedule];
|
1366 |
-
if( ( !$scheduled_times['running'] || (int)$scheduled_times['running'] + $process_frequency < $time_now ) && $scheduled_times['next_schedule'] < $time_now){
|
1367 |
-
$processesToRun[] = $schedule;
|
1368 |
-
}
|
1369 |
-
}
|
1370 |
-
|
1371 |
-
$model_config = WYSIJA::get('config','model');
|
1372 |
-
$page_view_trigger = (int)$model_config->getValue('cron_page_hit_trigger');
|
1373 |
-
if(!empty($processesToRun) && $page_view_trigger === 1){
|
1374 |
-
//call the cron url
|
1375 |
-
// do not call that more than once per 5 minutes attempt at reducing the CPU load for some users
|
1376 |
-
// http://wordpress.org/support/topic/wysija-newsletters-slowing-down-my-site-1
|
1377 |
-
$last_cron_time_plus_5min = (int)get_option('wysija_last_php_cron_call') + (5*60);
|
1378 |
-
|
1379 |
-
if($last_cron_time_plus_5min < time()){
|
1380 |
-
$cron_url = site_url( 'wp-cron.php').'?'.WYSIJA_CRON.'&action=wysija_cron&process='.implode(',',$processesToRun).'&silent=1';
|
1381 |
-
$cron_request = apply_filters( 'cron_request', array(
|
1382 |
-
'url' => $cron_url,
|
1383 |
-
'args' => array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) )
|
1384 |
-
) );
|
1385 |
-
|
1386 |
-
wp_remote_post( $cron_url, $cron_request['args'] );
|
1387 |
-
WYSIJA::update_option('wysija_last_php_cron_call', time());
|
1388 |
-
}
|
1389 |
-
|
1390 |
-
|
1391 |
-
}
|
1392 |
-
}
|
1393 |
-
|
1394 |
-
/**
|
1395 |
-
* Function somehow necessary to avoid some conflicts in windows server and WordPress autoload of plugins language file
|
1396 |
-
* @param type $boolean
|
1397 |
-
* @param type $domain
|
1398 |
-
* @param type $mofile
|
1399 |
-
* @return boolean
|
1400 |
-
*/
|
1401 |
-
public static function override_load_textdomain($boolean, $domain, $mofile){
|
1402 |
-
$extensionloaded=WYSIJA::load_lang('get_all');
|
1403 |
-
|
1404 |
-
if(isset($extensionloaded[$domain]) && !@file_exists($mofile)){
|
1405 |
-
return true;
|
1406 |
-
}
|
1407 |
-
|
1408 |
-
return false;
|
1409 |
-
}
|
1410 |
-
|
1411 |
-
/**
|
1412 |
-
* function to rewrite the path of the file if the file doesn't exist
|
1413 |
-
* @param type $mofile
|
1414 |
-
* @param type $domain
|
1415 |
-
* @return type
|
1416 |
-
*/
|
1417 |
-
public static function load_textdomain_mofile($mofile, $domain){
|
1418 |
-
$extensionloaded=WYSIJA::load_lang('get_all');
|
1419 |
-
|
1420 |
-
if(isset($extensionloaded[$domain]) && !file_exists($mofile)){
|
1421 |
-
return WYSIJA_PLG_DIR.$domain.DS.'languages'.DS.$extensionloaded[$domain].'-'.get_locale().'.mo';
|
1422 |
-
}
|
1423 |
-
return $mofile;
|
1424 |
-
}
|
1425 |
}
|
1426 |
|
1427 |
// subscribers/wp-user synch hooks
|
@@ -1432,10 +1208,7 @@ add_action('profile_update', array('WYSIJA', 'hook_edit_WP_subscriber'), 1);
|
|
1432 |
add_action('delete_user', array('WYSIJA', 'hook_del_WP_subscriber'), 1);
|
1433 |
// for multisite
|
1434 |
add_action('deleted_user', array('WYSIJA', 'hook_del_WP_subscriber'), 1);
|
1435 |
-
add_action('remove_user_from_blog', array('WYSIJA', 'hook_del_WP_subscriber'), 1);
|
1436 |
|
1437 |
-
// Load the Upgrader Class
|
1438 |
-
add_action('init', array('WJ_Upgrade', 'hook'), 9);
|
1439 |
|
1440 |
// post notif trigger
|
1441 |
add_action('transition_post_status', array('WYSIJA', 'hook_postNotification_transition'), 1, 3);
|
@@ -1444,129 +1217,129 @@ add_action('transition_post_status', array('WYSIJA', 'hook_postNotification_tran
|
|
1444 |
add_action('delete_post', array('WYSIJA', 'hook_auto_newsletter_refresh'), 1, 1);
|
1445 |
|
1446 |
// add image size for emails
|
1447 |
-
add_image_size('wysija-newsletters-max', 600,
|
1448 |
|
1449 |
$modelConf=WYSIJA::get('config','model');
|
1450 |
if($modelConf->getValue('installed_time')){
|
1451 |
|
1452 |
-
|
1453 |
-
|
1454 |
-
|
1455 |
-
|
1456 |
-
|
1457 |
-
|
1458 |
-
|
1459 |
-
|
1460 |
-
|
1461 |
-
|
1462 |
-
|
1463 |
-
|
1464 |
-
|
1465 |
-
|
1466 |
-
|
1467 |
-
|
1468 |
-
|
1469 |
-
|
1470 |
-
|
1471 |
-
|
1472 |
-
|
1473 |
-
|
1474 |
-
|
1475 |
-
|
1476 |
-
|
1477 |
-
|
1478 |
-
|
1479 |
-
|
1480 |
-
|
1481 |
-
|
1482 |
-
|
1483 |
-
|
1484 |
-
|
1485 |
-
|
1486 |
-
|
1487 |
-
|
1488 |
-
|
1489 |
-
|
1490 |
-
|
1491 |
-
|
1492 |
-
|
1493 |
-
|
1494 |
-
|
1495 |
-
|
1496 |
-
|
1497 |
-
|
1498 |
-
|
1499 |
-
|
1500 |
-
|
1501 |
-
|
1502 |
-
|
1503 |
-
|
1504 |
-
|
1505 |
-
|
1506 |
-
|
1507 |
-
|
1508 |
-
|
1509 |
-
|
1510 |
-
|
1511 |
-
|
1512 |
-
|
1513 |
-
|
1514 |
-
|
1515 |
-
|
1516 |
-
|
1517 |
-
|
1518 |
-
|
1519 |
-
|
1520 |
-
|
1521 |
-
|
1522 |
-
|
1523 |
-
|
1524 |
-
|
1525 |
-
|
1526 |
-
|
1527 |
-
|
1528 |
-
|
1529 |
-
|
1530 |
-
|
1531 |
-
|
1532 |
-
|
1533 |
-
|
1534 |
-
|
1535 |
-
|
1536 |
-
|
1537 |
-
|
1538 |
-
|
1539 |
-
|
1540 |
-
|
1541 |
-
|
1542 |
-
|
1543 |
-
|
1544 |
-
|
1545 |
-
|
1546 |
-
|
1547 |
-
|
1548 |
-
|
1549 |
-
|
1550 |
-
|
1551 |
-
|
1552 |
-
|
1553 |
-
|
1554 |
-
|
1555 |
-
|
1556 |
-
|
1557 |
-
|
1558 |
-
|
1559 |
-
|
1560 |
-
|
1561 |
-
|
1562 |
-
|
1563 |
-
|
1564 |
-
|
1565 |
}
|
1566 |
|
1567 |
// not yet used but the purpose is to override any notification sent through wp_mail
|
1568 |
if($modelConf->getValue('wp_notifications')){
|
1569 |
-
|
1570 |
}
|
1571 |
|
1572 |
register_deactivation_hook(WYSIJA_FILE, array( 'WYSIJA', 'deactivate' ));
|
@@ -1575,4 +1348,4 @@ add_action( 'init', array('WYSIJA','create_post_type') );
|
|
1575 |
|
1576 |
|
1577 |
// launch application
|
1578 |
-
$helper
|
1 |
<?php
|
2 |
// Require constants.
|
3 |
+
require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'constants.php');
|
|
|
4 |
// Require global classes autoloader
|
5 |
+
require_once(dirname(__FILE__).DIRECTORY_SEPARATOR.'autoloader.php');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
7 |
+
defined('WYSIJA') or die('Restricted access');
|
8 |
+
global $wysija_msg;
|
9 |
+
global $wysija_wpmsg;
|
10 |
+
if(!$wysija_msg) $wysija_msg=array();
|
11 |
+
$wysija_wpmsg=array();
|
12 |
class WYSIJA_object{
|
13 |
|
14 |
+
function WYSIJA_object(){
|
15 |
+
|
16 |
+
}
|
17 |
+
|
18 |
+
/**
|
19 |
+
* return a plugin version safely anywhere in any hook and stock it staticaly
|
20 |
+
* @staticvar array $versions
|
21 |
+
* @param string $plugin_name
|
22 |
+
* @return array|string
|
23 |
+
*/
|
24 |
+
public static function get_version($plugin_name=false) {
|
25 |
+
static $versions=array();
|
26 |
+
if(isset($versions[$plugin_name])) return $versions[$plugin_name];
|
27 |
+
if ( ! function_exists( 'get_plugins' ) ) {
|
28 |
+
if(file_exists(ABSPATH . 'wp-admin'.DS.'includes'.DS.'plugin.php')){
|
29 |
+
require_once( ABSPATH . 'wp-admin'.DS.'includes'.DS.'plugin.php' );
|
30 |
+
}
|
31 |
+
}
|
32 |
+
if (function_exists( 'get_plugins' ) ) {
|
33 |
+
if(!$plugin_name) $plugin_name='wysija-newsletters/index.php';
|
34 |
+
$plugin_file=WYSIJA_PLG_DIR.str_replace('/',DS,$plugin_name);
|
35 |
+
$plugin_data = get_plugin_data( $plugin_file );
|
36 |
+
$versions[$plugin_name] = $plugin_data['Version'];
|
37 |
+
}else{
|
38 |
+
$versions[$plugin_name]='undefined';
|
39 |
+
}
|
40 |
+
return $versions[$plugin_name];
|
41 |
+
}
|
42 |
+
|
43 |
+
|
44 |
+
|
45 |
+
/**
|
46 |
+
* get the current_user data in a safe manner making sure a field exists before returning it's value
|
47 |
+
* @global type $current_user
|
48 |
+
* @param string $field
|
49 |
+
* @return mixed
|
50 |
+
*/
|
51 |
+
public static function wp_get_userdata($field=false){
|
52 |
+
//WordPress globals be careful there
|
53 |
+
global $current_user;
|
54 |
+
if($field){
|
55 |
+
if(function_exists('get_currentuserinfo')) get_currentuserinfo();
|
56 |
+
if(isset($current_user->$field))
|
57 |
+
return $current_user->$field;
|
58 |
+
elseif(isset($current_user->data->$field))
|
59 |
+
return $current_user->data->$field;
|
60 |
+
else{
|
61 |
+
return $current_user;
|
62 |
+
}
|
63 |
+
}
|
64 |
+
return $current_user;
|
65 |
+
}
|
66 |
+
|
67 |
+
/**
|
68 |
+
* set a global notice message
|
69 |
+
* @global array $wysija_wpmsg
|
70 |
+
* @param type $msg
|
71 |
+
*/
|
72 |
+
function wp_notice($msg){
|
73 |
+
global $wysija_wpmsg;
|
74 |
+
|
75 |
+
//add the hook only once
|
76 |
+
if(!$wysija_wpmsg) add_action('admin_notices', array($this,'wp_msgs'));
|
77 |
+
|
78 |
+
//record msgs
|
79 |
+
$wysija_wpmsg['updated'][]=$msg;
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* set a global error message
|
84 |
+
* @global array $wysija_wpmsg
|
85 |
+
* @param type $msg
|
86 |
+
*/
|
87 |
+
function wp_error($msg){
|
88 |
+
global $wysija_wpmsg;
|
89 |
+
|
90 |
+
//add the hook only once
|
91 |
+
if(!$wysija_wpmsg) add_action('admin_notices', array($this,'wp_msgs'));
|
92 |
+
|
93 |
+
//record msgs
|
94 |
+
$wysija_wpmsg['error'][]=$msg;
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* prints a global message in the WordPress' backend identified as belonging to wysija
|
99 |
+
* we tend to avoid as much as possible printing messages globally, since this is ugly
|
100 |
+
* and make the administrators immune to beige-yellowish messages :/
|
101 |
+
* @global array $wysija_wpmsg
|
102 |
+
*/
|
103 |
+
function wp_msgs() {
|
104 |
+
global $wysija_wpmsg;
|
105 |
+
foreach($wysija_wpmsg as $keymsg => $wp2){
|
106 |
+
$msgs= '<div class="'.$keymsg.' fade">';
|
107 |
+
foreach($wp2 as $mymsg)
|
108 |
+
$msgs.= '<p><strong>Wysija</strong> : '.$mymsg.'</p>';
|
109 |
+
$msgs.= '</div>';
|
110 |
+
}
|
111 |
+
|
112 |
+
echo $msgs;
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* returns an error message, it will appear as a red pinkish message in our interfaces
|
117 |
+
* @param string $msg
|
118 |
+
* @param boolean $public if set to true it will appear as a full message, otherwise it will appear behind a "Show more details." link
|
119 |
+
* @param boolean $global if set to true it will appear on all of the backend interfaces, not only wysija's own
|
120 |
+
*/
|
121 |
+
function error($msg,$public=false,$global=false){
|
122 |
+
$status='error';
|
123 |
+
if($global) $status='g-'.$status;
|
124 |
+
$this->setInfo($status,$msg,$public);
|
125 |
+
}
|
126 |
+
|
127 |
+
/**
|
128 |
+
* returns a success message, it will appear as a beige yellowish message in our interfaces
|
129 |
+
* @param string $msg
|
130 |
+
* @param boolean $public if set to true it will appear as a full message, otherwise it will appear behind a "Show more details." link
|
131 |
+
* @param boolean $global if set to true it will appear on all of the backend interfaces, not only wysija's own
|
132 |
+
*/
|
133 |
+
function notice($msg,$public=true,$global=false){
|
134 |
+
$status='updated';
|
135 |
+
if($global) $status='g-'.$status;
|
136 |
+
$this->setInfo($status,$msg,$public);
|
137 |
+
}
|
138 |
+
|
139 |
+
/**
|
140 |
+
* store all of the error and success messages in a global variable
|
141 |
+
* @global type $wysija_msg
|
142 |
+
* @param type $status whether this is a success message or an error message
|
143 |
+
* @param type $msg
|
144 |
+
* @param type $public if set to true it will appear as a full message, otherwise it will appear behind a "Show more details." link
|
145 |
+
*/
|
146 |
+
function setInfo($status,$msg,$public=false){
|
147 |
+
global $wysija_msg;
|
148 |
+
if(!$public) {
|
149 |
+
|
150 |
+
if(!isset($wysija_msg['private'][$status])){
|
151 |
+
$wysija_msg['private']=array();
|
152 |
+
$wysija_msg['private'][$status]=array();
|
153 |
+
}
|
154 |
+
array_push($wysija_msg['private'][$status], $msg);
|
155 |
+
}else{
|
156 |
+
if(!isset($wysija_msg[$status])) $wysija_msg[$status]=array();
|
157 |
+
array_push($wysija_msg[$status], $msg);
|
158 |
+
}
|
159 |
+
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* read the global function containing all of the error messages and print them
|
164 |
+
* @global type $wysija_msg
|
165 |
+
* @return type
|
166 |
+
*/
|
167 |
+
function getMsgs(){
|
168 |
+
global $wysija_msg;
|
169 |
+
|
170 |
+
if(isset($wysija_msg['private']['error'])){
|
171 |
+
$wysija_msg['error'][]=str_replace(array('[link]','[/link]'),array('<a class="showerrors" href="javascript:;">','</a>'),__('An error occured. [link]Show more details.[/link]',WYSIJA));
|
172 |
+
}
|
173 |
+
|
174 |
+
if(isset($wysija_msg['private']['updated'])){
|
175 |
+
$wysija_msg['updated'][]=str_replace(array('[link]','[/link]'),array('<a class="shownotices" href="javascript:;">','</a>'),__('[link]Show more details.[/link]',WYSIJA));
|
176 |
+
}
|
177 |
+
if(isset($wysija_msg['private'])){
|
178 |
+
$prv=$wysija_msg['private'];
|
179 |
+
unset($wysija_msg['private']);
|
180 |
+
if(isset($prv['error'])) $wysija_msg['xdetailed-errors']=$prv['error'];
|
181 |
+
if(isset($prv['updated'])) $wysija_msg['xdetailed-updated']=$prv['updated'];
|
182 |
+
}
|
183 |
+
return $wysija_msg;
|
184 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
185 |
}
|
186 |
|
187 |
|
188 |
class WYSIJA_help extends WYSIJA_object{
|
189 |
+
var $controller=null;
|
190 |
+
function WYSIJA_help(){
|
191 |
+
|
192 |
+
if(!defined('DOING_AJAX')){
|
193 |
+
add_action('init', array($this, 'register_scripts'), 1);
|
194 |
+
}
|
195 |
+
add_action('widgets_init', array($this, 'widgets_init'), 1);
|
196 |
+
}
|
197 |
+
|
198 |
+
function widgets_init() {
|
199 |
+
//load the widget file
|
200 |
+
require_once(WYSIJA_WIDGETS.'wysija_nl.php');
|
201 |
+
register_widget('WYSIJA_NL_Widget');
|
202 |
+
}
|
203 |
+
|
204 |
+
function register_scripts(){
|
205 |
+
$helper_toolbox = WYSIJA::get('toolbox','helper');
|
206 |
+
$wp_language_code = $helper_toolbox->get_language_code();
|
207 |
+
|
208 |
+
if(file_exists(WYSIJA_DIR.'js'.DS.'validate'.DS.'languages'.DS.'jquery.validationEngine-'.$wp_language_code.'.js')){
|
209 |
+
wp_register_script('wysija-validator-lang',WYSIJA_URL.'js/validate/languages/jquery.validationEngine-'.$wp_language_code.'.js', array( 'jquery' ),WYSIJA::get_version(),true );
|
210 |
+
}else{
|
211 |
+
wp_register_script('wysija-validator-lang',WYSIJA_URL.'js/validate/languages/jquery.validationEngine-en.js', array( 'jquery' ),WYSIJA::get_version(),true );
|
212 |
+
}
|
213 |
+
wp_register_script('wysija-validator',WYSIJA_URL.'js/validate/jquery.validationEngine.js', array( 'jquery' ),WYSIJA::get_version(),true );
|
214 |
+
wp_register_script('wysija-front-subscribers', WYSIJA_URL.'js/front-subscribers.js', array( 'jquery' ),WYSIJA::get_version(),true);
|
215 |
+
|
216 |
+
|
217 |
+
wp_register_script('wysija-form', WYSIJA_URL.'js/forms.js', array( 'jquery' ),WYSIJA::get_version());
|
218 |
+
wp_register_style('validate-engine-css',WYSIJA_URL.'css/validationEngine.jquery.css',array(),WYSIJA::get_version());
|
219 |
+
wp_register_script('wysija-admin-ajax', WYSIJA_URL.'js/admin-ajax.js',array(),WYSIJA::get_version());
|
220 |
+
wp_register_script('wysija-admin-ajax-proto', WYSIJA_URL.'js/admin-ajax-proto.js',array(),WYSIJA::get_version());
|
221 |
+
|
222 |
+
if(defined('WYSIJA_SIDE') && WYSIJA_SIDE=='front') wp_enqueue_style('validate-engine-css');
|
223 |
+
|
224 |
+
}
|
225 |
+
|
226 |
+
|
227 |
+
/**
|
228 |
+
* when doing an ajax request in admin this is the first place we come to
|
229 |
+
*/
|
230 |
+
function ajax() {
|
231 |
+
|
232 |
+
$resultArray=array();
|
233 |
+
if(!$_REQUEST || !isset($_REQUEST['controller']) || !isset($_REQUEST['task'])){
|
234 |
+
$resultArray=array('result'=>false);
|
235 |
+
}else{
|
236 |
+
$wysijapp='wysija-newsletters';
|
237 |
+
if(isset($_REQUEST['wysijaplugin'])) $wysijapp=$_REQUEST['wysijaplugin'];
|
238 |
+
|
239 |
+
$this->controller=WYSIJA::get($_REQUEST['controller'],'controller', false, $wysijapp);
|
240 |
+
|
241 |
+
if(method_exists($this->controller, $_REQUEST['task'])){
|
242 |
+
$resultArray['result']=$this->controller->$_REQUEST['task']();
|
243 |
+
}else{
|
244 |
+
$this->error('Method "'.$_REQUEST['task'].'" doesn\'t exist for controller : "'.$_REQUEST['controller']);
|
245 |
+
}
|
246 |
+
}
|
247 |
+
|
248 |
+
$resultArray['msgs'] = $this->getMsgs();
|
249 |
+
|
250 |
+
//this header will allow ajax request from the home domain, this can be a lifesaver when domain mapping is on
|
251 |
+
if(function_exists('home_url')) header('Access-Control-Allow-Origin: '.home_url());
|
252 |
+
|
253 |
+
header('Content-type: application/json');
|
254 |
+
$jsonData = json_encode($resultArray);
|
255 |
+
|
256 |
+
//in some case scenario our client will have jquery forcing the jsonp so we need to adapt ourselves
|
257 |
+
if(isset($_REQUEST['callback'])) {
|
258 |
+
$hJSONP = WYSIJA::get('jsonp', 'helper');
|
259 |
+
if($hJSONP->isValidCallback($_REQUEST['callback'])) {
|
260 |
+
print $_REQUEST['callback'] . '('.$jsonData.');';
|
261 |
+
}
|
262 |
+
} else {
|
263 |
+
print $jsonData;
|
264 |
+
}
|
265 |
+
die();
|
266 |
+
}
|
267 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
268 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
269 |
|
270 |
+
class WYSIJA extends WYSIJA_object{
|
|
|
271 |
|
272 |
+
function WYSIJA(){
|
273 |
+
|
274 |
+
}
|
275 |
+
|
276 |
+
/**
|
277 |
+
* function created at the beginning to handle particular cases with WP get_permalink it got much smaller recently
|
278 |
+
* @param int $pageid
|
279 |
+
* @param array $params
|
280 |
+
* @param boolean $simple
|
281 |
+
* @return type
|
282 |
+
*/
|
283 |
+
public static function get_permalink($pageid,$params=array(),$simple=false){
|
284 |
+
$hWPtools=WYSIJA::get('wp_tools','helper');
|
285 |
+
return $hWPtools->get_permalink($pageid,$params,$simple);
|
286 |
+
}
|
287 |
+
|
288 |
+
/**
|
289 |
+
* translate the plugin
|
290 |
+
* @staticvar boolean $extensionloaded
|
291 |
+
* @param type $extendedplugin
|
292 |
+
* @return boolean
|
293 |
+
*/
|
294 |
+
public static function load_lang($extendedplugin=false){
|
295 |
+
static $extensionloaded = false;
|
296 |
+
|
297 |
+
//we return the entire array of extensions loaded if non is specified
|
298 |
+
if(!$extendedplugin) return $extensionloaded;
|
299 |
+
|
300 |
+
//we only need to load this translation loader once on init
|
301 |
+
if(!$extensionloaded){
|
302 |
+
add_action('init', array('WYSIJA','load_lang_init'));
|
303 |
+
}
|
304 |
+
//each plugin has a different name
|
305 |
+
if ( !$extensionloaded || !isset($extensionloaded[$extendedplugin])) {
|
306 |
+
$transstring = null;
|
307 |
+
switch($extendedplugin){
|
308 |
+
case 'wysija-newsletters':
|
309 |
+
$transstring=WYSIJA;
|
310 |
+
break;
|
311 |
+
case 'wysijashop':
|
312 |
+
$transstring=WYSIJASHOP;
|
313 |
+
break;
|
314 |
+
case 'wysijacrons':
|
315 |
+
$transstring=WYSIJACRONS;
|
316 |
+
break;
|
317 |
+
case 'wysija-newsletters-premium':
|
318 |
+
$transstring=WYSIJANLP;
|
319 |
+
break;
|
320 |
+
case 'get_all':
|
321 |
+
return $extensionloaded;
|
322 |
+
}
|
323 |
+
|
324 |
+
//store all the required translations to be loaded in the static variable
|
325 |
+
if($transstring !== null) {
|
326 |
+
$extensionloaded[$extendedplugin] = $transstring;
|
327 |
+
}
|
328 |
+
}
|
329 |
+
}
|
330 |
+
|
331 |
+
/**
|
332 |
+
* check if the user is tech support as this can be used to switch the language back to english when helping our customers
|
333 |
+
* @global type $current_user
|
334 |
+
* @param type $debugmode
|
335 |
+
* @return type
|
336 |
+
*/
|
337 |
+
public static function is_wysija_admin($debugmode=false){
|
338 |
+
//to allow wysija team members to work in english mode if debug is activated
|
339 |
+
global $current_user;
|
340 |
+
|
341 |
+
if((int)$debugmode>0 && empty($current_user)) return true;
|
342 |
+
|
343 |
+
if(isset($current_user->data->user_email) &&
|
344 |
+
(strpos($current_user->data->user_email, '@mailpoet.com') !== false
|
345 |
+
|| strpos($current_user->data->user_email, '@bencaubere.com') !== false)) {
|
346 |
+
return true;
|
347 |
+
}
|
348 |
+
return false;
|
349 |
+
}
|
350 |
+
|
351 |
+
/**
|
352 |
+
* this function exists just to fix the issue with qtranslate :/ (it only fix it partially)
|
353 |
+
* @param type $extendedplugin
|
354 |
+
*/
|
355 |
+
public static function load_lang_init($extendedplugin=false){
|
356 |
+
$config=WYSIJA::get('config','model');
|
357 |
+
$debugmode=(int)$config->getValue('debug_new');
|
358 |
+
if($debugmode==0 || ($debugmode>0 && !WYSIJA::is_wysija_admin($debugmode))){
|
359 |
+
$extensionloaded=WYSIJA::load_lang('get_all');
|
360 |
+
foreach($extensionloaded as $extendedplugin => $transstring){
|
361 |
+
$filename=WYSIJA_PLG_DIR.$extendedplugin.DS.'languages'.DS.$transstring.'-'.get_locale().'.mo';
|
362 |
+
if(file_exists($filename)) load_textdomain($transstring, $filename);
|
363 |
+
}
|
364 |
+
}
|
365 |
+
}
|
366 |
+
|
367 |
+
/**
|
368 |
+
* function to generate objects of different types, managing file requiring in order to be the most efficient
|
369 |
+
* @staticvar array $arrayOfObjects
|
370 |
+
* @param string $name
|
371 |
+
* @param string $type : in which folder do we go and pick the class
|
372 |
+
* @param boolean $force_side : this parameter is almost never set to true,
|
373 |
+
* it will be useful for instance if you want to get a back controller
|
374 |
+
* from the frontend, it was used maybe in the shop but it can be ignored for wysija-newsletters
|
375 |
+
* @param type $extended_plugin : used only when calling the url from a different plugin it is used watch those files :
|
376 |
+
* -core/controller.php line 21, 23 ,24
|
377 |
+
* @param type $load_lang : the load lang is in the get to be sure we don't forget to load the language file for each plugin at least once
|
378 |
+
* the way I see it it could be moved to the index.php of each plugin. for now only wysija-newsletters is translated anyway
|
379 |
+
* @return boolean
|
380 |
+
*/
|
381 |
+
public static function get($name,$type,$force_side=false,$extended_plugin='wysija-newsletters',$load_lang=true){
|
382 |
+
static $array_of_objects;
|
383 |
+
|
384 |
+
if($load_lang) WYSIJA::load_lang($extended_plugin);
|
385 |
+
|
386 |
+
// store all the objects made so that we can reuse them accross the application if the object is already set we return it immediately
|
387 |
+
if(isset($array_of_objects[$extended_plugin][$type.$name])) {
|
388 |
+
return $array_of_objects[$extended_plugin][$type.$name];
|
389 |
+
}
|
390 |
+
|
391 |
+
// which folder do we pick for controllersand views ? back or front ?
|
392 |
+
if($force_side) {
|
393 |
+
$side=$force_side;
|
394 |
+
} else {
|
395 |
+
$side=WYSIJA_SIDE;
|
396 |
+
}
|
397 |
+
|
398 |
+
// for each plugin we will define the $extended_constant variable if it's not defined already
|
399 |
+
// also we will defined the $extended_plugin_name which corresponds to the folder name and also will be used to build the class to be called
|
400 |
+
switch($extended_plugin){
|
401 |
+
case 'wysija-newsletters-premium':
|
402 |
+
$extended_constant='WYSIJANLP';
|
403 |
+
if(!defined($extended_constant)) define($extended_constant,$extended_constant);
|
404 |
+
$extended_plugin_name='wysijanlp';
|
405 |
+
break;
|
406 |
+
case 'wysija-newsletters':
|
407 |
+
$extended_constant='WYSIJA';
|
408 |
+
if(!defined($extended_constant)) define($extended_constant,$extended_constant);
|
409 |
+
$extended_plugin_name='wysija';
|
410 |
+
break;
|
411 |
+
default :
|
412 |
+
$extended_constant=strtoupper($extended_plugin);
|
413 |
+
if(!defined($extended_constant)) define($extended_constant,$extended_constant);
|
414 |
+
$extended_plugin_name=$extended_plugin;
|
415 |
+
}
|
416 |
+
|
417 |
+
// security to protect against dangerous ./../ includes
|
418 |
+
$name = preg_replace('#[^a-z0-9_]#i','',$name);
|
419 |
+
|
420 |
+
// this switch will require_once the file needed and build a the class name depending on the parameters passed to the function
|
421 |
+
switch($type){
|
422 |
+
case 'controller':
|
423 |
+
// require the parent class necessary
|
424 |
+
require_once(WYSIJA_CORE.'controller.php');
|
425 |
+
|
426 |
+
$ctrdir=WYSIJA_PLG_DIR.$extended_plugin.DS.'controllers'.DS;
|
427 |
+
|
428 |
+
// if we are doing ajax we don't go to one side, ajax is for frontend or backend in the same folder
|
429 |
+
if(defined('DOING_AJAX')) {
|
430 |
+
$class_path=$ctrdir.'ajax'.DS.$name.'.php';
|
431 |
+
}else {
|
432 |
+
// the other controllers are called in a side folder back or front
|
433 |
+
$class_path=$ctrdir.$side.DS.$name.'.php';
|
434 |
+
// require the side specific controller file
|
435 |
+
require_once(WYSIJA_CTRL.$side.'.php');
|
436 |
}
|
437 |
+
$class_name = strtoupper($extended_plugin_name).'_control_'.$side.'_'.$name;
|
438 |
+
break;
|
439 |
+
case 'view':
|
440 |
+
$viewdir=WYSIJA_PLG_DIR.$extended_plugin.DS.'views'.DS;
|
441 |
+
// let's get the right path for the view front or back and the right class_name
|
442 |
+
$class_path=$viewdir.$side.DS.$name.'.php';
|
443 |
+
$class_name = strtoupper($extended_plugin_name).'_view_'.$side.'_'.$name;
|
444 |
+
|
445 |
+
// require the common view file and the side view file
|
446 |
+
require_once(WYSIJA_CORE.'view.php');
|
447 |
+
require_once(WYSIJA_VIEWS.$side.'.php');
|
448 |
+
break;
|
449 |
+
case 'helper':
|
450 |
+
$helpdir=WYSIJA_PLG_DIR.$extended_plugin.DS.'helpers'.DS;
|
451 |
+
$class_path=$helpdir.$name.'.php';
|
452 |
+
$class_name = strtoupper($extended_plugin_name).'_help_'.$name;
|
453 |
+
|
454 |
+
break;
|
455 |
+
case 'model':
|
456 |
+
$modeldir=WYSIJA_PLG_DIR.$extended_plugin.DS.'models'.DS;
|
457 |
+
$class_path=$modeldir.$name.'.php';
|
458 |
+
$class_name = strtoupper($extended_plugin_name).'_model_'.$name;
|
459 |
+
// require the parent class necessary
|
460 |
+
require_once(WYSIJA_CORE.'model.php');
|
461 |
+
break;
|
462 |
+
case 'widget':
|
463 |
+
$modeldir=WYSIJA_PLG_DIR.$extended_plugin.DS.'widgets'.DS;
|
464 |
+
$class_path=$modeldir.$name.'.php';
|
465 |
+
if($name=='wysija_nl') $class_name='WYSIJA_NL_Widget';
|
466 |
+
else $class_name = strtoupper($extended_plugin_name).'_widget_'.$name;
|
467 |
+
break;
|
468 |
+
default:
|
469 |
+
WYSIJA::setInfo('error','WYSIJA::get does not accept this type of file "'.$type.'" .');
|
470 |
+
return false;
|
471 |
+
}
|
472 |
+
|
473 |
+
if(!file_exists($class_path)) {
|
474 |
+
WYSIJA::setInfo('error','file has not been recognised '.$class_path);
|
475 |
+
return;
|
476 |
+
}
|
477 |
+
|
478 |
+
// require the file needed once and store & return the object needed
|
479 |
+
require_once($class_path);
|
480 |
+
return $array_of_objects[$extended_plugin][$type.$name]=new $class_name($extended_plugin_name);
|
481 |
+
|
482 |
+
}
|
483 |
+
|
484 |
+
/**
|
485 |
+
* log function to spot some strange issues when sending emails for instance
|
486 |
+
* @param type $key
|
487 |
+
* @param type $data
|
488 |
+
* @param type $category
|
489 |
+
* @return type
|
490 |
+
*/
|
491 |
+
public static function log($key='default',$data='empty',$category='default'){
|
492 |
+
$config=WYSIJA::get('config','model');
|
493 |
+
|
494 |
+
if((int)$config->getValue('debug_new')>1 && $category && $config->getValue('debug_log_'.$category)){
|
495 |
+
|
496 |
+
$optionlog=get_option('wysija_log');
|
497 |
+
|
498 |
+
|
499 |
+
$optionlog[$category][(string)microtime(true)][$key]=$data;
|
500 |
+
|
501 |
+
WYSIJA::update_option('wysija_log' , $optionlog);
|
502 |
+
}
|
503 |
+
return false;
|
504 |
+
}
|
505 |
+
|
506 |
+
/**
|
507 |
+
* the filter to add option to the cron frequency instead of being stuck with hourly, daily and twicedaily...
|
508 |
+
* we can add filters but we cannot delete other values such as the default ones, as this might break other plugins crons
|
509 |
+
* @param type $param
|
510 |
+
* @return type
|
511 |
+
*/
|
512 |
+
public static function filter_cron_schedules( $param ) {
|
513 |
+
$frequencies=array(
|
514 |
+
'one_min' => array(
|
515 |
+
'interval' => 60,
|
516 |
+
'display' => __( 'Once every minutes',WYSIJA)
|
517 |
+
),
|
518 |
+
'two_min' => array(
|
519 |
+
'interval' => 120,
|
520 |
+
'display' => __( 'Once every two minutes',WYSIJA)
|
521 |
+
),
|
522 |
+
'five_min' => array(
|
523 |
+
'interval' => 300,
|
524 |
+
'display' => __( 'Once every five minutes',WYSIJA)
|
525 |
+
),
|
526 |
+
'ten_min' => array(
|
527 |
+
'interval' => 600,
|
528 |
+
'display' => __( 'Once every ten minutes',WYSIJA)
|
529 |
+
),
|
530 |
+
'fifteen_min' => array(
|
531 |
+
'interval' => 900,
|
532 |
+
'display' => __( 'Once every fifteen minutes',WYSIJA)
|
533 |
+
),
|
534 |
+
'thirty_min' => array(
|
535 |
+
'interval' => 1800,
|
536 |
+
'display' => __( 'Once every thirty minutes',WYSIJA)
|
537 |
+
),
|
538 |
+
'two_hours' => array(
|
539 |
+
'interval' => 7200,
|
540 |
+
'display' => __( 'Once every two hours',WYSIJA)
|
541 |
+
),
|
542 |
+
'eachweek' => array(
|
543 |
+
'interval' => 604800,
|
544 |
+
'display' => __( 'Once a week',WYSIJA)
|
545 |
+
),
|
546 |
+
'each28days' => array(
|
547 |
+
'interval' => 2419200,
|
548 |
+
'display' => __( 'Once every 28 days',WYSIJA)
|
549 |
+
),
|
550 |
+
);
|
551 |
+
|
552 |
+
return array_merge($param, $frequencies);
|
553 |
+
}
|
554 |
+
|
555 |
+
/**
|
556 |
+
* scheduled task for sending the emails in the queue, the frequency is set in the settings
|
557 |
+
*/
|
558 |
+
public static function croned_queue( $check_scheduled_newsletter = true) {
|
559 |
+
|
560 |
+
// check the scheduled tasks only if it's a standard WP scheduled task free only
|
561 |
+
if($check_scheduled_newsletter){
|
562 |
+
WYSIJA::check_scheduled_newsletters();
|
563 |
+
}
|
564 |
+
|
565 |
+
$model_config = WYSIJA::get('config','model');
|
566 |
+
if((int)$model_config->getValue('total_subscribers') < 2000 ){
|
567 |
+
$helper_queue = WYSIJA::get('queue','helper');
|
568 |
+
$helper_queue->report=false;
|
569 |
+
WYSIJA::log('croned_queue process',true,'cron');
|
570 |
+
$helper_queue->process();
|
571 |
+
}
|
572 |
+
}
|
573 |
+
|
574 |
+
public static function check_scheduled_newsletters(){
|
575 |
+
$last_scheduled_check = get_option('wysija_last_scheduled_check');
|
576 |
+
|
577 |
+
// if the latest post notification check was done more than five minutes ago let's check it again
|
578 |
+
if(empty($last_scheduled_check) || ( time() > ($last_scheduled_check + 300) ) ){
|
579 |
+
// create the scheduled automatic post notifications email if there are any
|
580 |
+
$helper_autonews = WYSIJA::get('autonews','helper');
|
581 |
+
$helper_autonews->checkPostNotif();
|
582 |
+
|
583 |
+
// queue the scheduled newsletter also if there are any
|
584 |
+
$helper_autonews->checkScheduled();
|
585 |
+
WYSIJA::update_option('wysija_last_scheduled_check', time());
|
586 |
+
}
|
587 |
+
|
588 |
+
}
|
589 |
+
|
590 |
+
|
591 |
+
/**
|
592 |
+
* everyday we make sure not to leave any trash files
|
593 |
+
* remove temporary files
|
594 |
+
*/
|
595 |
+
public static function croned_daily() {
|
596 |
+
|
597 |
+
@ini_set('max_execution_time',0);
|
598 |
+
|
599 |
+
/*user refresh count total*/
|
600 |
+
$helper_user = WYSIJA::get('user','helper');
|
601 |
+
$helper_user->refreshUsers();
|
602 |
+
|
603 |
+
/*clear temporary folders*/
|
604 |
+
$helper_file = WYSIJA::get('file','helper');
|
605 |
+
$helper_file->clear();
|
606 |
+
|
607 |
+
/*clear queue from unsubscribed*/
|
608 |
+
$helper_queue = WYSIJA::get('queue','helper');
|
609 |
+
$helper_queue->clear();
|
610 |
+
|
611 |
+
$model_config = WYSIJA::get('config','model');
|
612 |
+
|
613 |
+
/* send daily report about emails sent */
|
614 |
+
if($model_config->getValue('emails_notified_when_dailysummary')){
|
615 |
+
$helper_stats = WYSIJA::get('stats','helper');
|
616 |
+
$helper_stats->sendDailyReport();
|
617 |
+
}
|
618 |
+
|
619 |
+
}
|
620 |
+
|
621 |
+
// Weekly cron
|
622 |
+
public static function croned_weekly() {
|
623 |
+
|
624 |
+
@ini_set('max_execution_time',0);
|
625 |
+
|
626 |
+
$model_config = WYSIJA::get('config','model');
|
627 |
+
|
628 |
+
// If enabled, flag MixPanel sending on next page load.
|
629 |
+
if ($model_config->getValue('analytics') == 1) {
|
630 |
+
$model_config->save(array('send_analytics_now' => 1));
|
631 |
+
}
|
632 |
+
|
633 |
+
}
|
634 |
+
|
635 |
+
// Monthly cron
|
636 |
+
public static function croned_monthly() {
|
637 |
+
|
638 |
+
@ini_set('max_execution_time',0);
|
639 |
+
|
640 |
+
$model_config = WYSIJA::get('config','model');
|
641 |
+
|
642 |
+
/* send daily report about emails sent */
|
643 |
+
if ($model_config->getValue('sharedata')) {
|
644 |
+
$helper_stats = WYSIJA::get('stats','helper');
|
645 |
+
$helper_stats->share();
|
646 |
+
}
|
647 |
+
|
648 |
+
}
|
649 |
+
|
650 |
+
/**
|
651 |
+
* when we deactivate the plugin we clear the WP install from those cron records
|
652 |
+
*/
|
653 |
+
public static function deactivate() {
|
654 |
+
wp_clear_scheduled_hook('wysija_cron_queue');
|
655 |
+
wp_clear_scheduled_hook('wysija_cron_bounce');
|
656 |
+
wp_clear_scheduled_hook('wysija_cron_daily');
|
657 |
+
wp_clear_scheduled_hook('wysija_cron_weekly');
|
658 |
+
wp_clear_scheduled_hook('wysija_cron_monthly');
|
659 |
+
}
|
660 |
+
|
661 |
+
|
662 |
+
/**
|
663 |
+
* wysija's redirect allows to save some variables for the next page load such as notices etc..
|
664 |
+
* @global type $wysija_msg
|
665 |
+
* @global type $wysija_queries
|
666 |
+
* @global type $wysija_queries_errors
|
667 |
+
* @param type $location
|
668 |
+
*/
|
669 |
+
public static function redirect($location) {
|
670 |
+
//save the messages
|
671 |
+
global $wysija_msg,$wysija_queries,$wysija_queries_errors;
|
672 |
+
WYSIJA::update_option('wysija_msg',$wysija_msg);
|
673 |
+
WYSIJA::update_option('wysija_queries',$wysija_queries);
|
674 |
+
WYSIJA::update_option('wysija_queries_errors',$wysija_queries_errors);
|
675 |
+
|
676 |
+
// make sure we encode square brackets as wp_redirect will strip them off
|
677 |
+
$location = str_replace(array('[', ']'), array('%5B', '%5D'), $location);
|
678 |
+
|
679 |
+
// redirect to specified location
|
680 |
+
wp_redirect($location);
|
681 |
+
exit;
|
682 |
+
}
|
683 |
+
|
684 |
+
/**
|
685 |
+
* custom post type for wysija is call wysijap as in wysija's post
|
686 |
+
*/
|
687 |
+
public static function create_post_type() {
|
688 |
+
|
689 |
+
//by default there is url rewriteing on wysijap custom post, though in one client case I had to deactivate it.
|
690 |
+
//as this is rare we just need to set this setting to activate it
|
691 |
+
//by default let's deactivate the url rewriting of the wysijap confirmation page because it is breaking in some case.
|
692 |
+
$show_interface=false;
|
693 |
+
if(defined('WYSIJA_DBG') && WYSIJA_DBG>1) $show_interface=true;
|
694 |
+
register_post_type( 'wysijap',
|
695 |
+
array(
|
696 |
+
'labels' => array(
|
697 |
+
'name' => __('Wysija page'),
|
698 |
+
'singular_name' => __('Wysija page')
|
699 |
+
),
|
700 |
+
'public' => true,
|
701 |
+
'has_archive' => false,
|
702 |
+
'show_ui' =>$show_interface,
|
703 |
+
'show_in_menu' =>$show_interface,
|
704 |
+
'rewrite' => false,
|
705 |
+
'show_in_nav_menus'=>false,
|
706 |
+
'can_export'=>false,
|
707 |
+
'publicly_queryable'=>true,
|
708 |
+
'exclude_from_search'=>true,
|
709 |
+
)
|
710 |
+
);
|
711 |
+
|
712 |
+
if(!get_option('wysija_post_type_updated')) {
|
713 |
+
$modelPosts=new WYSIJA_model();
|
714 |
+
$modelPosts->tableWP=true;
|
715 |
+
$modelPosts->table_prefix='';
|
716 |
+
$modelPosts->table_name='posts';
|
717 |
+
$modelPosts->noCheck=true;
|
718 |
+
$modelPosts->pk='ID';
|
719 |
+
if($modelPosts->exists(array('post_type'=>'wysijapage'))){
|
720 |
+
$modelPosts->update(array('post_type'=>'wysijap'),array('post_type'=>'wysijapage'));
|
721 |
+
flush_rewrite_rules( false );
|
722 |
+
}
|
723 |
+
WYSIJA::update_option('wysija_post_type_updated',time());
|
724 |
+
}
|
725 |
+
|
726 |
+
if(!get_option('wysija_post_type_created')) {
|
727 |
+
flush_rewrite_rules( false );
|
728 |
+
WYSIJA::update_option('wysija_post_type_created',time());
|
729 |
+
}
|
730 |
+
|
731 |
+
}
|
732 |
+
|
733 |
+
/**
|
734 |
+
* wysija update_option function is very similar to WordPress' one but it
|
735 |
+
* can also manage new options not automatically loaded each time
|
736 |
+
* @param type $option_name
|
737 |
+
* @param type $newvalue
|
738 |
+
* @param type $defaultload this parameter is the advantage other Wp's update_option here
|
739 |
+
*/
|
740 |
+
public static function update_option($option_name,$newvalue,$defaultload='no'){
|
741 |
+
if ( get_option( $option_name ) != $newvalue ) {
|
742 |
+
update_option( $option_name, $newvalue );
|
743 |
+
} else {
|
744 |
+
add_option( $option_name, $newvalue, '', $defaultload );
|
745 |
+
}
|
746 |
+
}
|
747 |
+
|
748 |
+
/**
|
749 |
+
* When a WordPress user is added we also need to add it to the subscribers list
|
750 |
+
* @param type $user_id
|
751 |
+
* @return type
|
752 |
+
*/
|
753 |
+
public static function hook_add_WP_subscriber($user_id) {
|
754 |
+
$data=get_userdata($user_id);
|
755 |
+
|
756 |
+
|
757 |
+
//check first if a subscribers exists if it doesn't then let's insert it
|
758 |
+
$model_config=WYSIJA::get('config','model');
|
759 |
+
$model_user=WYSIJA::get('user','model');
|
760 |
+
$model_user->getFormat=ARRAY_A; // there is one case where we were getting an object instead of an array
|
761 |
+
$subscriber_exists=$model_user->getOne(array('user_id'),array('email'=>$data->user_email));
|
762 |
+
|
763 |
+
$first_name=$data->first_name;
|
764 |
+
$last_name=$data->last_name;
|
765 |
+
if(!$data->first_name && !$data->last_name) $first_name=$data->display_name;
|
766 |
+
|
767 |
+
$model_user->reset();
|
768 |
+
if($subscriber_exists){
|
769 |
+
$user_id=$subscriber_exists['user_id'];
|
770 |
+
// we need to update the current subscriber using it's id
|
771 |
+
$model_user->update(array('wpuser_id'=>$data->ID,'firstname'=>$first_name,'lastname'=>$last_name),array('user_id'=>$user_id));
|
772 |
+
}else{
|
773 |
+
$model_user->noCheck=true;
|
774 |
+
$user_id=$model_user->insert(array('email'=>$data->user_email,'wpuser_id'=>$data->ID,'firstname'=>$first_name,'lastname'=>$last_name,'status'=>$model_config->getValue('confirm_dbleoptin')));
|
775 |
+
}
|
776 |
+
|
777 |
+
$model_user_list=WYSIJA::get('user_list','model');
|
778 |
+
$model_user_list->insert(array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id'),'sub_date'=>time()),true);
|
779 |
+
|
780 |
+
$helper_user=WYSIJA::get('user','helper');
|
781 |
+
$helper_user->sendAutoNl($user_id,$data,'new-user');
|
782 |
+
return true;
|
783 |
+
}
|
784 |
+
|
785 |
+
/**
|
786 |
+
* when a WordPress user is updated we also need to update the corresponding subscriber
|
787 |
+
* @param type $user_id
|
788 |
+
* @return type
|
789 |
+
*/
|
790 |
+
public static function hook_edit_WP_subscriber($user_id) {
|
791 |
+
$data=get_userdata($user_id);
|
792 |
+
|
793 |
+
//check first if a subscribers exists if it doesn't then let's insert it
|
794 |
+
$model_user=WYSIJA::get('user','model');
|
795 |
+
$model_config=WYSIJA::get('config','model');
|
796 |
+
$model_user_list=WYSIJA::get('user_list','model');
|
797 |
+
$model_user->getFormat = ARRAY_A;
|
798 |
+
$subscriber_exists=$model_user->getOne(array('user_id'),array('email'=>$data->user_email));
|
799 |
+
|
800 |
+
$model_user->reset();
|
801 |
+
|
802 |
+
$first_name=$data->first_name;
|
803 |
+
$last_name=$data->last_name;
|
804 |
+
if(!$data->first_name && !$data->last_name) $first_name=$data->display_name;
|
805 |
+
|
806 |
+
if($subscriber_exists){
|
807 |
+
$user_id=$subscriber_exists['user_id'];
|
808 |
+
|
809 |
+
$model_user->update(array('wpuser_id'=>$data->ID, 'email'=>$data->user_email,'firstname'=>$first_name,'lastname'=>$last_name),array('user_id'=>$user_id));
|
810 |
+
|
811 |
+
$result=$model_user_list->getOne(false,array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id')));
|
812 |
+
$model_user_list->reset();
|
813 |
+
if(!$result)
|
814 |
+
$model_user_list->insert(array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id'),'sub_date'=>time()));
|
815 |
+
}else{
|
816 |
+
//chck that we didnt update the email
|
817 |
+
$subscriber_exists=$model_user->getOne(false,array('wpuser_id'=>$data->ID));
|
818 |
+
|
819 |
+
if($subscriber_exists){
|
820 |
+
$user_id=$subscriber_exists['user_id'];
|
821 |
+
|
822 |
+
$model_user->update(array('email'=>$data->user_email,'firstname'=>$first_name,'lastname'=>$last_name),array('wpuser_id'=>$data->ID));
|
823 |
+
|
824 |
+
$result=$model_user_list->getOne(false,array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id')));
|
825 |
+
$model_user_list->reset();
|
826 |
+
if(!$result)
|
827 |
+
$model_user_list->insert(array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id'),'sub_date'=>time()));
|
828 |
+
}else{
|
829 |
+
$model_user->noCheck=true;
|
830 |
+
$user_id=$model_user->insert(array('email'=>$data->user_email,'wpuser_id'=>$data->ID,'firstname'=>$first_name,'lastname'=>$last_name,'status'=>$model_config->getValue('confirm_dbleoptin')));
|
831 |
+
$model_user_list->insert(array('user_id'=>$user_id,'list_id'=>$model_config->getValue('importwp_list_id'),'sub_date'=>time()));
|
832 |
+
}
|
833 |
+
}
|
834 |
+
return true;
|
835 |
+
}
|
836 |
+
|
837 |
+
/**
|
838 |
+
* when a wp user is deleted we also delete the subscriber corresponding to it
|
839 |
+
* @param type $user_id
|
840 |
+
*/
|
841 |
+
public static function hook_del_WP_subscriber($user_id) {
|
842 |
+
$model_config=WYSIJA::get('config','model');
|
843 |
+
$model_user=WYSIJA::get('user','model');
|
844 |
+
$data = $model_user->getOne(array('email','user_id'),array('wpuser_id'=>$user_id));
|
845 |
+
$model_user->delete(array('email'=>$data['email']));
|
846 |
+
$model_user=WYSIJA::get('user_list','model');
|
847 |
+
$model_user->delete(array('user_id'=>$data['user_id'],'list_id'=>$model_config->getValue('importwp_list_id')));
|
848 |
+
}
|
849 |
+
|
850 |
+
|
851 |
+
public static function hook_auto_newsletter_refresh($post_id) {
|
852 |
+
$helper_autonews = WYSIJA::get('autonews', 'helper');
|
853 |
+
$helper_autonews->refresh_automatic_content();
|
854 |
+
|
855 |
+
return true;
|
856 |
+
}
|
857 |
+
|
858 |
+
/**
|
859 |
+
* post notification transition hook, know when a post really gets published
|
860 |
+
* @param type $new_status
|
861 |
+
* @param type $old_status
|
862 |
+
* @param type $post
|
863 |
+
* @return type
|
864 |
+
*/
|
865 |
+
public static function hook_postNotification_transition($new_status, $old_status, $post) {
|
866 |
+
//we run some process only if the status of the post changes from something to publish
|
867 |
+
if( $new_status=='publish' && $old_status!=$new_status){
|
868 |
+
|
869 |
+
$model_email = WYSIJA::get('email', 'model');
|
870 |
+
$emails = $model_email->get(false, array('type' => 2, 'status' => array(1, 3, 99)));
|
871 |
+
if(!empty($emails)){
|
872 |
+
//we loop through all of the automatic emails
|
873 |
+
foreach($emails as $key => $email) {
|
874 |
+
//we will try to give birth to a child email only if the automatic newsletter is a post notification email and in immediate mode
|
875 |
+
if(is_array($email) && $email['params']['autonl']['event'] === 'new-articles' && $email['params']['autonl']['when-article'] === 'immediate') {
|
876 |
+
WYSIJA::log('post_transition_hook_give_birth',array('postID'=>$post->ID,'postID'=>$post->post_title,'old_status'=>$old_status,'new_status'=>$new_status),'post_notif');
|
877 |
+
$model_email->reset();
|
878 |
+
$model_email->give_birth($email, $post->ID);
|
879 |
+
}
|
880 |
+
}
|
881 |
+
}
|
882 |
+
|
883 |
+
// we check for automatic latest content widget in automatic newsletter
|
884 |
+
$helper_autonews = WYSIJA::get('autonews', 'helper');
|
885 |
+
$helper_autonews->refresh_automatic_content();
|
886 |
+
}
|
887 |
+
|
888 |
+
return true;
|
889 |
+
}
|
890 |
+
|
891 |
+
/**
|
892 |
+
* uninstall process not used
|
893 |
+
*/
|
894 |
+
public static function uninstall(){
|
895 |
+
$helperUS=WYSIJA::get('uninstall','helper');
|
896 |
+
$helperUS->uninstall();
|
897 |
+
}
|
898 |
+
|
899 |
+
/**
|
900 |
+
* this function is run when wysija gets activated
|
901 |
+
* there is no installation process here, all is about checking the global status of the app
|
902 |
+
*/
|
903 |
+
public static function activate(){
|
904 |
+
$encoded_option=get_option('wysija');
|
905 |
+
$installApp=false;
|
906 |
+
if($encoded_option){
|
907 |
+
$values=unserialize(base64_decode($encoded_option));
|
908 |
+
if(isset($values['installed'])) $installApp=true;
|
909 |
+
}
|
910 |
+
|
911 |
+
//test again for plugins on reactivation
|
912 |
+
if($installApp){
|
913 |
+
$helper_import=WYSIJA::get('import','helper');
|
914 |
+
$helper_import->testPlugins();
|
915 |
+
|
916 |
+
//resynch wordpress list
|
917 |
+
$helper_user=WYSIJA::get('user','helper');
|
918 |
+
$helper_user->synchList($values['importwp_list_id']);
|
919 |
+
}
|
920 |
+
}
|
921 |
+
|
922 |
+
/**
|
923 |
+
* the is_plugin_active functions from WordPress sometimes are not loaded so here is one that works for single and multisites anywhere in the code
|
924 |
+
* @param type $pluginName
|
925 |
+
* @return type
|
926 |
+
*/
|
927 |
+
public static function is_plugin_active($pluginName){
|
928 |
+
$arrayactiveplugins=get_option('active_plugins');
|
929 |
+
//we check in the list of the site options if the plugin is activated
|
930 |
+
if(in_array($pluginName, $arrayactiveplugins)) {
|
931 |
+
//plugin is activated for that site
|
932 |
+
return true;
|
933 |
+
}
|
934 |
+
|
935 |
+
//if this is a multisite it might not be activated in the site option but network activated though
|
936 |
+
if(is_multisite()){
|
937 |
+
$plugins = get_site_option('active_sitewide_plugins');
|
938 |
+
//plugin is activated for that multisite
|
939 |
+
if(isset($plugins[$pluginName])){
|
940 |
+
return true;
|
941 |
+
}
|
942 |
+
}
|
943 |
+
return false;
|
944 |
+
}
|
945 |
+
|
946 |
+
/**
|
947 |
+
* make sure that the current user has the good access rights corresponding to its role
|
948 |
+
* @global type $current_user
|
949 |
+
* @return type
|
950 |
+
*/
|
951 |
+
public static function update_user_caps(){
|
952 |
+
global $current_user;
|
953 |
+
|
954 |
+
if(empty($current_user)) get_currentuserinfo();
|
955 |
+
if(empty($current_user)) return false;
|
956 |
+
$current_user->get_role_caps();
|
957 |
+
|
958 |
+
return true;
|
959 |
+
}
|
960 |
+
|
961 |
+
/**
|
962 |
+
* test whether the plugin is a beta version or not
|
963 |
+
* 2.4.4.4 is a beta
|
964 |
+
* 2.4.4 is a bug fix release
|
965 |
+
* 2.4 is a feature release
|
966 |
+
* @param string $plugin_name
|
967 |
+
*/
|
968 |
+
public static function is_beta($plugin_name=false){
|
969 |
+
// exceptions
|
970 |
+
$not_beta_versions = array('2.5.9.1', '2.5.9.2', '2.5.9.3');
|
971 |
+
$mailpoet_version = WYSIJA::get_version($plugin_name);
|
972 |
+
if(in_array($mailpoet_version, $not_beta_versions)) return false;
|
973 |
+
|
974 |
+
// standard way of defining a beta version
|
975 |
+
if(count(explode('.', $mailpoet_version)) > 3 ) return true;
|
976 |
+
return false;
|
977 |
+
}
|
978 |
+
|
979 |
+
/**
|
980 |
+
* depending where it's used the base function from WordPress doesn't work, so this one will work anywhere
|
981 |
+
* @param type $capability
|
982 |
+
* @return type
|
983 |
+
*/
|
984 |
+
public static function current_user_can($capability){
|
985 |
+
if(!$capability) return false;
|
986 |
+
WYSIJA::update_user_caps();
|
987 |
+
if(!current_user_can($capability)) return false;
|
988 |
+
return true;
|
989 |
+
}
|
990 |
+
|
991 |
+
/**
|
992 |
+
* this function get and sets the cron schedules when Wysija's own cron system is active
|
993 |
+
* @staticvar type $cron_schedules
|
994 |
+
* @param type $schedule
|
995 |
+
* @return type
|
996 |
+
*/
|
997 |
+
public static function get_cron_schedule($schedule='queue'){
|
998 |
+
static $cron_schedules;
|
999 |
+
|
1000 |
+
//if the cron schedules are already loaded statically then we just have to return the right schedule value
|
1001 |
+
if(!empty($cron_schedules)){
|
1002 |
+
if($schedule=='all') return $cron_schedules;
|
1003 |
+
if(isset($cron_schedules[$schedule])) {
|
1004 |
+
return $cron_schedules[$schedule];
|
1005 |
+
}else{
|
1006 |
+
WYSIJA::set_cron_schedule($schedule);
|
1007 |
+
return false;
|
1008 |
+
}
|
1009 |
+
}else{
|
1010 |
+
//this is the first time this function is executed so let's get them from the db and store them statically
|
1011 |
+
$cron_schedules=get_option('wysija_schedules',array());
|
1012 |
+
if(!empty($cron_schedules)){
|
1013 |
+
if(isset($cron_schedules[$schedule])) return $cron_schedules[$schedule];
|
1014 |
+
else return false;
|
1015 |
+
}else{
|
1016 |
+
WYSIJA::set_cron_schedule();
|
1017 |
+
return false;
|
1018 |
+
}
|
1019 |
+
}
|
1020 |
+
return false;
|
1021 |
+
}
|
1022 |
+
|
1023 |
+
/**
|
1024 |
+
* return the frequency for each cron task needed by wysija
|
1025 |
+
* @return type an array of frequencies
|
1026 |
+
*/
|
1027 |
+
public static function get_cron_frequencies(){
|
1028 |
+
$model_config = WYSIJA::get('config','model');
|
1029 |
+
$helper_forms = WYSIJA::get('forms','helper');
|
1030 |
+
|
1031 |
+
if(is_multisite() && $model_config->getValue('sending_method')=='network'){
|
1032 |
+
$sending_emails_each = $model_config->getValue('ms_sending_emails_each');
|
1033 |
+
}else{
|
1034 |
+
$sending_emails_each = $model_config->getValue('sending_emails_each');
|
1035 |
+
}
|
1036 |
+
|
1037 |
+
$queue_frequency = $helper_forms->eachValuesSec[$sending_emails_each];
|
1038 |
+
$bounce_frequency = 99999999999999;
|
1039 |
+
if(isset($helper_forms->eachValuesSec[$model_config->getValue('bouncing_emails_each')])){
|
1040 |
+
$bounce_frequency = $helper_forms->eachValuesSec[$model_config->getValue('bouncing_emails_each')];
|
1041 |
+
}
|
1042 |
+
return array('queue'=>$queue_frequency,'bounce'=>$bounce_frequency,'daily'=>86400,'weekly'=>604800,'monthly'=>2419200);
|
1043 |
+
}
|
1044 |
+
|
1045 |
+
/**
|
1046 |
+
* set the next cron schedule
|
1047 |
+
* TODO : needs probably to make the difference of running process for the next schedule, so that there is no delay(this is only problematic on some slow servers)
|
1048 |
+
* @param string $schedule
|
1049 |
+
* @param int $last_saved
|
1050 |
+
* @param boolean $set_running
|
1051 |
+
* @return boolean
|
1052 |
+
*/
|
1053 |
+
public static function set_cron_schedule($schedule = false , $last_saved = 0 , $set_running = false){
|
1054 |
+
$cron_schedules = array();
|
1055 |
+
|
1056 |
+
$start_time = $last_saved;
|
1057 |
+
if(!$start_time) $start_time = time();
|
1058 |
+
$processes = WYSIJA::get_cron_frequencies();
|
1059 |
+
if(!$schedule){
|
1060 |
+
foreach($processes as $process => $frequency){
|
1061 |
+
$next_schedule = $start_time + $frequency;
|
1062 |
+
$prev_schedule = 0;
|
1063 |
+
if(isset($cron_schedules[$process]['running']) && $cron_schedules[$process]['running']) $prev_schedule=$cron_schedules[$process]['running'];
|
1064 |
+
$cron_schedules[$process]=array(
|
1065 |
+
'next_schedule' => $next_schedule,
|
1066 |
+
'prev_schedule' => $prev_schedule,
|
1067 |
+
'running' => false);
|
1068 |
+
}
|
1069 |
+
}else{
|
1070 |
+
$cron_schedules = WYSIJA::get_cron_schedule('all');
|
1071 |
+
if($set_running){
|
1072 |
+
$cron_schedules[$schedule]['running'] = $set_running;
|
1073 |
+
}else{
|
1074 |
+
$running = 0;
|
1075 |
+
if(isset($cron_schedules[$schedule]['running'])) $running = $cron_schedules[$schedule]['running'];
|
1076 |
+
// if the process is not running or has been running for more than 15 minutes then we set the next_schedule date
|
1077 |
+
$process_frequency = $processes[$schedule];
|
1078 |
+
|
1079 |
+
if(!$running || ( time() > ($running + $process_frequency) ) ){
|
1080 |
+
|
1081 |
+
$next_schedule = $start_time + $process_frequency;
|
1082 |
+
// if the next schedule is already behind, we give it 30 seconds before it can triggers again
|
1083 |
+
if( $next_schedule < $start_time ){
|
1084 |
+
$next_schedule = $start_time + 30;
|
1085 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1086 |
|
1087 |
+
$cron_schedules[$schedule] = array(
|
1088 |
+
'next_schedule' => $next_schedule,
|
1089 |
+
'prev_schedule' => $running,
|
1090 |
+
'running' => false);
|
1091 |
+
}
|
1092 |
+
}
|
1093 |
+
}
|
1094 |
+
WYSIJA::update_option( 'wysija_schedules' , $cron_schedules , 'yes' );
|
1095 |
+
return true;
|
1096 |
+
}
|
1097 |
+
|
1098 |
+
/**
|
1099 |
+
* check that there is no passed schedules that need to be executed now
|
1100 |
+
* @return void
|
1101 |
+
*/
|
1102 |
+
public static function cron_check() {
|
1103 |
+
|
1104 |
+
$cron_schedules = WYSIJA::get_cron_schedule('all');
|
1105 |
+
if(empty($cron_schedules)) return;
|
1106 |
+
else{
|
1107 |
+
$processes = WYSIJA::get_cron_frequencies();
|
1108 |
+
|
1109 |
+
$updated_sched = false;
|
1110 |
+
foreach($cron_schedules as $schedule => &$params){
|
1111 |
+
$running = 0;
|
1112 |
+
$time_now = time();
|
1113 |
+
if(isset($params['running'])) $running = $params['running'];
|
1114 |
+
//if the process has timedout we reschedule the next execution
|
1115 |
+
if($running && ( $time_now> ($running + $processes[$schedule]) ) ){
|
1116 |
+
//WYSIJA::setInfo('error','modifying next schedule for '.$proc);
|
1117 |
+
$process_frequency = $processes[$schedule];
|
1118 |
+
|
1119 |
+
$next_schedule = $running + $process_frequency;
|
1120 |
+
// if the next schedule is already behind, we give it 30 seconds before it can trigger again
|
1121 |
+
if( $next_schedule < $time_now ){
|
1122 |
+
$next_schedule = $time_now + 30;
|
1123 |
+
}
|
1124 |
+
$params=array(
|
1125 |
+
'next_schedule' => $next_schedule,
|
1126 |
+
'prev_schedule' => $running,
|
1127 |
+
'running' => false);
|
1128 |
+
$updated_sched=true;
|
1129 |
+
}
|
1130 |
+
}
|
1131 |
+
if($updated_sched){
|
1132 |
+
//WYSIJA::setInfo('error','updating scheds');
|
1133 |
+
WYSIJA::update_option( 'wysija_schedules' , $cron_schedules , 'yes' );
|
1134 |
+
}
|
1135 |
+
|
1136 |
+
}
|
1137 |
+
|
1138 |
+
$time_now = time();
|
1139 |
+
$processesToRun = array();
|
1140 |
+
foreach($cron_schedules as $schedule => $scheduled_times){
|
1141 |
+
$process_frequency = $processes[$schedule];
|
1142 |
+
if( ( !$scheduled_times['running'] || (int)$scheduled_times['running'] + $process_frequency < $time_now ) && $scheduled_times['next_schedule'] < $time_now){
|
1143 |
+
$processesToRun[] = $schedule;
|
1144 |
+
}
|
1145 |
+
}
|
1146 |
+
|
1147 |
+
$model_config = WYSIJA::get('config','model');
|
1148 |
+
$page_view_trigger = (int)$model_config->getValue('cron_page_hit_trigger');
|
1149 |
+
if(!empty($processesToRun) && $page_view_trigger === 1){
|
1150 |
+
//call the cron url
|
1151 |
+
// do not call that more than once per 5 minutes attempt at reducing the CPU load for some users
|
1152 |
+
// http://wordpress.org/support/topic/wysija-newsletters-slowing-down-my-site-1
|
1153 |
+
$last_cron_time_plus_5min = (int)get_option('wysija_last_php_cron_call') + (5*60);
|
1154 |
+
|
1155 |
+
if($last_cron_time_plus_5min < time()){
|
1156 |
+
$cron_url = site_url( 'wp-cron.php').'?'.WYSIJA_CRON.'&action=wysija_cron&process='.implode(',',$processesToRun).'&silent=1';
|
1157 |
+
$cron_request = apply_filters( 'cron_request', array(
|
1158 |
+
'url' => $cron_url,
|
1159 |
+
'args' => array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) )
|
1160 |
+
) );
|
1161 |
+
|
1162 |
+
wp_remote_post( $cron_url, $cron_request['args'] );
|
1163 |
+
WYSIJA::update_option('wysija_last_php_cron_call', time());
|
1164 |
+
}
|
1165 |
+
|
1166 |
+
|
1167 |
+
}
|
1168 |
+
}
|
1169 |
+
|
1170 |
+
/**
|
1171 |
+
* Function somehow necessary to avoid some conflicts in windows server and WordPress autoload of plugins language file
|
1172 |
+
* @param type $boolean
|
1173 |
+
* @param type $domain
|
1174 |
+
* @param type $mofile
|
1175 |
+
* @return boolean
|
1176 |
+
*/
|
1177 |
+
public static function override_load_textdomain($boolean, $domain, $mofile){
|
1178 |
+
$extensionloaded=WYSIJA::load_lang('get_all');
|
1179 |
+
|
1180 |
+
if(isset($extensionloaded[$domain]) && !@file_exists($mofile)){
|
1181 |
+
return true;
|
1182 |
+
}
|
1183 |
+
|
1184 |
+
return false;
|
1185 |
+
}
|
1186 |
+
|
1187 |
+
/**
|
1188 |
+
* function to rewrite the path of the file if the file doesn't exist
|
1189 |
+
* @param type $mofile
|
1190 |
+
* @param type $domain
|
1191 |
+
* @return type
|
1192 |
+
*/
|
1193 |
+
public static function load_textdomain_mofile($mofile, $domain){
|
1194 |
+
$extensionloaded=WYSIJA::load_lang('get_all');
|
1195 |
+
|
1196 |
+
if(isset($extensionloaded[$domain]) && !file_exists($mofile)){
|
1197 |
+
return WYSIJA_PLG_DIR.$domain.DS.'languages'.DS.$extensionloaded[$domain].'-'.get_locale().'.mo';
|
1198 |
+
}
|
1199 |
+
return $mofile;
|
1200 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1201 |
}
|
1202 |
|
1203 |
// subscribers/wp-user synch hooks
|
1208 |
add_action('delete_user', array('WYSIJA', 'hook_del_WP_subscriber'), 1);
|
1209 |
// for multisite
|
1210 |
add_action('deleted_user', array('WYSIJA', 'hook_del_WP_subscriber'), 1);
|
|
|
1211 |
|
|
|
|
|
1212 |
|
1213 |
// post notif trigger
|
1214 |
add_action('transition_post_status', array('WYSIJA', 'hook_postNotification_transition'), 1, 3);
|
1217 |
add_action('delete_post', array('WYSIJA', 'hook_auto_newsletter_refresh'), 1, 1);
|
1218 |
|
1219 |
// add image size for emails
|
1220 |
+
add_image_size('wysija-newsletters-max', 600, 99999);
|
1221 |
|
1222 |
$modelConf=WYSIJA::get('config','model');
|
1223 |
if($modelConf->getValue('installed_time')){
|
1224 |
|
1225 |
+
// START all that concerns the CRON
|
1226 |
+
// make sure we check when is the schedule due with wysija's cron
|
1227 |
+
if($modelConf->getValue('cron_manual')){
|
1228 |
+
// if WP cron tasks are still set, we clear them
|
1229 |
+
if(wp_get_schedule('wysija_cron_queue')) WYSIJA::deactivate();
|
1230 |
+
|
1231 |
+
// set the crons schedule for each process
|
1232 |
+
WYSIJA::get_cron_schedule();
|
1233 |
+
|
1234 |
+
// check that there is no late cron schedules if we are using wysija's cron option and that the cron option is triggerred by any page view
|
1235 |
+
if(!isset($_REQUEST['process'])){
|
1236 |
+
WYSIJA::cron_check();
|
1237 |
+
}
|
1238 |
+
|
1239 |
+
// this action is triggerred only by a cron job
|
1240 |
+
// if we're entering the wysija's cron part, it should end here
|
1241 |
+
if(isset($_REQUEST['action']) && $_REQUEST['action']=='wysija_cron'){
|
1242 |
+
// priority is hundred so that the messages such as unsubscribe or view in your browser have time to be translated(they get translated around 96, 97)
|
1243 |
+
add_action('init', 'init_wysija_cron',100);
|
1244 |
+
|
1245 |
+
function init_wysija_cron(){
|
1246 |
+
$hCron=WYSIJA::get('cron','helper');
|
1247 |
+
$hCron->run();
|
1248 |
+
}
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
// make sure the scheduled tasks are recorded when using WordPress' cron
|
1252 |
+
}else{
|
1253 |
+
|
1254 |
+
// filter to add new possible frequencies to the cron
|
1255 |
+
add_filter( 'cron_schedules', array( 'WYSIJA', 'filter_cron_schedules' ) );
|
1256 |
+
|
1257 |
+
// action to handle the scheduled tasks in wysija
|
1258 |
+
add_action( 'wysija_cron_queue', array( 'WYSIJA', 'croned_queue' ) );
|
1259 |
+
add_action( 'wysija_cron_daily', array( 'WYSIJA', 'croned_daily' ) );
|
1260 |
+
add_action( 'wysija_cron_weekly', array( 'WYSIJA', 'croned_weekly' ) );
|
1261 |
+
add_action( 'wysija_cron_monthly', array( 'WYSIJA', 'croned_monthly' ) );
|
1262 |
+
|
1263 |
+
// same with the weekly task
|
1264 |
+
if(!wp_next_scheduled('wysija_cron_weekly')){
|
1265 |
+
wp_schedule_event( $modelConf->getValue('last_save') , 'eachweek', 'wysija_cron_weekly' );
|
1266 |
+
}
|
1267 |
+
// the monthly task...
|
1268 |
+
if(!wp_next_scheduled('wysija_cron_monthly')){
|
1269 |
+
wp_schedule_event( $modelConf->getValue('last_save') , 'each28days', 'wysija_cron_monthly' );
|
1270 |
+
}
|
1271 |
+
|
1272 |
+
// the daily task...
|
1273 |
+
if(!wp_next_scheduled('wysija_cron_daily')){
|
1274 |
+
wp_schedule_event( $modelConf->getValue('last_save') , 'daily', 'wysija_cron_daily' );
|
1275 |
+
}
|
1276 |
+
|
1277 |
+
|
1278 |
+
if(is_multisite()){
|
1279 |
+
|
1280 |
+
// in the case of multisite and the network's method we schedule with a different frequency
|
1281 |
+
// this option contains the list of sites already scheduled
|
1282 |
+
$ms_wysija_bounce_cron = get_site_option('ms_wysija_bounce_cron');
|
1283 |
+
global $blog_id;
|
1284 |
+
|
1285 |
+
// if this blog is not recorded in our wysija_sending_cron option then we clear its scheduled so that we can reinitialize it
|
1286 |
+
if(!$ms_wysija_bounce_cron || !isset($ms_wysija_bounce_cron[$blog_id])){
|
1287 |
+
wp_clear_scheduled_hook('wysija_cron_bounce');
|
1288 |
+
WYSIJA::set_cron_schedule('queue');
|
1289 |
+
$ms_wysija_bounce_cron[$blog_id] = 1;
|
1290 |
+
update_site_option('ms_wysija_bounce_cron',$ms_wysija_bounce_cron);
|
1291 |
+
}
|
1292 |
+
|
1293 |
+
}
|
1294 |
+
|
1295 |
+
// if the bounce task is not scheduled then we initialize it
|
1296 |
+
if(!wp_next_scheduled('wysija_cron_bounce')){
|
1297 |
+
wp_schedule_event( $modelConf->getValue('last_save') , $modelConf->getValue('bouncing_emails_each'), 'wysija_cron_bounce' );
|
1298 |
+
}
|
1299 |
+
|
1300 |
+
// and the queue processing task ...
|
1301 |
+
// if we are in a multisite case we make sure that the ms frequency hasn't been changed, if it has we reset it
|
1302 |
+
if(is_multisite() && $modelConf->getValue('sending_method')=='network'){
|
1303 |
+
// in the case of multisite and the network's method we schedule with a different frequency
|
1304 |
+
// this option contains the list of sites already scheduled
|
1305 |
+
$ms_wysija_sending_cron=get_site_option('ms_wysija_sending_cron');
|
1306 |
+
global $blog_id;
|
1307 |
+
|
1308 |
+
// if this blog is not recorded in our wysija_sending_cron option then we clear its scheduled so that we can reinitialize it
|
1309 |
+
if(!$ms_wysija_sending_cron || !isset($ms_wysija_sending_cron[$blog_id])){
|
1310 |
+
wp_clear_scheduled_hook('wysija_cron_queue');
|
1311 |
+
WYSIJA::set_cron_schedule('queue');
|
1312 |
+
$ms_wysija_sending_cron[$blog_id]=1;
|
1313 |
+
update_site_option('ms_wysija_sending_cron',$ms_wysija_sending_cron);
|
1314 |
+
}
|
1315 |
+
}
|
1316 |
+
|
1317 |
+
|
1318 |
+
// simply schedule the queue
|
1319 |
+
if(!wp_next_scheduled('wysija_cron_queue')){
|
1320 |
+
|
1321 |
+
// in the case of multisite and the network's method we schedule with a different frequency
|
1322 |
+
if(is_multisite() && $modelConf->getValue('sending_method')=='network'){
|
1323 |
+
$sending_emails_each=$modelConf->getValue('ms_sending_emails_each');
|
1324 |
+
}else{
|
1325 |
+
$sending_emails_each=$modelConf->getValue('sending_emails_each');
|
1326 |
+
}
|
1327 |
+
wp_schedule_event( $modelConf->getValue('last_save') , $sending_emails_each, 'wysija_cron_queue' );
|
1328 |
+
}
|
1329 |
+
|
1330 |
+
}// END all that concerns the CRON
|
1331 |
+
|
1332 |
+
// filter fixing a bug with automatic load_text_domain_from WP didn't understand yet why this was necessary...
|
1333 |
+
// somehow wp_register_script(which is irrelevant) was triggerring this kind of notice
|
1334 |
+
// Warning: is_readable() [function.is-readable]: open_basedir restriction in effect. File(C:\Domains\website.com\wwwroot\web/wp-content/plugins/C:\Domains\website.com\wwwroot\web\wp-content\plugins\wysija-newsletters/languages/wysija-newsletters-en_US.mo) is not within the allowed path(s): (.;C:\Domains\;C:\PHP\;C:\Sites\;C:\SitesData\;/) in C:\Domains\website.com\wwwroot\web\wp-includes\l10n.php on line 339
|
1335 |
+
// the only solution is to make sure on our end that the file exists and rewrite it if necessary
|
1336 |
+
add_filter( 'override_load_textdomain', array( 'WYSIJA', 'override_load_textdomain' ), 10, 3);
|
1337 |
+
add_filter('load_textdomain_mofile', array( 'WYSIJA', 'load_textdomain_mofile' ), 10, 2);
|
1338 |
}
|
1339 |
|
1340 |
// not yet used but the purpose is to override any notification sent through wp_mail
|
1341 |
if($modelConf->getValue('wp_notifications')){
|
1342 |
+
$hWPnotif=WYSIJA::get('wp_notifications','helper');
|
1343 |
}
|
1344 |
|
1345 |
register_deactivation_hook(WYSIJA_FILE, array( 'WYSIJA', 'deactivate' ));
|
1348 |
|
1349 |
|
1350 |
// launch application
|
1351 |
+
$helper=WYSIJA::get(WYSIJA_SIDE,'helper');
|
core/controller.php
CHANGED
@@ -3,97 +3,92 @@ defined('WYSIJA') or die('Restricted access');
|
|
3 |
|
4 |
|
5 |
class WYSIJA_control extends WYSIJA_object{
|
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 |
-
$actionnonce='wysija_ajax';
|
39 |
-
}else{
|
40 |
-
//backend case
|
41 |
-
if(is_admin() && !empty($_REQUEST['page'])){
|
42 |
-
$actionnonce=$_REQUEST['page'].'-action_'.$_REQUEST['action'];
|
43 |
-
if(!empty($_REQUEST['id'])) $actionnonce.='-id_'.$_REQUEST['id'];
|
44 |
-
//frontend case
|
45 |
-
} elseif (!empty($_REQUEST['controller'])) {
|
46 |
-
$actionnonce=$_REQUEST['controller'].'-action_'.$_REQUEST['action'];
|
47 |
-
if(!empty($_REQUEST['id'])) $actionnonce.='-id_'.$_REQUEST['id'];
|
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 |
-
if(!isset($_REQUEST['wpnonceback']) && !isset($_REQUEST['_wpnonce'])) {
|
73 |
-
die('Your request is not safe.');
|
74 |
-
}else{
|
75 |
-
return true;
|
76 |
-
}
|
77 |
-
}
|
78 |
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
|
|
|
|
|
|
86 |
|
87 |
-
|
88 |
-
|
89 |
-
$conditions=array($this->modelObj->pk =>$_POST['wysija'][$this->modelObj->table_name][$this->modelObj->pk]);
|
90 |
-
unset($_POST['wysija'][$this->modelObj->table_name][$this->modelObj->pk]);
|
91 |
-
}elseif(isset($_GET['id'])){
|
92 |
-
$conditions=array($this->modelObj->pk =>$_GET['id']);
|
93 |
-
}else{
|
94 |
-
$conditions=array();
|
95 |
-
}
|
96 |
-
|
97 |
-
return $conditions;
|
98 |
-
}
|
99 |
}
|
3 |
|
4 |
|
5 |
class WYSIJA_control extends WYSIJA_object{
|
6 |
+
var $model="";
|
7 |
+
var $view="";
|
8 |
+
var $action="";
|
9 |
+
var $list_columns=array();
|
10 |
+
var $form_columns=array();
|
11 |
+
var $filters=array();
|
12 |
+
var $js=array();
|
13 |
+
var $jsLoc=array();
|
14 |
+
var $extension="wysija-newsletters";
|
15 |
+
var $joins=array();
|
16 |
+
var $title="";
|
17 |
|
18 |
+
function WYSIJA_control(){
|
19 |
+
//setup some required objects for the request
|
20 |
+
if(!defined('DOING_AJAX')){
|
21 |
+
if($this->view) $this->viewObj = WYSIJA::get($this->view,"view",false,$this->extension);
|
22 |
+
if(empty($this->viewObj)) $this->viewObj = new stdClass (); // In some cases, viewObj can not be created
|
23 |
+
if($this->model){
|
24 |
+
$this->modelObj=WYSIJA::get($this->model,"model",false,$this->extension);
|
25 |
+
$this->viewObj->model=WYSIJA::get($this->model,"model",false,$this->extension);
|
26 |
+
}
|
27 |
+
}
|
28 |
|
29 |
+
//test for security, some actions require security some others don't
|
30 |
+
if(!empty($_REQUEST['_wpnonce'])){
|
31 |
+
$_REQUEST['wpnonceback']=$_REQUEST['_wpnonce'];
|
32 |
|
33 |
+
if($_REQUEST['action']=='wysija_ajax'){
|
34 |
+
$actionnonce='wysija_ajax';
|
35 |
+
}else{
|
36 |
+
//backend case
|
37 |
+
if(!empty($_REQUEST['page'])){
|
38 |
+
$actionnonce=$_REQUEST['page'].'-action_'.$_REQUEST['action'];
|
39 |
+
if(!empty($_REQUEST['id'])) $actionnonce.='-id_'.$_REQUEST['id'];
|
40 |
+
//frontend case
|
41 |
+
}elseif(!empty($_REQUEST['controller'])){
|
42 |
+
$actionnonce=$_REQUEST['controller'].'-action_'.$_REQUEST['action'];
|
43 |
+
if(!empty($_REQUEST['id'])) $actionnonce.='-id_'.$_REQUEST['id'];
|
44 |
+
}
|
45 |
+
}
|
46 |
|
47 |
+
if(!$_REQUEST['action']) return true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
48 |
|
49 |
+
//if the wp_nonce has been set up then we test it against the one here if it fails we just die
|
50 |
+
$nonce=$_REQUEST['_wpnonce'];
|
51 |
|
52 |
+
if(!function_exists('wp_verify_nonce')){
|
53 |
+
include(ABSPATH.'wp-includes'.DS.'pluggable.php');
|
54 |
+
}
|
55 |
+
if(!wp_verify_nonce($nonce, $actionnonce) ){
|
56 |
+
die('Security failure during request.');
|
57 |
+
}
|
58 |
+
}
|
59 |
+
}
|
60 |
|
61 |
+
/**
|
62 |
+
* if a controller calls that page then it needs those global parameters to be set
|
63 |
+
* @return boolean
|
64 |
+
*/
|
65 |
+
function requireSecurity(){
|
|
|
|
|
|
|
66 |
|
67 |
+
if(!isset($_REQUEST['wpnonceback']) && !isset($_REQUEST['_wpnonce'])) {
|
68 |
+
die('Your request is not safe.');
|
69 |
+
}else{
|
70 |
+
return true;
|
71 |
+
}
|
72 |
+
}
|
73 |
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
|
75 |
+
/**
|
76 |
+
* prepare an array of condition for a where statement with the pk and its value.
|
77 |
+
* note: not sure this function should be here though.
|
78 |
+
* @return array
|
79 |
+
*/
|
80 |
+
function getPKVal(){
|
81 |
|
82 |
+
if(isset($_POST['wysija'][$this->modelObj->table_name][$this->modelObj->pk]) && $_POST['wysija'][$this->modelObj->table_name][$this->modelObj->pk]){
|
83 |
+
//this is an update
|
84 |
+
$conditions=array($this->modelObj->pk =>$_POST['wysija'][$this->modelObj->table_name][$this->modelObj->pk]);
|
85 |
+
unset($_POST['wysija'][$this->modelObj->table_name][$this->modelObj->pk]);
|
86 |
+
}elseif(isset($_GET['id'])){
|
87 |
+
$conditions=array($this->modelObj->pk =>$_GET['id']);
|
88 |
+
}else{
|
89 |
+
$conditions=array();
|
90 |
+
}
|
91 |
|
92 |
+
return $conditions;
|
93 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
}
|
core/model.php
CHANGED
@@ -2,1033 +2,1000 @@
|
|
2 |
defined('WYSIJA') or die('Restricted access');
|
3 |
class WYSIJA_model extends WYSIJA_object{
|
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 |
-
|
229 |
-
|
230 |
-
|
231 |
-
|
232 |
-
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
|
246 |
-
|
247 |
-
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
-
|
255 |
-
|
256 |
-
|
257 |
-
|
258 |
-
|
259 |
-
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
-
|
264 |
-
|
265 |
-
|
266 |
-
|
267 |
-
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
|
272 |
-
|
273 |
-
|
274 |
-
|
275 |
-
|
276 |
-
|
277 |
-
|
278 |
-
|
279 |
-
|
280 |
-
|
281 |
-
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
|
286 |
-
|
287 |
-
|
288 |
-
|
289 |
-
|
290 |
-
|
291 |
-
|
292 |
-
|
293 |
-
|
294 |
-
|
295 |
-
|
296 |
-
|
297 |
-
|
298 |
-
|
299 |
-
|
300 |
-
|
301 |
-
|
302 |
-
|
303 |
-
|
304 |
-
|
305 |
-
|
306 |
-
|
307 |
-
|
308 |
-
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
|
325 |
-
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
|
331 |
-
|
332 |
-
|
333 |
-
|
334 |
-
|
335 |
-
|
336 |
-
|
337 |
-
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
346 |
-
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
|
422 |
-
|
423 |
-
|
424 |
-
|
425 |
-
|
426 |
-
|
427 |
-
|
428 |
-
|
429 |
-
|
430 |
-
|
431 |
-
|
432 |
-
|
433 |
-
|
434 |
-
|
435 |
-
|
436 |
-
|
437 |
-
|
438 |
-
|
439 |
-
|
440 |
-
|
441 |
-
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
|
464 |
-
|
465 |
-
|
466 |
-
|
467 |
-
|
468 |
-
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
-
|
525 |
-
|
526 |
-
|
527 |
-
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
-
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
-
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
|
565 |
-
|
566 |
-
|
567 |
-
|
568 |
-
|
569 |
-
|
570 |
-
|
571 |
-
|
572 |
-
|
573 |
-
|
574 |
-
|
575 |
-
|
576 |
-
|
577 |
-
|
578 |
-
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
|
587 |
-
|
588 |
-
|
589 |
-
|
590 |
-
|
591 |
-
|
592 |
-
|
593 |
-
|
594 |
-
|
595 |
-
|
596 |
-
|
597 |
-
|
598 |
-
|
599 |
-
|
600 |
-
|
601 |
-
|
602 |
-
|
603 |
-
|
604 |
-
|
605 |
-
|
606 |
-
|
607 |
-
|
608 |
-
|
609 |
-
|
610 |
-
|
611 |
-
|
612 |
-
|
613 |
-
|
614 |
-
|
615 |
-
|
616 |
-
|
617 |
-
|
618 |
-
|
619 |
-
|
620 |
-
|
621 |
-
|
622 |
-
|
623 |
-
|
624 |
-
|
625 |
-
|
626 |
-
|
627 |
-
|
628 |
-
|
629 |
-
|
630 |
-
|
631 |
-
|
632 |
-
|
633 |
-
|
634 |
-
|
635 |
-
|
636 |
-
|
637 |
-
|
638 |
-
|
639 |
-
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
644 |
-
|
645 |
-
|
646 |
-
|
647 |
-
|
648 |
-
|
649 |
-
|
650 |
-
|
651 |
-
|
652 |
-
|
653 |
-
|
654 |
-
|
655 |
-
|
656 |
-
|
657 |
-
|
658 |
-
|
659 |
-
|
660 |
-
|
661 |
-
|
662 |
-
|
663 |
-
|
664 |
-
|
665 |
-
|
666 |
-
|
667 |
-
|
668 |
-
|
669 |
-
|
670 |
-
|
671 |
-
|
672 |
-
|
673 |
-
|
674 |
-
|
675 |
-
|
676 |
-
|
677 |
-
|
678 |
-
|
679 |
-
|
680 |
-
|
681 |
-
|
682 |
-
|
683 |
-
|
684 |
-
|
685 |
-
|
686 |
-
|
687 |
-
|
688 |
-
|
689 |
-
|
690 |
-
|
691 |
-
|
692 |
-
|
693 |
-
|
694 |
-
|
695 |
-
|
696 |
-
|
697 |
-
|
698 |
-
|
699 |
-
|
700 |
-
|
701 |
-
|
702 |
-
|
703 |
-
|
704 |
-
|
705 |
-
|
706 |
-
|
707 |
-
|
708 |
-
|
709 |
-
|
710 |
-
|
711 |
-
|
712 |
-
|
713 |
-
|
714 |
-
|
715 |
-
|
716 |
-
|
717 |
-
|
718 |
-
|
719 |
-
|
720 |
-
|
721 |
-
|
722 |
-
|
723 |
-
|
724 |
-
|
725 |
-
|
726 |
-
|
727 |
-
|
728 |
-
|
729 |
-
|
730 |
-
|
731 |
-
|
732 |
-
|
733 |
-
|
734 |
-
|
735 |
-
|
736 |
-
|
737 |
-
|
738 |
-
|
739 |
-
|
740 |
-
|
741 |
-
|
742 |
-
|
743 |
-
|
744 |
-
|
745 |
-
|
746 |
-
|
747 |
-
|
748 |
-
|
749 |
-
|
750 |
-
|
751 |
-
|
752 |
-
|
753 |
-
|
754 |
-
|
755 |
-
|
756 |
-
|
757 |
-
|
758 |
-
|
759 |
-
|
760 |
-
|
761 |
-
|
762 |
-
|
763 |
-
|
764 |
-
|
765 |
-
|
766 |
-
|
767 |
-
|
768 |
-
|
769 |
-
|
770 |
-
|
771 |
-
|
772 |
-
|
773 |
-
|
774 |
-
|
775 |
-
|
776 |
-
|
777 |
-
|
778 |
-
|
779 |
-
|
780 |
-
|
781 |
-
|
782 |
-
|
783 |
-
|
784 |
-
|
785 |
-
|
786 |
-
|
787 |
-
|
788 |
-
|
789 |
-
|
790 |
-
|
791 |
-
|
792 |
-
|
793 |
-
|
794 |
-
|
795 |
-
|
796 |
-
|
797 |
-
|
798 |
-
|
799 |
-
|
800 |
-
|
801 |
-
|
802 |
-
|
803 |
-
|
804 |
-
|
805 |
-
|
806 |
-
|
807 |
-
|
808 |
-
|
809 |
-
|
810 |
-
|
811 |
-
|
812 |
-
|
813 |
-
|
814 |
-
|
815 |
-
|
816 |
-
|
817 |
-
|
818 |
-
|
819 |
-
|
820 |
-
|
821 |
-
|
822 |
-
|
823 |
-
|
824 |
-
|
825 |
-
|
826 |
-
|
827 |
-
|
828 |
-
|
829 |
-
|
830 |
-
|
831 |
-
|
832 |
-
|
833 |
-
|
834 |
-
|
835 |
-
|
836 |
-
|
837 |
-
|
838 |
-
|
839 |
-
|
840 |
-
|
841 |
-
|
842 |
-
|
843 |
-
|
844 |
-
|
845 |
-
|
846 |
-
|
847 |
-
|
848 |
-
|
849 |
-
|
850 |
-
|
851 |
-
|
852 |
-
|
853 |
-
|
854 |
-
|
855 |
-
|
856 |
-
|
857 |
-
|
858 |
-
|
859 |
-
|
860 |
-
|
861 |
-
|
862 |
-
|
863 |
-
|
864 |
-
|
865 |
-
|
866 |
-
|
867 |
-
|
868 |
-
|
869 |
-
|
870 |
-
|
871 |
-
|
872 |
-
|
873 |
-
|
874 |
-
|
875 |
-
|
876 |
-
|
877 |
-
|
878 |
-
|
879 |
-
|
880 |
-
|
881 |
-
|
882 |
-
|
883 |
-
|
884 |
-
|
885 |
-
|
886 |
-
|
887 |
-
|
888 |
-
|
889 |
-
|
890 |
-
|
891 |
-
|
892 |
-
|
893 |
-
|
894 |
-
|
895 |
-
|
896 |
-
|
897 |
-
|
898 |
-
|
899 |
-
|
900 |
-
|
901 |
-
|
902 |
-
|
903 |
-
|
904 |
-
|
905 |
-
|
906 |
-
|
907 |
-
|
908 |
-
|
909 |
-
|
910 |
-
|
911 |
-
|
912 |
-
|
913 |
-
|
914 |
-
|
915 |
-
|
916 |
-
|
917 |
-
|
918 |
-
|
919 |
-
|
920 |
-
|
921 |
-
|
922 |
-
|
923 |
-
|
924 |
-
|
925 |
-
|
926 |
-
|
927 |
-
|
928 |
-
|
929 |
-
|
930 |
-
|
931 |
-
|
932 |
-
|
933 |
-
|
934 |
-
|
935 |
-
|
936 |
-
|
937 |
-
|
938 |
-
|
939 |
-
|
940 |
-
|
941 |
-
|
942 |
-
|
943 |
-
|
944 |
-
|
945 |
-
|
946 |
-
|
947 |
-
|
948 |
-
|
949 |
-
|
950 |
-
|
951 |
-
|
952 |
-
|
953 |
-
|
954 |
-
|
955 |
-
|
956 |
-
|
957 |
-
|
958 |
-
|
959 |
-
|
960 |
-
|
961 |
-
|
962 |
-
|
963 |
-
|
964 |
-
|
965 |
-
|
966 |
-
|
967 |
-
|
968 |
-
|
969 |
-
|
970 |
-
|
971 |
-
|
972 |
-
|
973 |
-
|
974 |
-
|
975 |
-
|
976 |
-
|
977 |
-
|
978 |
-
|
979 |
-
|
980 |
-
|
981 |
-
|
982 |
-
|
983 |
-
|
984 |
-
|
985 |
-
|
986 |
-
|
987 |
-
|
988 |
-
|
989 |
-
|
990 |
-
|
991 |
-
|
992 |
-
|
993 |
-
|
994 |
-
|
995 |
-
|
996 |
-
|
997 |
-
|
998 |
-
|
999 |
-
|
1000 |
-
continue;
|
1001 |
-
}
|
1002 |
-
$tmp[$record[$field_name]] = $record;
|
1003 |
-
if ($removing_field_name)
|
1004 |
-
unset($tmp[$record[$field_name]][$field_name]);
|
1005 |
-
}
|
1006 |
-
|
1007 |
-
}
|
1008 |
-
return $tmp;
|
1009 |
-
}
|
1010 |
-
|
1011 |
-
function beforeInsert(){
|
1012 |
-
return true;
|
1013 |
-
}
|
1014 |
-
|
1015 |
-
function afterInsert($resultSaveID){
|
1016 |
-
return true;
|
1017 |
-
}
|
1018 |
-
function beforeDelete($conditions){
|
1019 |
-
return true;
|
1020 |
-
}
|
1021 |
-
|
1022 |
-
function afterDelete(){
|
1023 |
-
return true;
|
1024 |
-
}
|
1025 |
-
|
1026 |
-
function beforeUpdate($id = null){
|
1027 |
-
return true;
|
1028 |
-
}
|
1029 |
-
|
1030 |
-
function afterUpdate($resultSaveID){
|
1031 |
-
return true;
|
1032 |
-
}
|
1033 |
|
1034 |
}
|
2 |
defined('WYSIJA') or die('Restricted access');
|
3 |
class WYSIJA_model extends WYSIJA_object{
|
4 |
|
5 |
+
var $table_prefix='wysija';
|
6 |
+
var $table_name='';
|
7 |
+
var $pk='';
|
8 |
+
var $values=array();
|
9 |
+
var $conditions=array();
|
10 |
+
var $orderby=array();
|
11 |
+
var $groupby=false;
|
12 |
+
var $noCheck =false;
|
13 |
+
var $replaceQRY=false;
|
14 |
+
var $limitON=false;
|
15 |
+
var $dbg=false;
|
16 |
+
var $colCheck=true;
|
17 |
+
var $getFormat=ARRAY_A;
|
18 |
+
var $getOne=false;
|
19 |
+
var $fieldValid=true;
|
20 |
+
var $specialUpdate=false;
|
21 |
+
var $escapeFields=array();
|
22 |
+
var $escapingOn=false;
|
23 |
+
var $tableWP=false;
|
24 |
+
var $columns=array();
|
25 |
+
var $joins=array();
|
26 |
+
var $ignore = false;
|
27 |
+
var $sql_error=false;
|
28 |
+
var $comparisonKeys = array('equal', 'notequal', 'like', 'greater', 'less', 'greater_eq', 'less_eq', 'is');
|
29 |
+
var $time_start = 0;
|
30 |
+
var $query_duration = 0;
|
31 |
+
|
32 |
+
function WYSIJA_model($extensions=''){
|
33 |
+
if(defined('WYSIJA_DBG') && WYSIJA_DBG>0) $this->dbg=true;
|
34 |
+
global $wpdb;
|
35 |
+
$this->wpprefix=$wpdb->prefix;
|
36 |
+
if($extensions) $this->table_prefix=$extensions;
|
37 |
+
//fix for radiokapi
|
38 |
+
//$this->wpprefix=$wpdb->base_prefix;
|
39 |
+
}
|
40 |
+
/**
|
41 |
+
* since we reuse the same objects accross the whole application
|
42 |
+
* once in a while for instance between a delete and a select we need to reset the objects to update the conditions
|
43 |
+
*/
|
44 |
+
function reset(){
|
45 |
+
$this->values=array();
|
46 |
+
$this->conditions=array();
|
47 |
+
$this->orderby=array();
|
48 |
+
$this->groupby=false;
|
49 |
+
$this->getFormat=ARRAY_A;
|
50 |
+
$this->getOne=false;
|
51 |
+
$this->limitON=false;
|
52 |
+
$this->sql_error=false;
|
53 |
+
}
|
54 |
+
|
55 |
+
/**
|
56 |
+
*
|
57 |
+
* @param type $columnsOrPKval
|
58 |
+
* @param type $conditions
|
59 |
+
* @return type
|
60 |
+
*/
|
61 |
+
function get($columnsOrPKval=false,$conditions=array()){
|
62 |
+
/*then columns becomes the pk value*/
|
63 |
+
if(!$conditions){
|
64 |
+
$conditions=array('equal'=>array($this->pk=>$columnsOrPKval));
|
65 |
+
$columnsOrPKval=false;
|
66 |
+
$this->noCheck=true;
|
67 |
+
}
|
68 |
+
|
69 |
+
/* if we pass just the id strong in the get conditions then it's the pk*/
|
70 |
+
if($conditions && !is_array($conditions)){
|
71 |
+
$conditions=array('equal'=>array($this->pk=>$conditions));
|
72 |
+
}
|
73 |
+
if($this->setConditions($conditions)){
|
74 |
+
if($this->getOne) $results=$this->getRows($columnsOrPKval,0,1);
|
75 |
+
else $results=$this->getRows($columnsOrPKval);
|
76 |
+
//$this->escapeQuotesFromRes($results);
|
77 |
+
if($this->getOne && count($results)==1){
|
78 |
+
switch($this->getFormat){
|
79 |
+
case ARRAY_A:
|
80 |
+
foreach($results as $res)return $res;
|
81 |
+
break;
|
82 |
+
case OBJECT:
|
83 |
+
foreach($results as $res)return $res;
|
84 |
+
break;
|
85 |
+
}
|
86 |
+
}
|
87 |
+
else return $results;
|
88 |
+
}
|
89 |
+
|
90 |
+
return false;
|
91 |
+
}
|
92 |
+
|
93 |
+
function getOne($columnsOrPKval=false,$conditions=array()){
|
94 |
+
$this->getOne=true;
|
95 |
+
$this->limitON=true;
|
96 |
+
|
97 |
+
return $this->get($columnsOrPKval,$conditions);
|
98 |
+
}
|
99 |
+
|
100 |
+
/**
|
101 |
+
* get a list of result based on a select query
|
102 |
+
* @global type $wpdb
|
103 |
+
* @param type $columns
|
104 |
+
* @param type $page
|
105 |
+
* @param type $limit
|
106 |
+
* @return type
|
107 |
+
*/
|
108 |
+
function getRows($columns=false,$page=0,$limit=false){
|
109 |
+
|
110 |
+
/*set the columns*/
|
111 |
+
if($columns){
|
112 |
+
if(is_array($columns)){
|
113 |
+
$columns=implode(', ',$columns);
|
114 |
+
}
|
115 |
+
}else $columns='*';
|
116 |
+
|
117 |
+
|
118 |
+
$query='SELECT '.$columns.' FROM `'.$this->getSelectTableName()."`";
|
119 |
+
$query.=$this->makeJoins();
|
120 |
+
$query.=$this->makeWhere();
|
121 |
+
$query.=$this->makeGroupBY();
|
122 |
+
$query.=$this->makeOrderBY();
|
123 |
+
|
124 |
+
if($this->limitON) $query.=$this->setLimit($page,$limit);
|
125 |
+
$results=$this->query('get_res',$query,$this->getFormat);
|
126 |
+
|
127 |
+
//$this->escapeQuotesFromRes($results);
|
128 |
+
|
129 |
+
return $results;
|
130 |
+
}
|
131 |
+
|
132 |
+
function escapeQuotesFromRes(&$results){
|
133 |
+
if(!$this->escapingOn) return false;
|
134 |
+
foreach($results as $k =>$r){
|
135 |
+
|
136 |
+
if(in_array($this->getFormat,array(ARRAY_A,ARRAY_N))){
|
137 |
+
foreach($r as $k1 =>$v1){
|
138 |
+
if(in_array($k1,$this->escapeFields)){
|
139 |
+
$results[$k][$k1]= stripslashes($v1);
|
140 |
+
}
|
141 |
+
}
|
142 |
+
}
|
143 |
+
}
|
144 |
+
}
|
145 |
+
|
146 |
+
function setLimit($page=0,$limit=false){
|
147 |
+
/*set the limit of the selection*/
|
148 |
+
|
149 |
+
if(!$this->getOne){
|
150 |
+
if($page==0){
|
151 |
+
if(isset($_REQUEST['pagi'])){
|
152 |
+
$page=(int)$_REQUEST['pagi'];
|
153 |
+
if($page!=0) $page=$page-1;
|
154 |
+
}
|
155 |
+
|
156 |
+
}else $page=$page-1;
|
157 |
+
}
|
158 |
+
|
159 |
+
if(!$limit){
|
160 |
+
if(isset($this->limit_pp)) $limit=$this->limit_pp;
|
161 |
+
else{
|
162 |
+
$config=WYSIJA::get('config','model');
|
163 |
+
$limit=$config->getValue('limit_listing');
|
164 |
+
}
|
165 |
+
}
|
166 |
+
|
167 |
+
$this->limit=(int)$limit;
|
168 |
+
$this->page=$page;
|
169 |
+
$this->limit_start=(int)($this->page*$this->limit);
|
170 |
+
$this->limit_end=(int)($this->limit_start+$this->limit);
|
171 |
+
|
172 |
+
return " LIMIT $this->limit_start , $this->limit";
|
173 |
+
}
|
174 |
+
|
175 |
+
/**
|
176 |
+
* to have a custom query through the model and get the result immediately
|
177 |
+
* @param type $query
|
178 |
+
* @return type
|
179 |
+
*/
|
180 |
+
function getResults($query,$type=ARRAY_A){
|
181 |
+
return $this->query('get_res',$query, $type);
|
182 |
+
}
|
183 |
+
|
184 |
+
|
185 |
+
function getSelectTableName(){
|
186 |
+
if($this->joins && isset($this->joins['tablestart'])){
|
187 |
+
if(isset($this->joins['prefstart'])) return $this->wpprefix.$this->joins['prefstart'].'_'.$this->joins['tablestart'];
|
188 |
+
else return $this->getPrefix().$this->joins['tablestart'];
|
189 |
+
}else return $this->getPrefix().$this->table_name;
|
190 |
+
}
|
191 |
+
|
192 |
+
/**
|
193 |
+
* simple SQL count
|
194 |
+
* @global type $wpdb
|
195 |
+
* @return type
|
196 |
+
*/
|
197 |
+
function count($query=false,$keygetcount=false){
|
198 |
+
if(!$query){
|
199 |
+
$groupBy=$this->makeGroupBY();
|
200 |
+
$columnMore='';
|
201 |
+
if($groupBy) $columnMore=','.$this->groupby;
|
202 |
+
$query='SELECT COUNT('.$this->getPk().') as count '.$columnMore.' FROM `'.$this->getSelectTableName().'`';
|
203 |
+
$query.=$this->makeJoins();
|
204 |
+
|
205 |
+
$query.=$this->makeWhere();
|
206 |
+
$query.=$groupBy;
|
207 |
+
}
|
208 |
+
|
209 |
+
|
210 |
+
// if dbg is on we track the duration of the query
|
211 |
+
if($this->dbg){
|
212 |
+
$this->timer_start();
|
213 |
+
}
|
214 |
+
$results=$this->query('get_res',$query,$this->getFormat);
|
215 |
+
|
216 |
+
// if dbg is on we track the duration of the query
|
217 |
+
if($this->dbg){
|
218 |
+
$this->timer_stop();
|
219 |
+
$this->keepQry('count');
|
220 |
+
}
|
221 |
+
|
222 |
+
if(!$results || count($results)>1) return $results;
|
223 |
+
else {
|
224 |
+
if($keygetcount) return $results[0][$keygetcount];
|
225 |
+
else{
|
226 |
+
foreach($results[0] as $key => $count) return $count;
|
227 |
+
}
|
228 |
+
}
|
229 |
+
|
230 |
+
|
231 |
+
return $results;
|
232 |
+
}
|
233 |
+
|
234 |
+
/**
|
235 |
+
* make the SQL WHERE condition string
|
236 |
+
* @return string
|
237 |
+
*/
|
238 |
+
function makeWhere(){
|
239 |
+
$query='';
|
240 |
+
if($this->conditions){
|
241 |
+
/*set the WHERE clause*/
|
242 |
+
$conditions=array();
|
243 |
+
foreach($this->conditions as $type=>$values){
|
244 |
+
if(!in_array($type, $this->comparisonKeys)){
|
245 |
+
$conditionsss=$this->conditions;
|
246 |
+
$this->conditions=array();
|
247 |
+
$this->conditions['equal']=$conditionsss;
|
248 |
+
|
249 |
+
break;
|
250 |
+
}
|
251 |
+
}
|
252 |
+
foreach($this->conditions as $type=>$values){
|
253 |
+
if($type=='like' && count($values)>1){
|
254 |
+
if(is_array($values)){
|
255 |
+
$total=count($values);
|
256 |
+
$i=1;
|
257 |
+
$likeCond='';
|
258 |
+
foreach($values as $qfield => $qval){
|
259 |
+
$likeCond.=$qfield." LIKE '%".mysql_real_escape_string(addcslashes($qval, '%_' ))."%'";
|
260 |
+
if($i<$total){
|
261 |
+
$likeCond.=' OR ';
|
262 |
+
}
|
263 |
+
$i++;
|
264 |
+
}
|
265 |
+
$conditions[]='('.$likeCond.')';
|
266 |
+
}
|
267 |
+
continue;
|
268 |
+
}
|
269 |
+
foreach($values as $condK => $condVal){
|
270 |
+
|
271 |
+
//secure from injections
|
272 |
+
$this->_secureFieldVal($condK, $condVal);
|
273 |
+
|
274 |
+
switch($type){
|
275 |
+
case 'equal':
|
276 |
+
if(is_array($condVal)){
|
277 |
+
$conditions[]=$condK.' IN ("'.implode('","', $condVal).'")';
|
278 |
+
}else{
|
279 |
+
if(is_null($condVal)) {
|
280 |
+
$conditions[] = $condK.' IS NULL';
|
281 |
+
} else {
|
282 |
+
if(is_numeric($condVal) === false) $condVal = '"'.$condVal.'"';
|
283 |
+
$conditions[] = $condK.'='.$condVal;
|
284 |
+
}
|
285 |
+
}
|
286 |
+
break;
|
287 |
+
case 'notequal':
|
288 |
+
if(is_array($condVal)){
|
289 |
+
$conditions[]=$condK.' NOT IN ("'.implode('","', $condVal).'")';
|
290 |
+
}else{
|
291 |
+
//this means that if I delete something with a list of ids and the array happens to be empty array of ids it will just delete everything by
|
292 |
+
if(is_null($condVal)) {
|
293 |
+
$conditions[] = $condK.' IS NOT NULL';
|
294 |
+
} else {
|
295 |
+
if(is_numeric($condVal) === false) $condVal = '"'.$condVal.'"';
|
296 |
+
$conditions[] = $condK.' != '.$condVal;
|
297 |
+
}
|
298 |
+
}
|
299 |
+
break;
|
300 |
+
case 'like':
|
301 |
+
$conditions[]=$condK." LIKE '%".mysql_real_escape_string(addcslashes($condVal, '%_' ))."%'";
|
302 |
+
break;
|
303 |
+
case 'greater':
|
304 |
+
if(is_numeric($condVal) === false) $condVal = '"'.$condVal.'"';
|
305 |
+
$conditions[]=$condK.' > '.$condVal;
|
306 |
+
break;
|
307 |
+
case 'less':
|
308 |
+
if(is_numeric($condVal) === false) $condVal = '"'.$condVal.'"';
|
309 |
+
$conditions[]=$condK.' < '.$condVal;
|
310 |
+
break;
|
311 |
+
case 'greater_eq':
|
312 |
+
if(is_numeric($condVal) === false) $condVal = '"'.$condVal.'"';
|
313 |
+
$conditions[]=$condK.' >= '.$condVal;
|
314 |
+
break;
|
315 |
+
case 'less_eq':
|
316 |
+
if(is_numeric($condVal) === false) $condVal = '"'.$condVal.'"';
|
317 |
+
$conditions[]=$condK.' <= '.$condVal;
|
318 |
+
break;
|
319 |
+
case 'is':
|
320 |
+
|
321 |
+
$conditions[]=$condK.' '.$condVal;
|
322 |
+
break;
|
323 |
+
}
|
324 |
+
}
|
325 |
+
|
326 |
+
}
|
327 |
+
|
328 |
+
$query.=' WHERE '.implode(' AND ',$conditions);
|
329 |
+
}
|
330 |
+
|
331 |
+
return $query;
|
332 |
+
}
|
333 |
+
|
334 |
+
/**
|
335 |
+
* make the SQL ORDER BY condition string
|
336 |
+
* @return string
|
337 |
+
*/
|
338 |
+
function makeOrderBY(){
|
339 |
+
$query=' ORDER BY ';
|
340 |
+
if($this->orderby){
|
341 |
+
/*set the ORDER BY clause*/
|
342 |
+
$query.=$this->orderby.' '.$this->orderbyt;
|
343 |
+
}else{
|
344 |
+
/*by default we order by pk desc*/
|
345 |
+
if(is_array($this->pk)) return '';
|
346 |
+
$query.=$this->pk.' DESC';
|
347 |
+
}
|
348 |
+
return $query;
|
349 |
+
}
|
350 |
+
|
351 |
+
|
352 |
+
function makeJoins(){
|
353 |
+
|
354 |
+
if($this->joins){
|
355 |
+
$join=' as A';
|
356 |
+
$arrayLetters=array('B','C','D','E');
|
357 |
+
foreach($this->joins['tablejoins'] as $table => $fk){
|
358 |
+
$letter=array_shift($arrayLetters);
|
359 |
+
$join.=' JOIN `'.$this->getPrefix().$table.'` AS '.$letter." on $letter.$fk=A.".$this->joins['keystart'].' ';
|
360 |
+
}
|
361 |
+
/*set the ORDER BY clause*/
|
362 |
+
return $join;
|
363 |
+
}else return '';
|
364 |
+
|
365 |
+
}
|
366 |
+
/**
|
367 |
+
* make the SQL ORDER BY condition string
|
368 |
+
* @return string
|
369 |
+
*/
|
370 |
+
function makeGroupBY(){
|
371 |
+
|
372 |
+
if($this->groupby){
|
373 |
+
/*set the ORDER BY clause*/
|
374 |
+
return ' GROUP BY '.$this->groupby;
|
375 |
+
}else return '';
|
376 |
+
|
377 |
+
}
|
378 |
+
function groupBy($name){
|
379 |
+
|
380 |
+
if (!is_string($name) OR preg_match('|[^a-z0-9#_.-]|i',$name) !== 0 ){
|
381 |
+
$this->groupby=false;
|
382 |
+
}else $this->groupby=$name;
|
383 |
+
}
|
384 |
+
function orderBy($name,$type = 'ASC'){
|
385 |
+
|
386 |
+
if(is_array($name) and count($name) > 0) {
|
387 |
+
// set order by to empty string
|
388 |
+
$this->orderby = '';
|
389 |
+
$this->ordert = '';
|
390 |
+
|
391 |
+
// count number of arguments
|
392 |
+
$count = count($name);
|
393 |
+
|
394 |
+
// build order by query
|
395 |
+
for($i = 0; $i < $count; $i++) {
|
396 |
+
|
397 |
+
$value = current($name);
|
398 |
+
|
399 |
+
//security escaping
|
400 |
+
if(!is_string(key($name)) OR preg_match('|[^a-z0-9#_.-]|i',key($name)) !== 0 ){
|
401 |
+
$orderByCol="";
|
402 |
+
}else $orderByCol=key($name);
|
403 |
+
//security escaping
|
404 |
+
if(!is_string($value) OR preg_match('|[^a-z0-9#_.-]|i',$value) !== 0 ){
|
405 |
+
$orderByVal="";
|
406 |
+
}else $orderByVal=$value;
|
407 |
+
|
408 |
+
if($i === ($count - 1)) {
|
409 |
+
$this->orderby .= $orderByCol;
|
410 |
+
$this->ordert = $orderByVal;
|
411 |
+
} else {
|
412 |
+
$this->orderby .=$orderByCol.' '.$orderByVal;
|
413 |
+
$this->orderby .= ', ';
|
414 |
+
next($name);
|
415 |
+
}
|
416 |
+
}
|
417 |
+
} else if(!is_string($name) OR preg_match('|[^a-z0-9#_.-]|i',$name) !== 0 ){
|
418 |
+
$this->orderby="";
|
419 |
+
}else {
|
420 |
+
$this->orderby=$name;
|
421 |
+
}
|
422 |
+
|
423 |
+
if(!in_array($type,array('DESC','ASC'))) $type = 'DESC';
|
424 |
+
$this->orderbyt=$type;
|
425 |
+
}
|
426 |
+
|
427 |
+
|
428 |
+
|
429 |
+
/**
|
430 |
+
* prepare for an insert procedure
|
431 |
+
* @param type $values
|
432 |
+
*/
|
433 |
+
function insert($values,$ignore=false){
|
434 |
+
if($ignore)$this->ignore=true;
|
435 |
+
if($this->setValues($values)){
|
436 |
+
return $this->save();
|
437 |
+
}else{
|
438 |
+
$this->error(sprintf('missing values in model insert : %1$s.', get_class($this)));
|
439 |
+
}
|
440 |
+
}
|
441 |
+
|
442 |
+
|
443 |
+
function replace($values=array()){
|
444 |
+
$this->replaceQRY=true;
|
445 |
+
$this->insert($values);
|
446 |
+
$this->replaceQRY=false;
|
447 |
+
}
|
448 |
+
|
449 |
+
/**
|
450 |
+
* prepare for an update procedure
|
451 |
+
* @param type $values
|
452 |
+
* @param type $conditions
|
453 |
+
*/
|
454 |
+
function update($values=array(),$conditions=array()){
|
455 |
+
|
456 |
+
if($this->setValues($values)){
|
457 |
+
/*if no condition is set then we set it mannualy based on the primary key*/
|
458 |
+
if(!$conditions){
|
459 |
+
if(!$this->conditions){
|
460 |
+
if(isset($values[$this->pk]) && $values[$this->pk]){
|
461 |
+
|
462 |
+
$this->setConditions(array($this->pk =>$values[$this->pk]),true);
|
463 |
+
|
464 |
+
unset($values[$this->pk]);
|
465 |
+
|
466 |
+
|
467 |
+
return $this->save(true);
|
468 |
+
|
469 |
+
}else{
|
470 |
+
$this->error(sprintf('missing pk value in model update : %1$s.', get_class($this)));
|
471 |
+
}
|
472 |
+
}
|
473 |
+
|
474 |
+
}else{
|
475 |
+
if($this->setConditions($conditions,true)){
|
476 |
+
return $this->save(true);
|
477 |
+
}else{
|
478 |
+
$this->error(sprintf('missing conditions in model update : %1$s.', get_class($this)));
|
479 |
+
}
|
480 |
+
}
|
481 |
+
|
482 |
+
}else{
|
483 |
+
$this->error(sprintf('missing values in model update : %1$s.', get_class($this)));
|
484 |
+
}
|
485 |
+
}
|
486 |
+
|
487 |
+
/**
|
488 |
+
* UPDATE with a special where condition
|
489 |
+
* @param type $table
|
490 |
+
* @param type $data
|
491 |
+
* @param type $where
|
492 |
+
* @param type $format
|
493 |
+
* @param type $where_format
|
494 |
+
* @return type
|
495 |
+
*/
|
496 |
+
function specialUpdate( $table, $data, $where, $format = null, $where_format = null ) {
|
497 |
+
if ( ! is_array( $data ) || ! is_array( $where ) )
|
498 |
+
return false;
|
499 |
+
|
500 |
+
$formats = $format = (array) $format;
|
501 |
+
$bits = $wheres = array();
|
502 |
+
|
503 |
+
$i=0;
|
504 |
+
foreach ( $data as $field => $val) {
|
505 |
+
$this->_secureFieldVal($field,$val);
|
506 |
+
|
507 |
+
switch($format[$i]){
|
508 |
+
case "%d":
|
509 |
+
$bits[] = "`$field` = ".(int)$val;
|
510 |
+
break;
|
511 |
+
case '[increment]':
|
512 |
+
$bits[] = "`$field` = ".$field.'+1';
|
513 |
+
break;
|
514 |
+
case '[decrement]':
|
515 |
+
$bits[] = "`$field` = ".$field.'-1';
|
516 |
+
break;
|
517 |
+
default :
|
518 |
+
$bits[] = "`$field` = '".$val."'";
|
519 |
+
}
|
520 |
+
$i++;
|
521 |
+
}
|
522 |
+
|
523 |
+
$sql = "UPDATE `$table` SET " . implode( ', ', $bits ) . ' ' . $this->makeWhere();
|
524 |
+
return $this->query( $sql );
|
525 |
+
}
|
526 |
+
|
527 |
+
|
528 |
+
function _secureFieldVal(&$field,&$val){
|
529 |
+
if (!is_string($field) OR preg_match('|[^a-z0-9#_.-]|i',$field) !== 0 ){
|
530 |
+
die('field "'.$field .'" not secured');
|
531 |
+
}
|
532 |
+
global $wpdb;
|
533 |
+
if(is_string($val)) $val=mysql_real_escape_string($val,$wpdb->dbh);
|
534 |
+
else{
|
535 |
+
if(is_array($val)){
|
536 |
+
foreach($val as $k=>$v){
|
537 |
+
if(is_string($v)) $val[$k]=mysql_real_escape_string($v,$wpdb->dbh);
|
538 |
+
}
|
539 |
+
}elseif(is_object($val)){
|
540 |
+
foreach($val as $k=>$v){
|
541 |
+
if(is_string($v)) $val->$k=mysql_real_escape_string($v,$wpdb->dbh);
|
542 |
+
}
|
543 |
+
}
|
544 |
+
}
|
545 |
+
}
|
546 |
+
/**
|
547 |
+
* save information as an update or an insert
|
548 |
+
* @global type $wpdb
|
549 |
+
* @param type $update
|
550 |
+
* @return type
|
551 |
+
*/
|
552 |
+
function save($update=false){
|
553 |
+
|
554 |
+
if($update)$updateStr='Update';
|
555 |
+
else $updateStr='Insert';
|
556 |
+
$beforeSave='before'.$updateStr;
|
557 |
+
$afterSave='after'.$updateStr;
|
558 |
+
|
559 |
+
|
560 |
+
|
561 |
+
if(!$update && isset($this->columns['created_at']))$this->values['created_at']=time();
|
562 |
+
foreach($this->columns as $key => $params){
|
563 |
+
/*check for auto columns */
|
564 |
+
if((isset($params['autoup']) && $update) || (!$update && $key!='sent_at')){
|
565 |
+
if(isset($params['type']) && !isset($this->values[$key])){
|
566 |
+
switch($params['type']){
|
567 |
+
case 'date':
|
568 |
+
$this->values[$key]=time();
|
569 |
+
break;
|
570 |
+
case 'ip':
|
571 |
+
$userHelper=WYSIJA::get("user","helper");
|
572 |
+
/*record the ip and save the user*/
|
573 |
+
$this->values[$key]=$userHelper->getIP();
|
574 |
+
break;
|
575 |
+
case 'referer':
|
576 |
+
/*record the ip and save the user*/
|
577 |
+
$this->values[$key]=$_SERVER['HTTP_REFERER'];
|
578 |
+
break;
|
579 |
+
}
|
580 |
+
}
|
581 |
+
|
582 |
+
}
|
583 |
+
}
|
584 |
+
|
585 |
+
if(method_exists($this,$beforeSave)){
|
586 |
+
if(!$this->$beforeSave()){
|
587 |
+
//$this->error(sprintf('Problem during validation "%2$s" in model : %1$s.', get_class($this), $beforeSave));
|
588 |
+
return false;
|
589 |
+
}
|
590 |
+
}
|
591 |
+
|
592 |
+
/*prepare a format list for the update and insert function*/
|
593 |
+
$fieldsFormats=array();
|
594 |
+
if(!is_array($this->pk) && isset($this->values[$this->pk])) unset($this->values[$this->pk]);
|
595 |
+
foreach($this->values as $key =>$val){
|
596 |
+
if(!isset($this->columns[$key]['html'])) $this->values[$key]=strip_tags($val);
|
597 |
+
/* let's correct the type of the values based on the one defined in the model*/
|
598 |
+
if(in_array($val, array('[increment]','[decrement]'))){
|
599 |
+
$fieldsFormats[]=$val;
|
600 |
+
$this->specialUpdate=true;
|
601 |
+
}else{
|
602 |
+
//dbg($this->values);
|
603 |
+
if(!isset($this->columns[$key]['type'])){
|
604 |
+
$this->columns[$key]['type']='default';
|
605 |
+
}
|
606 |
+
switch($this->columns[$key]['type']){
|
607 |
+
case 'integer':
|
608 |
+
case 'boolean':
|
609 |
+
$fieldsFormats[]="%d";
|
610 |
+
break;
|
611 |
+
default:
|
612 |
+
$fieldsFormats[]="%s";
|
613 |
+
|
614 |
+
}
|
615 |
+
}
|
616 |
+
|
617 |
+
}
|
618 |
+
|
619 |
+
if($this->fieldValid && !$this->validateFields()) {
|
620 |
+
$this->error(__('Error Validating the fields',WYSIJA),true);
|
621 |
+
$this->stay=true;
|
622 |
+
return false;
|
623 |
+
}
|
624 |
+
|
625 |
+
global $wpdb;
|
626 |
+
|
627 |
+
// if dbg is on we track the duration of the query
|
628 |
+
if($this->dbg){
|
629 |
+
$this->timer_start();
|
630 |
+
}
|
631 |
+
|
632 |
+
if($update){
|
633 |
+
|
634 |
+
if( $this->specialUpdate || isset($this->conditions['equal']) || isset($this->conditions['notequal']) || isset($this->conditions['like'])){
|
635 |
+
|
636 |
+
$resultSave=$this->specialUpdate($this->getPrefix().$this->table_name,$this->values,$this->conditions,$fieldsFormats);
|
637 |
+
$this->logError();
|
638 |
+
}else{
|
639 |
+
|
640 |
+
$wpdb->update($this->getPrefix().$this->table_name,$this->values,$this->conditions,$fieldsFormats);
|
641 |
+
$this->logError();
|
642 |
+
$resultSave=$wpdb->result;
|
643 |
+
}
|
644 |
+
|
645 |
+
}else{
|
646 |
+
if($this->replaceQRY){
|
647 |
+
$resultSave=$wpdb->replace($this->getPrefix().$this->table_name,$this->values,$fieldsFormats);
|
648 |
+
$this->logError();
|
649 |
+
}else{
|
650 |
+
|
651 |
+
if($this->ignore) $resultSave=$wpdb->insert($this->getPrefix().$this->table_name,$this->values,$fieldsFormats);
|
652 |
+
else $resultSave=$wpdb->insert($this->getPrefix().$this->table_name,$this->values,$fieldsFormats);
|
653 |
+
|
654 |
+
$this->logError();
|
655 |
+
//dbg('hello');
|
656 |
+
}
|
657 |
+
|
658 |
+
}
|
659 |
+
|
660 |
+
// if dbg is on we track the duration of the query
|
661 |
+
if($this->dbg){
|
662 |
+
$this->timer_stop();
|
663 |
+
$this->keepQry('save');
|
664 |
+
}
|
665 |
+
|
666 |
+
if(!$resultSave){
|
667 |
+
$wpdb->show_errors();
|
668 |
+
return false;
|
669 |
+
}else{
|
670 |
+
if($update){
|
671 |
+
if(isset($this->conditions[$this->getPk()])){
|
672 |
+
$resultSave=$this->conditions[$this->getPk()];
|
673 |
+
}else{
|
674 |
+
if(isset($this->conditions[$this->getPk(1)])) $resultSave=$this->conditions[$this->getPk(1)];
|
675 |
+
}
|
676 |
+
|
677 |
+
}else{
|
678 |
+
$resultSave=$wpdb->insert_id;
|
679 |
+
}
|
680 |
+
}
|
681 |
+
|
682 |
+
$wpdb->flush();
|
683 |
+
|
684 |
+
if(method_exists($this,$afterSave)){
|
685 |
+
if(!$this->$afterSave($resultSave)){
|
686 |
+
//$this->error(sprintf('Problem during validation "%2$s" in model : %1$s.', get_class($this), $afterSave));
|
687 |
+
return false;
|
688 |
+
}
|
689 |
+
}
|
690 |
+
return $resultSave;
|
691 |
+
}
|
692 |
+
|
693 |
+
|
694 |
+
function insertMany($values){
|
695 |
+
$fields=array_keys($values[0]);
|
696 |
+
|
697 |
+
$query='INSERT INTO `'.$this->getPrefix().$this->table_name.'` (`' . implode( '`,`', $fields ) . '`) VALUES ';
|
698 |
+
|
699 |
+
$total=count($values);
|
700 |
+
$i=1;
|
701 |
+
foreach($values as &$vals){
|
702 |
+
foreach($vals as &$v) $v=mysql_real_escape_string($v);
|
703 |
+
$query.= "('" . implode( "','", $vals )."')";
|
704 |
+
if($i<$total) $query.=',';
|
705 |
+
$i++;
|
706 |
+
}
|
707 |
+
|
708 |
+
$this->query($query.$myvalues);
|
709 |
+
|
710 |
+
}
|
711 |
+
|
712 |
+
/**
|
713 |
+
* validate the fields type(defined in each model) in the save procedure
|
714 |
+
* @return type
|
715 |
+
*/
|
716 |
+
function validateFields(){
|
717 |
+
$error=false;
|
718 |
+
foreach($this->values as $key =>$val){
|
719 |
+
if(isset($this->columns[$key]['req']) && !$val && $this->columns[$key]['type']!='boolean'){
|
720 |
+
$this->error(sprintf(__('Field "%1$s" is required in table "%2$s".',WYSIJA), $key,$this->table_name),true);
|
721 |
+
$error=true;
|
722 |
+
}
|
723 |
+
/* let's correct the type of the values based on the one defined in the model*/
|
724 |
+
switch($this->columns[$key]['type']){
|
725 |
+
case "email":
|
726 |
+
$userHelper = WYSIJA::get('user','helper');
|
727 |
+
if(!$userHelper->validEmail($val)){
|
728 |
+
$this->error(sprintf(__('Field "%1$s" needs to be a valid Email.',WYSIJA), $key),true);
|
729 |
+
$error=true;
|
730 |
+
}
|
731 |
+
break;
|
732 |
+
}
|
733 |
+
}
|
734 |
+
|
735 |
+
if($error) return false;
|
736 |
+
return true;
|
737 |
+
}
|
738 |
+
|
739 |
+
/**
|
740 |
+
* delete procedure
|
741 |
+
* @global type $wpdb
|
742 |
+
* @param type $conditions
|
743 |
+
* @return type
|
744 |
+
*/
|
745 |
+
function delete($conditions){
|
746 |
+
$query='DELETE FROM `'.$this->getPrefix().$this->table_name.'`';
|
747 |
+
|
748 |
+
if($this->setConditions($conditions)){
|
749 |
+
$whereQuery=$this->makeWhere();
|
750 |
+
if(!$whereQuery){
|
751 |
+
$this->error('Cannot delete element without conditions in model : '.get_class($this));
|
752 |
+
}
|
753 |
+
}else{
|
754 |
+
$this->error('Cannot delete element without conditions in model : '.get_class($this));
|
755 |
+
return false;
|
756 |
+
}
|
757 |
+
$result=$this->beforeDelete($conditions);
|
758 |
+
if($result) $result=$this->query($query.$whereQuery);
|
759 |
+
else return false;
|
760 |
+
$this->afterDelete();
|
761 |
+
|
762 |
+
return true;
|
763 |
+
}
|
764 |
+
|
765 |
+
function exists($conditions){
|
766 |
+
|
767 |
+
$query='SELECT '.$this->getPk().' FROM `'.$this->getSelectTableName().'`';
|
768 |
+
|
769 |
+
$query.=$this->makeJoins();
|
770 |
+
if($this->setConditions($conditions)){
|
771 |
+
$whereQuery=$this->makeWhere();
|
772 |
+
if(!$whereQuery){
|
773 |
+
$this->error('Cannot test element without conditions in model : '.get_class($this));
|
774 |
+
}
|
775 |
+
}else{
|
776 |
+
$this->error('Cannot test element without conditions in model : '.get_class($this));
|
777 |
+
return false;
|
778 |
+
}
|
779 |
+
$res=$this->query('get_res',$query.$whereQuery, ARRAY_A);
|
780 |
+
if($res) return $res;
|
781 |
+
else return false;
|
782 |
+
}
|
783 |
+
|
784 |
+
function getPk($numb=0){
|
785 |
+
$pk=$this->pk;
|
786 |
+
if(is_array($pk)) $pk=$pk[$numb];
|
787 |
+
return $pk;
|
788 |
+
}
|
789 |
+
|
790 |
+
/**
|
791 |
+
* set the values after verifying them
|
792 |
+
* @param type $values
|
793 |
+
* @return type
|
794 |
+
*/
|
795 |
+
function setValues($values){
|
796 |
+
if($this->colCheck && !$this->checkAreColumns($values)) return false;
|
797 |
+
|
798 |
+
$this->values=array();
|
799 |
+
$this->values=$values;
|
800 |
+
return true;
|
801 |
+
}
|
802 |
+
|
803 |
+
/**
|
804 |
+
*
|
805 |
+
* @param type $values
|
806 |
+
* @return type
|
807 |
+
*/
|
808 |
+
function setJoin($joins){
|
809 |
+
$this->joins=$joins;
|
810 |
+
return true;
|
811 |
+
}
|
812 |
+
|
813 |
+
/**
|
814 |
+
* set the conditions after verifying them
|
815 |
+
* @param type $conditions
|
816 |
+
* @return type
|
817 |
+
*/
|
818 |
+
function setConditions($conditions,$update=false){
|
819 |
+
if($conditions && is_array($conditions)){
|
820 |
+
|
821 |
+
$this->conditions=array();
|
822 |
+
if($update){
|
823 |
+
foreach($conditions as $key =>$cond){
|
824 |
+
if($this->colCheck && !$this->checkAreColumns($conditions)) return false;
|
825 |
+
|
826 |
+
if(is_array($cond)){
|
827 |
+
$this->specialUpdate=true;
|
828 |
+
$this->conditions=$conditions;
|
829 |
+
|
830 |
+
return true;
|
831 |
+
}else $this->conditions[$key]=$cond;
|
832 |
+
|
833 |
+
}
|
834 |
+
} else {
|
835 |
+
foreach($conditions as $key => $cond) {
|
836 |
+
if(!in_array($key, $this->comparisonKeys /*array('like','equal','notequal','greater','less','greater_eq','less_eq')*/)){
|
837 |
+
if($this->colCheck && !$this->checkAreColumns($conditions)) return false;
|
838 |
+
if(array_key_exists('equal', $this->conditions) === false) $this->conditions['equal'] = array();
|
839 |
+
$this->conditions['equal'][$key] = $cond;
|
840 |
+
}else{
|
841 |
+
if($this->colCheck && !$this->checkAreColumns($cond)) return false;
|
842 |
+
$this->conditions[$key]=$cond;
|
843 |
+
}
|
844 |
+
|
845 |
+
}
|
846 |
+
}
|
847 |
+
|
848 |
+
return true;
|
849 |
+
}else return false;
|
850 |
+
}
|
851 |
+
|
852 |
+
/**
|
853 |
+
* check that the columns corresponds to the columns in the model
|
854 |
+
* @param type $arrayColumns
|
855 |
+
* @return type
|
856 |
+
*/
|
857 |
+
function checkAreColumns($columns){
|
858 |
+
if($this->noCheck) return true;
|
859 |
+
foreach($columns as $column => $values) {
|
860 |
+
// skip when column is a comparison key
|
861 |
+
if(in_array($column, $this->comparisonKeys)) continue;
|
862 |
+
|
863 |
+
$columnName = $column;
|
864 |
+
if(!isset($this->columns[$columnName])){
|
865 |
+
$this->error(sprintf('Column %1$s does not exist in model : %2$s', $columnName, get_class($this)));
|
866 |
+
return false;
|
867 |
+
}
|
868 |
+
}
|
869 |
+
return true;
|
870 |
+
}
|
871 |
+
|
872 |
+
function timer_start() {
|
873 |
+
$this->query_duration = 0;
|
874 |
+
$this->time_start = microtime( true );
|
875 |
+
return true;
|
876 |
+
}
|
877 |
+
|
878 |
+
function timer_stop() {
|
879 |
+
$this->query_duration = ( microtime( true ) - $this->time_start );
|
880 |
+
}
|
881 |
+
|
882 |
+
function query($query,$arg2='',$arg3=ARRAY_A){
|
883 |
+
global $wpdb;
|
884 |
+
$this->sql_error = false;
|
885 |
+
if(!$arg2) $query = str_replace(array('[wysija]','[wp]'),array($this->getPrefix(),$wpdb->prefix),$query);
|
886 |
+
else $arg2 = str_replace(array('[wysija]','[wp]'),array($this->getPrefix(),$wpdb->prefix),$arg2);
|
887 |
+
|
888 |
+
// if dbg is on we track the duration of the query
|
889 |
+
if($this->dbg){
|
890 |
+
$this->timer_start();
|
891 |
+
}
|
892 |
+
|
893 |
+
switch($query){
|
894 |
+
case 'get_row':
|
895 |
+
$result = $wpdb->get_row($arg2,$arg3);
|
896 |
+
$this->logError();
|
897 |
+
break;
|
898 |
+
case 'get_res':
|
899 |
+
$result = $wpdb->get_results($arg2,$arg3);
|
900 |
+
//$this->escapeQuotesFromRes($results);
|
901 |
+
$this->logError();
|
902 |
+
break;
|
903 |
+
default:
|
904 |
+
$result = $wpdb->query($query);
|
905 |
+
$this->logError();
|
906 |
+
|
907 |
+
// get the last insert id if it's an insert query
|
908 |
+
if(substr($query, 0, 6) == 'INSERT') $result = $wpdb->insert_id;
|
909 |
+
|
910 |
+
}
|
911 |
+
// if dbg is on we track the duration of the query
|
912 |
+
if($this->dbg){
|
913 |
+
$this->timer_stop();
|
914 |
+
$this->keepQry('query');
|
915 |
+
}
|
916 |
+
return $result;
|
917 |
+
}
|
918 |
+
|
919 |
+
function logError(){
|
920 |
+
if(defined('WYSIJA_DBG') && WYSIJA_DBG>1){
|
921 |
+
global $wysija_queries_errors, $wpdb;
|
922 |
+
if(!$wysija_queries_errors) $wysija_queries_errors=array();
|
923 |
+
|
924 |
+
$this->sql_error=mysql_error($wpdb->dbh);
|
925 |
+
|
926 |
+
if($this->sql_error) {
|
927 |
+
$wysija_queries_errors[]=$this->sql_error;
|
928 |
+
WYSIJA::log('queries_errors',$this->sql_error,'query_errors');
|
929 |
+
}
|
930 |
+
|
931 |
+
}
|
932 |
+
|
933 |
+
}
|
934 |
+
|
935 |
+
function keepQry($from='wpdb'){
|
936 |
+
global $wpdb,$wysija_queries;
|
937 |
+
|
938 |
+
//if($qry) $wysija_queries['[FROM '.$from.']'] = array('duration' => $this->query_duration , 'query' => $qry);
|
939 |
+
//else
|
940 |
+
$wysija_queries[$from][] = array('duration' => $this->query_duration , 'query' => $wpdb->last_query);
|
941 |
+
}
|
942 |
+
|
943 |
+
function getAffectedRows(){
|
944 |
+
global $wpdb;
|
945 |
+
return $wpdb->rows_affected;
|
946 |
+
//return mysql_affected_rows( $this->dbh );
|
947 |
+
}
|
948 |
+
|
949 |
+
function getErrorMsg(){
|
950 |
+
global $wpdb;
|
951 |
+
return $wpdb->show_errors();
|
952 |
+
}
|
953 |
+
/**
|
954 |
+
* get the full prefix for the table
|
955 |
+
* @global type $wpdb
|
956 |
+
* @return type
|
957 |
+
*/
|
958 |
+
function getPrefix(){
|
959 |
+
if($this->tableWP) return $this->wpprefix.$this->table_prefix;
|
960 |
+
else return $this->wpprefix.$this->table_prefix.'_';
|
961 |
+
}
|
962 |
+
|
963 |
+
/**
|
964 |
+
* this function allows you to get the prefix from the main site on a multisite
|
965 |
+
* @return type
|
966 |
+
*/
|
967 |
+
function get_site_prefix($blog_id=1){
|
968 |
+
|
969 |
+
switch_to_blog( $blog_id );
|
970 |
+
global $wpdb;
|
971 |
+
$main_site_prefix=$wpdb->prefix;
|
972 |
+
restore_current_blog();
|
973 |
+
|
974 |
+
if($this->tableWP) return $main_site_prefix.$this->table_prefix;
|
975 |
+
else return $main_site_prefix.$this->table_prefix.'_';
|
976 |
+
}
|
977 |
+
|
978 |
+
function beforeInsert(){
|
979 |
+
return true;
|
980 |
+
}
|
981 |
+
|
982 |
+
function afterInsert($resultSaveID){
|
983 |
+
return true;
|
984 |
+
}
|
985 |
+
function beforeDelete($conditions){
|
986 |
+
return true;
|
987 |
+
}
|
988 |
+
|
989 |
+
function afterDelete(){
|
990 |
+
return true;
|
991 |
+
}
|
992 |
+
|
993 |
+
function beforeUpdate(){
|
994 |
+
return true;
|
995 |
+
}
|
996 |
+
|
997 |
+
function afterUpdate($resultSaveID){
|
998 |
+
return true;
|
999 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1000 |
|
1001 |
}
|
core/module/module.php
DELETED
@@ -1,248 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
defined('WYSIJA') or die('Restricted access');
|
4 |
-
|
5 |
-
class WYSIJA_module extends WYSIJA_control{
|
6 |
-
|
7 |
-
/**
|
8 |
-
* ID of module
|
9 |
-
* @var string
|
10 |
-
*/
|
11 |
-
protected $name;
|
12 |
-
|
13 |
-
/**
|
14 |
-
* view class of module
|
15 |
-
* @var string
|
16 |
-
*/
|
17 |
-
public $view;
|
18 |
-
|
19 |
-
/**
|
20 |
-
* instance of view class of module
|
21 |
-
* @var string
|
22 |
-
*/
|
23 |
-
protected $view_obj;
|
24 |
-
|
25 |
-
|
26 |
-
/**
|
27 |
-
* action/view of a hook
|
28 |
-
* @var string
|
29 |
-
*/
|
30 |
-
|
31 |
-
protected $view_show;
|
32 |
-
|
33 |
-
/**
|
34 |
-
* data which view class will pull from
|
35 |
-
* @var array
|
36 |
-
*/
|
37 |
-
protected $data;
|
38 |
-
|
39 |
-
protected $extended_plugin='wysija-newsletters';
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
/**
|
44 |
-
* Define hook name and list of modules of each hook
|
45 |
-
* @var Array
|
46 |
-
* @todo: implement hook management which allows to manage hooks from admin side
|
47 |
-
*/
|
48 |
-
|
49 |
-
protected $is_premium = false;
|
50 |
-
|
51 |
-
public static $hooks = array(
|
52 |
-
'hook_stats' => array(
|
53 |
-
// 'stats_newsletters_in_time',
|
54 |
-
'stats_top_newsletters',
|
55 |
-
'stats_top_subscribers',
|
56 |
-
'stats_top_links',
|
57 |
-
'stats_new_subscribers',
|
58 |
-
'stats_subscriptions',
|
59 |
-
'stats_top_domains'
|
60 |
-
),
|
61 |
-
|
62 |
-
// the left block in the page "subscriber detail"
|
63 |
-
'hook_subscriber_left' => array(
|
64 |
-
),
|
65 |
-
|
66 |
-
// the righ block in the page "subscriber detail"
|
67 |
-
'hook_subscriber_right' => array(
|
68 |
-
'stats_subscriber'
|
69 |
-
),
|
70 |
-
'hook_subscriber_bottom' => array(
|
71 |
-
'stats_subscribers_std',
|
72 |
-
// 'stats_newsletters_in_time' // not in use
|
73 |
-
),
|
74 |
-
// top of newsletter (viewstats) page
|
75 |
-
'hook_newsletter_top' => array(
|
76 |
-
|
77 |
-
'stats_newsletter_std',
|
78 |
-
'stats_newsletter',
|
79 |
-
// 'stats_reportcards_std'
|
80 |
-
),
|
81 |
-
|
82 |
-
// Newsletters >> Newsletter detail: bottom block
|
83 |
-
'hook_newsletter_bottom' => array(
|
84 |
-
//'stats_newsletter_std',
|
85 |
-
// 'stats_newsletters_in_time'
|
86 |
-
),
|
87 |
-
|
88 |
-
// the block "super advanced" in Settings >> Advanced tab
|
89 |
-
'hook_settings_super_advanced' => array(
|
90 |
-
'archive_std'
|
91 |
-
),
|
92 |
-
|
93 |
-
// event: before saving settings (Admin)
|
94 |
-
'hook_settings_before_save' => array(
|
95 |
-
'archive_std'
|
96 |
-
)
|
97 |
-
);
|
98 |
-
/**
|
99 |
-
* Constructor
|
100 |
-
* This is neccessary to override default action of WYSIJA_control::WYSIJA_control(),
|
101 |
-
* which always tries to load a default view object
|
102 |
-
*/
|
103 |
-
public function __construct() {
|
104 |
-
if (!empty($this->model)){
|
105 |
-
$class_name = $this->model;
|
106 |
-
$this->model_obj = new $class_name();
|
107 |
-
$this->model_obj->limit = 0; // quickfix "Undefined property: WYSIJA_model_statistics::$limit in views\back.php::limitPerPage()"
|
108 |
-
}
|
109 |
-
$this->get_view_obj($this->extended_plugin);
|
110 |
-
if (!empty($this->view_obj) && !empty($this->model_obj)){
|
111 |
-
$this->view_obj->model = $this->model_obj;
|
112 |
-
}
|
113 |
-
|
114 |
-
$this->data['module_name'] = $this->name;
|
115 |
-
|
116 |
-
|
117 |
-
$model_config=WYSIJA::get('config','model');
|
118 |
-
if($model_config->getValue('premium_key'))
|
119 |
-
$this->is_premium = true;
|
120 |
-
$this->data['is_premium'] = $this->is_premium;
|
121 |
-
}
|
122 |
-
|
123 |
-
/**
|
124 |
-
* get name of module
|
125 |
-
* @return string
|
126 |
-
*/
|
127 |
-
public function get_name(){
|
128 |
-
return $this->name;
|
129 |
-
}
|
130 |
-
|
131 |
-
/**
|
132 |
-
* Get unique link to the module and hook. This link will be displayed as an independent page and actually it renders [wysijap] postype
|
133 |
-
* @param string $module_name
|
134 |
-
* @param string $hook_name
|
135 |
-
* @param array $params (key => value, key => value)
|
136 |
-
* @return type
|
137 |
-
*/
|
138 |
-
public static function get_module_link($module_name, $hook_name, $extended_plugin='wysija-newsletters', Array $params = array()) {
|
139 |
-
$model_config=WYSIJA::get('config','model');
|
140 |
-
$params = array_merge($params, array(
|
141 |
-
'wysija-page' => 1,
|
142 |
-
'controller'=>'module',
|
143 |
-
'action' => 'init',
|
144 |
-
'module' => $module_name,
|
145 |
-
'extension' => $extended_plugin,
|
146 |
-
'hook' => $hook_name
|
147 |
-
));
|
148 |
-
return WYSIJA::get_permalink($model_config->getValue('confirm_email_link'),$params);
|
149 |
-
}
|
150 |
-
|
151 |
-
/**
|
152 |
-
* Return Hooks List
|
153 |
-
* @param string $hook_name name of hook
|
154 |
-
* @module_name string $module_name name of a specific module
|
155 |
-
* @return Array list of modules
|
156 |
-
*/
|
157 |
-
public static function get_modules_from_hook($hook_name, $module_name = null){
|
158 |
-
$module_list = self::get_hook_module_list();
|
159 |
-
$modules = !empty($module_list[$hook_name]) ? $module_list[$hook_name] : array();
|
160 |
-
if ($module_name)
|
161 |
-
return isset($modules[$module_name]) ? array($modules[$module_name]) : array();
|
162 |
-
return $modules;
|
163 |
-
}
|
164 |
-
|
165 |
-
/**
|
166 |
-
* Get all registered hooks and modules
|
167 |
-
* @return Array
|
168 |
-
*/
|
169 |
-
public static function get_hook_module_list(){
|
170 |
-
return self::$hooks;
|
171 |
-
}
|
172 |
-
|
173 |
-
/**
|
174 |
-
* Execute a hook, module by module, from first one to last one
|
175 |
-
* @param string $hook_name
|
176 |
-
* @param string $params
|
177 |
-
* @param string $extended_plugin
|
178 |
-
*
|
179 |
-
* @todo Performance factor:
|
180 |
-
* We are calling the same method for free / Premium version.
|
181 |
-
* Some modules don't exist at free side.
|
182 |
-
* Some modules don't exist at Premium side.
|
183 |
-
* This fact leads to an other fact: we have to check_exist() in both cases.
|
184 |
-
* Solution 1: cache by using a static attribute, within this class
|
185 |
-
* Solution 2: populate data to an external file (xml), and load that file into this static attribute (with solution 1)
|
186 |
-
*/
|
187 |
-
public static function execute_hook($hook_name, $params, $extended_plugin='wysija-newsletters'){
|
188 |
-
$hook_output = '';
|
189 |
-
if (!empty(self::$hooks[$hook_name])){
|
190 |
-
foreach (self::$hooks[$hook_name] as $module_name){
|
191 |
-
$module = WYSIJA::get($module_name,'module',false,$extended_plugin);
|
192 |
-
if(!empty($module) && method_exists($module, $hook_name))
|
193 |
-
$hook_output .= $module->$hook_name($params);
|
194 |
-
}
|
195 |
-
}
|
196 |
-
return $hook_output;
|
197 |
-
}
|
198 |
-
|
199 |
-
/**
|
200 |
-
* get an instance of a module class
|
201 |
-
* @param string $module_name module to be loaded
|
202 |
-
* @param type $extended_plugin : used only when calling the url from a different plugin it is used watch those files :
|
203 |
-
* -core/controller.php line 21, 23 ,24
|
204 |
-
* @return an instance of WYSIJA_module or its derived classes
|
205 |
-
*/
|
206 |
-
public static function get_instance_by_name($module_name,$extended_plugin='wysija-newsletters'){
|
207 |
-
return WYSIJA::get($module_name,'module',false, $extended_plugin);
|
208 |
-
}
|
209 |
-
|
210 |
-
/**
|
211 |
-
* Render a view/action
|
212 |
-
* @return string
|
213 |
-
*/
|
214 |
-
public function render($buffering_output = true){
|
215 |
-
if (!empty($this->view))
|
216 |
-
{
|
217 |
-
if ($buffering_output)
|
218 |
-
ob_start();
|
219 |
-
if (!$buffering_output)
|
220 |
-
return $this->get_view_obj()->render($this->view_show, $this->data, true);
|
221 |
-
else{
|
222 |
-
$this->get_view_obj()->render($this->view_show, $this->data, true);
|
223 |
-
$view = ob_get_contents();
|
224 |
-
ob_end_clean();
|
225 |
-
return $view;
|
226 |
-
}
|
227 |
-
}
|
228 |
-
}
|
229 |
-
|
230 |
-
/**
|
231 |
-
* initialize WYSIJA_view instance
|
232 |
-
* @return WYSIJA_view
|
233 |
-
*/
|
234 |
-
protected function get_view_obj(){
|
235 |
-
require_once(WYSIJA_CORE.'view.php');
|
236 |
-
require_once(WYSIJA_VIEWS.WYSIJA_SIDE.'.php');
|
237 |
-
if (empty($this->view_obj)){
|
238 |
-
|
239 |
-
$view_dir=WYSIJA_PLG_DIR.$this->extended_plugin.DS.'modules'.DS.$this->name; // quickfix, @todo
|
240 |
-
$class_path=$view_dir.DS.$this->view.'.php';// @todo: check exists
|
241 |
-
$class_name = strtoupper('wysija').'_module_view_'.$this->view;
|
242 |
-
require_once(WYSIJA_CORE.'view.php');
|
243 |
-
require_once($class_path);
|
244 |
-
$this->view_obj = new $class_name();
|
245 |
-
}
|
246 |
-
return $this->view_obj;
|
247 |
-
}
|
248 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
core/module/statistics.php
DELETED
@@ -1,33 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
defined('WYSIJA') or die('Restricted access');
|
3 |
-
|
4 |
-
class WYSIJA_module_statistics extends WYSIJA_module{
|
5 |
-
const GROUP_BY_YEAR = 1;
|
6 |
-
const GROUP_BY_MONTH = 2;
|
7 |
-
const GROUP_BY_DATE = 3;
|
8 |
-
const GROUP_BY_HOUR = 4;
|
9 |
-
const GROUP_BY_MINUTE = 5;
|
10 |
-
|
11 |
-
const ORDER_BY_SENT = 1;
|
12 |
-
const ORDER_BY_OPEN = 2;
|
13 |
-
const ORDER_BY_CLICK = 3;
|
14 |
-
const ORDER_BY_UNSUBSCRIBE = 4;
|
15 |
-
|
16 |
-
const ORDER_DIRECTION_ASC = 1;
|
17 |
-
const ORDER_DIRECTION_DESC = 2;
|
18 |
-
|
19 |
-
const SWITCHING_DATE_TO_MONTH_THRESHOLD = 90;// if the days between FROM and TO is greater than this value, we will group data by month instead of by date. Useful for charts.
|
20 |
-
|
21 |
-
const DEFAULT_TOP_RECORDS = 5; // default number of how many first records we should retrieve
|
22 |
-
|
23 |
-
public function __construct() {
|
24 |
-
parent::__construct();
|
25 |
-
$this->data['messages'] = $this->init_messages();
|
26 |
-
}
|
27 |
-
|
28 |
-
protected function init_messages() {
|
29 |
-
return array(
|
30 |
-
'data_not_available' => __("There's no stats to load!", WYSIJA)
|
31 |
-
);
|
32 |
-
}
|
33 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
core/module/statistics_model.php
DELETED
@@ -1,139 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
defined('WYSIJA') or die('Restricted access');
|
4 |
-
|
5 |
-
class WYSIJA_module_statistics_model extends WYSIJA_model {
|
6 |
-
|
7 |
-
const STATS_DATE_OF_CREATION = 'STATS_DATE_OF_CREATION';
|
8 |
-
/**
|
9 |
-
* Time to live of stats data
|
10 |
-
*/
|
11 |
-
const STATS_DATA_LIFE_TIME = 3600; // 1h * 60mins * 60s
|
12 |
-
/**
|
13 |
-
* Time to live of stats's table (structure)
|
14 |
-
*/
|
15 |
-
const STATS_TABLE_LIFE_TIME = 86400; // 24h * 60mins * 60s
|
16 |
-
|
17 |
-
const STATS_PREFIX = 'stats_cache_'; // prefix of stat tables
|
18 |
-
|
19 |
-
public function __construct() {
|
20 |
-
parent::WYSIJA_model();
|
21 |
-
$this->clean_up_out_of_date_tables();
|
22 |
-
}
|
23 |
-
|
24 |
-
/**
|
25 |
-
*
|
26 |
-
* @param array $params array of input params
|
27 |
-
*/
|
28 |
-
|
29 |
-
public function get_hash(Array $params) {
|
30 |
-
return md5(get_class($this) . json_encode($params));
|
31 |
-
}
|
32 |
-
|
33 |
-
/**
|
34 |
-
* set a date of creating temporary tables, useful for caching
|
35 |
-
* @return type
|
36 |
-
*/
|
37 |
-
protected function set_date_of_creation() {
|
38 |
-
$config = WYSIJA::get('config', 'model');
|
39 |
-
return $config->save(array(self::STATS_DATE_OF_CREATION => time()));
|
40 |
-
}
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Check if cache life time is out of date
|
44 |
-
* @return boolean
|
45 |
-
*/
|
46 |
-
protected function is_data_out_of_date() {
|
47 |
-
$config = WYSIJA::get('config', 'model');
|
48 |
-
$date_of_creation = $config->getValue(self::STATS_DATE_OF_CREATION);
|
49 |
-
return (time() - $date_of_creation >= self::STATS_DATA_LIFE_TIME);
|
50 |
-
}
|
51 |
-
|
52 |
-
/**
|
53 |
-
* Get the list of tables which are out of date, based on create_time
|
54 |
-
* @return type
|
55 |
-
*/
|
56 |
-
protected function get_out_of_date_tables() {
|
57 |
-
$query = '
|
58 |
-
SELECT
|
59 |
-
TABLE_NAME as table_name
|
60 |
-
FROM
|
61 |
-
INFORMATION_SCHEMA.TABLES
|
62 |
-
WHERE
|
63 |
-
TABLE_SCHEMA IN (SELECT DATABASE())
|
64 |
-
AND TABLE_NAME LIKE "[wysija]'.self::STATS_PREFIX.'%"
|
65 |
-
AND TIMESTAMPDIFF(SECOND,CREATE_TIME, NOW()) >= '.self::STATS_TABLE_LIFE_TIME.';
|
66 |
-
';
|
67 |
-
return $this->get_results($query);
|
68 |
-
}
|
69 |
-
|
70 |
-
/**
|
71 |
-
* Auto cleanup out-of-date tables
|
72 |
-
*/
|
73 |
-
protected function clean_up_out_of_date_tables() {
|
74 |
-
$tables = $this->get_out_of_date_tables();
|
75 |
-
if (!empty($tables) && is_array($tables)) {
|
76 |
-
$_temp = array();
|
77 |
-
foreach ($tables as $table)
|
78 |
-
if (!empty($table['table_name']))
|
79 |
-
$_temp[] = $table['table_name'];
|
80 |
-
}
|
81 |
-
if (!empty($_temp)) {
|
82 |
-
$query = 'DROP TABLE IF EXISTS `'. implode('`,`', $_temp).'`';
|
83 |
-
$this->get_results($query);
|
84 |
-
}
|
85 |
-
}
|
86 |
-
|
87 |
-
/**
|
88 |
-
* Check if a table exists
|
89 |
-
* @param string $table_name table name
|
90 |
-
* @return boolean
|
91 |
-
*/
|
92 |
-
protected function does_table_exists($table_name = null) {
|
93 |
-
if (empty($table_name) OR !is_string($table_name))
|
94 |
-
return false;
|
95 |
-
$query = "SHOW TABLES LIKE '$table_name'";
|
96 |
-
$result = $this->get_results($query);
|
97 |
-
return !empty($result) ? true : false;
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Generate a table name, based on input params
|
102 |
-
* @param type $params
|
103 |
-
*/
|
104 |
-
protected function get_table_name($params) {
|
105 |
-
$hash = $this->get_hash($params);
|
106 |
-
return '[wysija]' . self::STATS_PREFIX . $hash;
|
107 |
-
}
|
108 |
-
|
109 |
-
/**
|
110 |
-
* Generate a cached table
|
111 |
-
* @param type $table_name
|
112 |
-
* @param array $queries_create_table query to create a new cached table
|
113 |
-
* @param array $queries_insert_data query to collect and insert data to the newly created/truncated table
|
114 |
-
* @return boolean
|
115 |
-
*/
|
116 |
-
protected function generate_table($table_name, Array $queries_create_table, Array $queries_insert_data) {
|
117 |
-
$is_out_of_date = $this->is_data_out_of_date();
|
118 |
-
$does_table_exists = $this->does_table_exists($table_name);
|
119 |
-
|
120 |
-
if (!$is_out_of_date && $does_table_exists)
|
121 |
-
return true;
|
122 |
-
if ($does_table_exists) {
|
123 |
-
$this->query('TRUNCATE TABLE `' . $table_name . '`');
|
124 |
-
} else {
|
125 |
-
foreach ($queries_create_table as $query_create_table)
|
126 |
-
$this->query($query_create_table);
|
127 |
-
}
|
128 |
-
|
129 |
-
foreach ($queries_insert_data as $query_insert_data)
|
130 |
-
$this->query($query_insert_data);
|
131 |
-
|
132 |
-
if ($is_out_of_date) {
|
133 |
-
$this->set_date_of_creation();
|
134 |
-
}
|
135 |
-
|
136 |
-
return true;
|
137 |
-
}
|
138 |
-
|
139 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
core/module/statisticschart.php
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
defined('WYSIJA') or die('Restricted access');
|
3 |
-
|
4 |
-
abstract class WYSIJA_module_statisticschart extends WYSIJA_module_statistics{
|
5 |
-
public function __construct() {
|
6 |
-
parent::__construct();
|
7 |
-
$this->data['js_date_format'] = 'yy/mm/dd';
|
8 |
-
}
|
9 |
-
public function init(){
|
10 |
-
}
|
11 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
core/module/statisticstable.php
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
defined('WYSIJA') or die('Restricted access');
|
3 |
-
|
4 |
-
abstract class WYSIJA_module_statisticstable extends WYSIJA_module_statistics{
|
5 |
-
}
|
|
|
|
|
|
|
|
|
|
core/view.php
CHANGED
@@ -8,121 +8,14 @@ class WYSIJA_view extends WYSIJA_object{
|
|
8 |
var $search=array();
|
9 |
var $cols_nks=array();//correspondance between user_id and user-id once processed
|
10 |
|
11 |
-
static $color_coordinates = array();
|
12 |
-
|
13 |
-
static $cache_color_schemes = array();
|
14 |
-
|
15 |
-
/**
|
16 |
-
* Color schemes of MailPoet
|
17 |
-
* @var array
|
18 |
-
*/
|
19 |
-
var $color_schemes = array(
|
20 |
-
array('#21759b', '#6697BF', '#487192', '#284c69', '#000333'),// like blue
|
21 |
-
array('#388e71', '#2c6f58','#16523d','#0d3c2c','#092e21'),// like green
|
22 |
-
array('#c97575','#a76262', '#854f4f', '#743a3a', '#5a2a2a'),// like red
|
23 |
-
array('#00CC00', '#269926', '#008500', '#39E639', '#67E667'), // http://colorschemedesigner.com/#2P11Tw0w0w0w0 // green
|
24 |
-
array('#FF0000', '#BF3030', '#A60000', '#FF4040', '#FF7373') // http://colorschemedesigner.com/#0011Tw0w0w0w0 // red
|
25 |
-
);
|
26 |
-
|
27 |
-
/**
|
28 |
-
* Default font family
|
29 |
-
* @var type
|
30 |
-
*/
|
31 |
-
var $font_family = array('Arial');
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Default font size in pixel
|
35 |
-
* @var int
|
36 |
-
*/
|
37 |
-
var $font_size = 12;
|
38 |
-
|
39 |
-
|
40 |
function WYSIJA_view(){
|
41 |
|
42 |
}
|
43 |
|
44 |
|
45 |
-
/**
|
46 |
-
* Swap color schemes, to make sure, we don't use 2 colors in a same scheme continously
|
47 |
-
* @return array()
|
48 |
-
*/
|
49 |
-
protected function swap_color_schemes() {
|
50 |
-
if (empty(self::$cache_color_schemes)) {
|
51 |
-
// swap colors from axis X => Y, Y => X
|
52 |
-
$x = count($this->color_schemes[0][0]);
|
53 |
-
$y = count($this->color_schemes[0]);
|
54 |
-
$tmp = array();
|
55 |
-
foreach ($this->color_schemes as $y => $colors) {
|
56 |
-
foreach ($colors as $x => $color) {
|
57 |
-
$tmp[$x][$y] = $color;
|
58 |
-
}
|
59 |
-
}
|
60 |
-
self::$cache_color_schemes = $tmp;
|
61 |
-
}
|
62 |
-
return self::$cache_color_schemes;
|
63 |
-
}
|
64 |
-
/**
|
65 |
-
* Get one random color from schemes
|
66 |
-
* @return type
|
67 |
-
*
|
68 |
-
* Depreciated
|
69 |
-
*/
|
70 |
-
function get_random_color() {
|
71 |
-
return $this->get_next_color();
|
72 |
-
}
|
73 |
-
|
74 |
-
public function get_next_color() {
|
75 |
-
|
76 |
-
$color_schemes = $this->swap_color_schemes();
|
77 |
-
|
78 |
-
$class_name = get_class($this);
|
79 |
-
if (empty(self::$color_coordinates[$class_name]))
|
80 |
-
self::$color_coordinates[$class_name] = array('x'=> 0, 'y' => 0);
|
81 |
-
|
82 |
-
$current_color = $color_schemes[self::$color_coordinates[$class_name]['x']][self::$color_coordinates[$class_name]['y']];
|
83 |
-
|
84 |
-
// find out and set a next color
|
85 |
-
$flag = false;
|
86 |
-
$detected_new_color = false;
|
87 |
-
foreach ($color_schemes as $x => $colors) {
|
88 |
-
if ($detected_new_color) break;
|
89 |
-
foreach ($colors as $y => $color) {
|
90 |
-
if ($flag) {
|
91 |
-
self::$color_coordinates[$class_name]['x'] = $x;
|
92 |
-
self::$color_coordinates[$class_name]['y'] = $y;
|
93 |
-
$detected_new_color = true;
|
94 |
-
break;
|
95 |
-
}
|
96 |
-
if ($x == self::$color_coordinates[$class_name]['x'] && $y == self::$color_coordinates[$class_name]['y'])
|
97 |
-
$flag = true;
|
98 |
-
|
99 |
-
}
|
100 |
-
}
|
101 |
-
if (!$detected_new_color) {
|
102 |
-
self::$color_coordinates[$class_name]['x'] = 0;
|
103 |
-
self::$color_coordinates[$class_name]['y'] = 0;
|
104 |
-
}
|
105 |
-
return $current_color;
|
106 |
-
}
|
107 |
-
|
108 |
-
/**
|
109 |
-
* Get all colors from schemes
|
110 |
-
* @return type
|
111 |
-
*/
|
112 |
-
function get_all_colors() {
|
113 |
-
$color_schemes = $this->swap_color_schemes();// this one, to make sure, we don't put same color tone continously
|
114 |
-
|
115 |
-
$tmp = array();
|
116 |
-
foreach ($color_schemes as $colors) {
|
117 |
-
$tmp = array_merge($tmp, $colors);
|
118 |
-
}
|
119 |
-
return $tmp;
|
120 |
-
}
|
121 |
-
|
122 |
-
|
123 |
|
124 |
function renderErrorInstall(){
|
125 |
-
$this->title=__("Your server's configuration doesn't allow us to complete
|
126 |
$this->header();
|
127 |
$this->footer();
|
128 |
}
|
@@ -131,19 +24,14 @@ class WYSIJA_view extends WYSIJA_object{
|
|
131 |
*
|
132 |
* @param type $type
|
133 |
* @param type $data
|
134 |
-
* @param bool $is_module is rendering a module view
|
135 |
*/
|
136 |
-
function render($type,$data
|
137 |
$this->action=$type;
|
138 |
-
|
139 |
-
$this->header($data);
|
140 |
-
}
|
141 |
if($type !== NULL) {
|
142 |
$this->$type($data);
|
143 |
}
|
144 |
-
|
145 |
-
$this->footer();
|
146 |
-
}
|
147 |
}
|
148 |
|
149 |
/**
|
@@ -167,25 +55,20 @@ class WYSIJA_view extends WYSIJA_object{
|
|
167 |
}
|
168 |
unset($wysija_msg['g-error']);
|
169 |
}
|
170 |
-
|
|
|
171 |
if(!$wysija_msg) return '<div class="wysija-msg ajax"></div>'.$wpnonce;
|
172 |
$html='<div class="wysija-msg">';
|
|
|
173 |
foreach($wysija_msg as $level =>$messages){
|
174 |
$msg_class = '';
|
175 |
switch($level){
|
176 |
case 'updated':
|
177 |
-
$msg_class = 'notice-msg
|
178 |
break;
|
179 |
case 'error':
|
180 |
-
$msg_class = 'error-msg
|
181 |
break;
|
182 |
-
case 'xdetailed-updated':
|
183 |
-
$msg_class = 'xdetailed-updated';
|
184 |
-
break;
|
185 |
-
case 'xdetailed-errors':
|
186 |
-
$msg_class = 'xdetailed-errors';
|
187 |
-
break;
|
188 |
-
|
189 |
}
|
190 |
|
191 |
$html.='<div class="'.$msg_class.'">';
|
@@ -193,13 +76,7 @@ class WYSIJA_view extends WYSIJA_object{
|
|
193 |
|
194 |
if(count($messages)>0){
|
195 |
foreach($messages as $msg){
|
196 |
-
|
197 |
-
if(is_array($msg)) {
|
198 |
-
$msg = var_export($msg, true);
|
199 |
-
}
|
200 |
-
|
201 |
-
// display message
|
202 |
-
$html.='<li>'.$msg.'</li>';
|
203 |
}
|
204 |
}
|
205 |
|
@@ -207,6 +84,7 @@ class WYSIJA_view extends WYSIJA_object{
|
|
207 |
$html.='</ul>';
|
208 |
$html.='</div>';
|
209 |
}
|
|
|
210 |
$html.='</div><div class="wysija-msg ajax"></div>'.$wpnonce;
|
211 |
|
212 |
return $html;
|
@@ -219,7 +97,7 @@ class WYSIJA_view extends WYSIJA_object{
|
|
219 |
* @param type $get
|
220 |
* @return type
|
221 |
*/
|
222 |
-
|
223 |
$controller='';
|
224 |
if(!is_array($params)) $action=$params;
|
225 |
else{
|
@@ -266,27 +144,4 @@ class WYSIJA_view extends WYSIJA_object{
|
|
266 |
|
267 |
return $class_validate;
|
268 |
}
|
269 |
-
|
270 |
-
/**
|
271 |
-
* central function to return a translated formated date
|
272 |
-
* @param type $val
|
273 |
-
* @param type $format
|
274 |
-
* @return string
|
275 |
-
*/
|
276 |
-
function fieldListHTML_created_at($val,$format=''){
|
277 |
-
if(!$val) return '---';
|
278 |
-
|
279 |
-
//offset the time to the time of the WP site not the server
|
280 |
-
$hToolbox = WYSIJA::get('toolbox','helper');
|
281 |
-
// get current time taking timezone into account.
|
282 |
-
|
283 |
-
$val = $hToolbox->servertime_to_localtime($val);
|
284 |
-
|
285 |
-
if($format) return date_i18n($format,$val);
|
286 |
-
else return date_i18n(get_option('date_format'),$val);
|
287 |
-
}
|
288 |
-
|
289 |
-
function fieldListHTML_created_at_time($val){
|
290 |
-
return $this->fieldListHTML_created_at($val,get_option('date_format').', '.get_option('time_format'));
|
291 |
-
}
|
292 |
}
|
8 |
var $search=array();
|
9 |
var $cols_nks=array();//correspondance between user_id and user-id once processed
|
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
11 |
function WYSIJA_view(){
|
12 |
|
13 |
}
|
14 |
|
15 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
|
17 |
function renderErrorInstall(){
|
18 |
+
$this->title=__("Your server's configuration doesn't allow us to complete Wysija's Installation!",WYSIJA);
|
19 |
$this->header();
|
20 |
$this->footer();
|
21 |
}
|
24 |
*
|
25 |
* @param type $type
|
26 |
* @param type $data
|
|
|
27 |
*/
|
28 |
+
function render($type,$data){
|
29 |
$this->action=$type;
|
30 |
+
$this->header($data);
|
|
|
|
|
31 |
if($type !== NULL) {
|
32 |
$this->$type($data);
|
33 |
}
|
34 |
+
$this->footer();
|
|
|
|
|
35 |
}
|
36 |
|
37 |
/**
|
55 |
}
|
56 |
unset($wysija_msg['g-error']);
|
57 |
}
|
58 |
+
|
59 |
+
$wpnonce='<input type="hidden" value="'.wp_create_nonce('wysija_ajax').'" id="wysijax" />';
|
60 |
if(!$wysija_msg) return '<div class="wysija-msg ajax"></div>'.$wpnonce;
|
61 |
$html='<div class="wysija-msg">';
|
62 |
+
|
63 |
foreach($wysija_msg as $level =>$messages){
|
64 |
$msg_class = '';
|
65 |
switch($level){
|
66 |
case 'updated':
|
67 |
+
$msg_class = 'notice-msg';
|
68 |
break;
|
69 |
case 'error':
|
70 |
+
$msg_class = 'error-msg';
|
71 |
break;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
72 |
}
|
73 |
|
74 |
$html.='<div class="'.$msg_class.'">';
|
76 |
|
77 |
if(count($messages)>0){
|
78 |
foreach($messages as $msg){
|
79 |
+
$html.='<li>'.$msg.'</li>';
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
}
|
81 |
}
|
82 |
|
84 |
$html.='</ul>';
|
85 |
$html.='</div>';
|
86 |
}
|
87 |
+
|
88 |
$html.='</div><div class="wysija-msg ajax"></div>'.$wpnonce;
|
89 |
|
90 |
return $html;
|
97 |
* @param type $get
|
98 |
* @return type
|
99 |
*/
|
100 |
+
function secure($params=array(),$get=false,$echo=true){
|
101 |
$controller='';
|
102 |
if(!is_array($params)) $action=$params;
|
103 |
else{
|
144 |
|
145 |
return $class_validate;
|
146 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
147 |
}
|
css/add-ons.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
.module-container{overflow:hidden;width:100%;min-width:676px;margin:20px 0px}.module-container p,.module-container h2,.module-container h3{margin-left:6px}.mailpoet-module{position:relative;float:left;width:320px;min-height:330px;margin:0px 16px 18px 0px;border:1px solid #e5e5e5;background:#fff;padding:0px 0 14px 0px;box-shadow:0 1px 1px rgba(0,0,0,0.04);overflow:hidden}.mailpoet-module.not-ready{border-color:#eee;cursor:pointer}.mailpoet-module .mailpoet-module-image{margin:0px 12px}.mailpoet-module .mailpoet-module-content p{margin:0px 0px 8px 0px}.mailpoet-module .mailpoet-module-content p span.mailpoet-module-badge{background-color:#df1d4f;color:#fff;font-weight:bold;padding:6px 10px;margin-right:4px;border:1px solid #cc1148;border-radius:0px 0px 3px 3px}.mailpoet-module .mailpoet-module-content p span.mailpoet-module-badge a{color:#fff !important;text-decoration:none;border-bottom:1px dotted #fff}.mailpoet-module .mailpoet-module-content p span.mailpoet-module-badge.new{float:right !important;margin-top:-6px;background-color:#054e6e !important;border:1px solid #054e6e !important}.mailpoet-module .mailpoet-module-actions{display:block;position:absolute;bottom:6px;left:10px}.mailpoet-module .mailpoet-module-actions a{position:relative;margin-bottom:4px}.mailpoet-module-content{margin:0 1em}.mailpoet-module h3{line-height:1.1;margin:6px 12px;padding:3px 0px;font-size:14px;font-weight:bold;font-style:normal;color:#000}.mailpoet-module-description p{line-height:150%;font-size:12px;margin-bottom:20px;color:#666}.submit-idea{clear:both;display:block;padding:8px 15px;margin:8px 4px;overflow:hidden;line-height:180%}
|
|
css/admin-campaigns-articles.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#
|
1 |
+
#search-results li{border:1px solid #eee;height:38px;margin-bottom:8px;padding:5px 10px;background-color:#FFF}#search-results li:hover{background-color:#F2F2F2;border-color:#CCCCCC;cursor:pointer}#search-results .thumbnail{width:60px;height:38px;overflow:hidden;float:left;margin:0 10px 0 0}#search-results h3{margin:0 0 0 0;line-height:38px;height:38px;overflow:hidden}#search-results li:hover h3{color:#3060A8}#search-results{height:430px;width:580px}#get-full-post-label input{margin:0 4px 0 0}#search-advanced span{margin-right:10px;margin-bottom:10px;display:inline-block;width:42%}.searchwrap{position:relative;margin:0 0 10px 0}#search-results li{position:relative}.article-cpt{float:left;width:90%}.cpt-type{background-color:#F1F1F1;border-left:1px solid #CCCCCC;border-top:1px solid #CCCCCC;bottom:0;color:#21759B;font-style:italic;padding:0 5px 2px;position:absolute;right:0}.cpt-type small{color:#888}#search-advanced{display:none}span.statuses{float:right}#show-advanced-controls{position:absolute;right:12px;bottom:2px}
|
css/admin-campaigns-autopost.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.
|
1 |
+
p.clearfix{margin:0 0 10px 0}label{width:190px;float:left;padding:5px}label span.label{display:block;font-size:10px;font-style:italic}span.inline{float:left;margin:5px}p.clearfix input,p.clearfix select{float:left;border:1px solid #ccc;padding:5px;background:transparent;height:26px}p.clearfix input.color{height:23px}select{width:200px}select#post_limit{width:50px}label.radio{width:auto !important;margin:0 10px 0 0;height:20px}label.radio input{margin:0 5px 0 0;padding:0;height:20px;border:0 none}ul#category_selection{margin:-6px 0 0 200px}ul#category_selection li span{float:left;margin:0 5px 0 0}.remove-category{float:left}.icon-plus span,.icon-minus span{display:block;height:20px;width:20px}.icon-plus span{background:url(../img/controls/icons.png) no-repeat -200px 0}.icon-plus.active span,.icon-plus:hover span{background:url(../img/controls/icons.png) no-repeat -200px -20px}.icon-minus span{background:url(../img/controls/icons.png) no-repeat -220px 0}.icon-minus.active span,.icon-minus:hover span{background:url(../img/controls/icons.png) no-repeat -220px -20px}
|
css/admin-campaigns-bookmarks.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.bookmarks .networks li{margin:0 0 10px 0}.bookmarks .networks label{width:70px;float:left;font-weight:normal}.bookmarks .networks input{width:
|
1 |
+
.bookmarks .networks li{margin:0 0 10px 0}.bookmarks .networks label{width:70px;float:left;font-weight:normal}.bookmarks .networks input{width:250px;float:left}.bookmarks .sizes{margin:20px 0 0 0}.bookmarks .sizes a{margin:0 0 0 10px}.bookmarks .sizes a.selected{font-weight:bold}.bookmarks .sizes .small{font-size:12px}.bookmarks .sizes .medium{font-size:14px}.bookmarks .sizes .large{font-size:16px}.bookmarks .icons{height:230px;overflow:auto}.bookmarks .icons li{margin:10px}.bookmarks .icons li a{padding:5px;margin:0;display:-moz-inline-box;display:inline-block;*display:inline;*float:left}.bookmarks .icons li a.selected{border:2px solid #DD561A;padding:3px}.bookmarks .icons img{margin:0 5px;vertical-align:middle}
|
css/admin-campaigns-dividers.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wysija_popup_content.divider{width:620px}.dividers ul{height:
|
1 |
+
.wysija_popup_content.divider{width:620px}.dividers ul{height:400px;width:620px;overflow:auto;margin:0 0 20px 0}.dividers li{text-align:center;padding:5px 2px}.dividers li a{padding:2px;display:block}.dividers li a.selected{padding:0;border:2px solid #DD561A}.dividers li img{vertical-align:middle}
|
css/admin-campaigns-editDetails.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#datepicker-day{margin-left:10px
|
1 |
+
#datepicker-day{width:74px;margin-left:10px}
|
css/admin-campaigns-medias.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.swfupload{vertical-align:middle}ul#sidemenu{bottom:-1px;float:none
|
1 |
+
.swfupload{vertical-align:middle}ul#sidemenu{bottom:-1px;float:none;font-weight:normal;left:0;margin:0 5px;overflow:hidden}.wysija-thumb{float:left;height:150px;margin:10px;width:150px;position:relative;border:2px dashed transparent;filter:alpha(opacity=60);-moz-opacity:0.6;opacity:0.6;margin:8px}.wysija-thumb:hover,.wysija-thumb.selected:hover{border-color:#000;border-style:dashed}.wysija-thumb.selected{border-color:#4a5b04;border-style:solid;filter:alpha(opacity=100);-moz-opacity:1;opacity:1}.wysija-thumb img{max-height:150px;max-width:150px}.wysija-thumb span.delete{background:url("../img/controls/icons.png") no-repeat scroll -100px 0 transparent;cursor:pointer;height:20px;text-indent:-9999px;display:block;width:20px}.wysija-thumb span.delete-wrap{background-color:#DFDFDF;background-image:-moz-linear-gradient(center bottom, #bbb, #eee);border:1px solid #CCCCCC;border-radius:2px 2px 2px 2px;box-shadow:0 1px 0 rgba(0,0,0,0.15),0 0 2px 1px #fff inset;height:20px;position:absolute;right:2px;top:2px;margin:5px 3px 0 0;width:20px;display:none}.wysija-thumb span.thumb_url,.wysija-thumb span.url,.wysija-thumb span.width,.wysija-thumb span.height,.wysija-thumb span.identifier{display:none}.wysija-thumb:hover span.delete-wrap{display:block}.wysija-thumb span.delete:hover{background-position:-100px -20px}.clear{clear:both}.tablenav{margin-right:20px}#media-items{overflow:auto}.media-wp-upload #media-items{display:none}.media-browse #media-items{width:100%;height:340px;margin:0 0 10px 0}.media-wp-browse #media-items{width:100%;height:340px;margin:0 0 10px 0}#media-items em{margin:0 0 0 20px}#media-items,.ml-submit{float:left}.ml-submit{margin-top:15px;margin-left:15px}#loader{left:50%;position:relative;top:50%}#overlay{background-color:#FFFFFF;height:100%;opacity:0.8;position:absolute;width:100%;z-index:999;display:none}#flash-upload-ui{padding:10px 25px}.after-file-upload{padding:0 25px}.after-file-upload,.upload-flash-bypass,.howto{display:none}.wysija-thumb .slidetoggle,.wysija-thumb .toggle{display:none}.max-upload-size{margin:10px 0;display:block}
|
css/admin-campaigns-themes.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.swfupload{vertical-align:middle}ul#sidemenu{bottom:-1px;float:none
|
1 |
+
.swfupload{vertical-align:middle}ul#sidemenu{bottom:-1px;float:none;font-weight:normal;left:0;margin:0 5px;overflow:hidden}#loader{left:50%;position:relative;top:50%}#overlay{background-color:#fff;opacity:0.8;width:100%;height:100%;position:fixed;top:0;bottom:0;left:0;right:0;z-index:999;display:none}#flash-upload-ui{padding:10px 25px}.after-file-upload{padding:0 25px}#close-pop-alt{float:right;margin-right:50px;margin-top:10px}.after-file-upload,.upload-flash-bypass,.howto{display:none}#theme-view .preview,#theme-view .infos{float:left}#theme-view .infos{width:300px;margin:0 0 0 20px}#theme-view .preview{background:url(../img/wpspin_light.gif) no-repeat scroll center center transparent}#theme-view .preview img{width:320px;display:block}#theme-view{font-size:14px;height:480px;overflow:auto}#theme-view h2{color:#555555;font-family:Tahoma;font-size:24px;margin:4px 0 0;line-height:1.2em}#theme-view .actions{margin-bottom:10px}div.star{background-color:transparent;border:medium none;height:100%;left:0;letter-spacing:1ex;position:absolute;top:0}.stars{background:url(../img/stars.png) repeat-x scroll left bottom transparent;height:17px;position:relative;width:95px}.stars .star-rating{background:url(../img/stars.png) repeat-x scroll left top transparent;float:left;height:17px;overflow:hidden;text-indent:100%;white-space:nowrap}.my-rating a{height:17px;width:19px;float:left;margin:0;padding:0}.my-rating a.active,.my-rating a:hover,.my-rating a.on{background:url(../img/stars.png) no-repeat left top transparent}.my-rating a.active.off,.my-rating a.off{background:none}div.paragraph{margin:10px 0}.star-holder.my-rate img{cursor:pointer}.star-holder.my-rate div.star:hover{background-color:#DD0000}div.star.select.star-rating{background-color:#FFCC00}#theme-upload{display:none}.avatar{border:2px solid #CCC;float:right;margin:0}#overwrite{margin:0px 10px 0 0}#filter-selection{position:relative;top:3px}.theme-screenshot{padding:0;width:320px;border:1px solid #ccc;position:relative;background-color:#fff;-webkit-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);-moz-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);box-shadow:0 0 5px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1)}.theme-screenshot:before,.theme-screenshot:after{position:absolute;width:40%;height:10px;content:' ';left:12px;bottom:12px;background:transparent;-webkit-transform:skew(-5deg) rotate(-5deg);-moz-transform:skew(-5deg) rotate(-5deg);-ms-transform:skew(-5deg) rotate(-5deg);-o-transform:skew(-5deg) rotate(-5deg);transform:skew(-5deg) rotate(-5deg);-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);-moz-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3);z-index:-1}.theme-screenshot:after{left:auto;right:12px;-webkit-transform:skew(5deg) rotate(5deg);-moz-transform:skew(5deg) rotate(5deg);-ms-transform:skew(5deg) rotate(5deg);-o-transform:skew(5deg) rotate(5deg);transform:skew(5deg) rotate(5deg)}.theme-screenshot img{width:320px}#wj_paginator{float:right;margin-right:10px;font-size:14px}#wj_paginator a{margin:0 1px}#wj_paginator span{font-weight:bold;margin:0 1px}#wj_paginator a.selected{color:#000;text-decoration:none;cursor:default}#themes-list{height:405px;margin:0}.theme{float:left;margin:0px;overflow:hidden;width:152px;margin:25px 8px 0 0}.theme.last{margin-right:0}.theme .thumbnail{height:170px;width:150px;position:relative;border:1px solid #999999;background-color:#000000}.theme img{width:150px;height:170px;position:absolute;z-index:1;top:0px;left:0px}.theme .install{display:none}.theme:hover img{filter:alpha(opacity=25);-moz-opacity:0.25;opacity:0.25}.theme:hover .thumbnail{border:1px solid #2a749f}.theme:hover .install{display:block;position:relative;z-index:100;text-align:center;margin:0px auto;margin-top:80px;width:80px !important}.theme .infos{display:block;width:80px;margin:5px 0 0 0;padding:0;text-align:center;font-size:12px;line-height:1em;color:#999999;text-decoration:none}.theme .infos:hover{color:#21759b;text-decoration:underline}
|
css/admin-campaigns-viewstats.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
#posts-filter{margin-top:40px}#hook_newsletter_top{margin-top:20px}#hook_newsletter_top .left{float:left;width:50%}#hook_newsletter_top .right{float:right}#hook_newsletter_top .actions{width:45%;margin-bottom:20px;padding-left:10px}.action_buttons a:first-child{margin-left:0}.action_buttons{display:block}table.newsletter-stats-block{margin-top:10px}table.newsletter-stats-block td.label{width:25%;font-weight:bold}.wrap .button-secondary2{top:auto !important}.googletrackingcode .action_buttons{padding-left:0}.googletrackingcode{padding-top:10px}.wrap .button-secondary2:first-child{margin-left:0}
|
|
css/admin-campaigns.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#
|
1 |
+
#icon-edit-news{background:url(../img/mail-big.png) no-repeat scroll 0 8px transparent}#TB_window{display:block}.moredetails{display:none}.sending,.scheduled{background-color:#d5f0e6}.autonl.sending{background-color:#D7E6F2}#wysija-campaign .listmissing{background-color:#EFD5D5}#preview-receiver{width:230px;vertical-align:middle;margin:0 5px 0 0}.ml-submit{margin:15px 15px 0 15px}.automatic-nl{display:none}#titlediv .titlebox{font-size:1.7em;background-color:#FFFFFF;border-color:#CCCCCC;line-height:100%;outline:medium none;padding:3px 8px;width:100%}label .description{cursor:auto}.about-wrap .feature-section.three-col div{float:left;margin-right:5%;width:28%}#socials-block div{float:none;margin:5px 5px 2px 0;width:100%}.progress_bar{padding-bottom:10px}.progress_bar .bar{display:block;width:200px;height:22px;float:left;margin-right:10px;background:#eef6fc;border:1px solid #bbbbbb;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;line-height:22px;position:relative}.progress_bar .progress{display:block;background:#69b1e9;height:100%}.progress_bar .percent{height:100%;position:absolute;top:0px;left:10px}#wysija-badge{position:absolute;top:0;right:0;color:#fff;text-shadow:0 1px 0 rgba(0,0,0,0.3);padding-top:91px;height:50px;width:173px;font-weight:bold;font-size:14px;text-align:center;margin:0 -5px;background:url("http://s-plugins.wordpress.org/wysija-newsletters/assets/wysija-badge.png") no-repeat}#review-follow{position:relative;height:177px}#review-follow div{float:left;top:0}#review-follow .review-left{background:url("http://s-plugins.wordpress.org/wysija-newsletters/assets/update_page/save-the-kitten.jpg") no-repeat;height:175px;background-color:#f8f8f8;border-top:1px solid #efefef;border-bottom:1px solid #efefef;padding-right:10px}#review-follow h4{margin:0 !important}#review-follow .review-left.small{width:450px}#review-follow .review-left.medium{width:490px}#review-follow .review-left.large{width:540px}#review-follow .small .description{margin-top:24px}#review-follow .medium .description{margin-top:20px}#review-follow .large .description{margin-top:18px}#review-follow .review-left p{margin-left:20px}#review-follow .review-right{background:url("http://s-plugins.wordpress.org/wysija-newsletters/assets/update_page/arrow_middle.jpg") no-repeat;width:62px;height:175px;background-color:#f8f8f8;border-top:1px solid #efefef;border-bottom:1px solid #efefef}#review-follow .socials{margin-left:30px}#review-follow .follow-left{width:300px;height:175px;background-color:#f8f8f8;border-top:1px solid #efefef;border-bottom:1px solid #efefef}#review-follow .follow-right{background:url("http://s-plugins.wordpress.org/wysija-newsletters/assets/update_page/arrow_right.jpg") no-repeat;width:100px;height:175px}#review-follow .review-left .description{margin-left:146px}#review-follow .link-cat-review{height:140px;left:20px;position:absolute;top:21px;width:120px;outline:medium none}a.ctaupdate,span.ctaupdate{font-size:12px}.pds-links,.pds-totalvotes-outer{display:none !important}#polldaddy_embed_0{width:680px;margin-left:-30px}span.local_time{margin-left:10px}
|
css/admin-config-form_widget_settings.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
|
1 |
+
#widget-settings-form{margin-right:10px}#widget-settings-error{margin-right:10px;padding:10px;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;color:#000;font-weight:normal;background-color:#ffebe8;border:1px solid #c00}.sortable li{margin:0;padding:5px}.sortable li:hover{background-color:#eee}.icon span{display:block;height:20px;width:20px}.handle span{cursor:move;background:url(../img/controls/icons.png) no-repeat -120px 0}.handle.active span,.handle:hover span{background:url(../img/controls/icons.png) no-repeat -120px -20px;cursor:move}.add span{background:url(../img/controls/icons.png) no-repeat -200px 0}.add.active span,.add:hover span{background:url(../img/controls/icons.png) no-repeat -200px -20px}.remove span{background:url(../img/controls/icons.png) no-repeat -100px 0}.remove.active span,.remove:hover span{background:url(../img/controls/icons.png) no-repeat -100px -20px}.widget_text textarea,.widget_html textarea{height:80px;width:300px;resize:vertical}.widget_html input.checkbox{margin:0px 5px 0 2px}.widget_list #lists-available{float:left;padding:0;width:250px}.widget_list .icon.add{float:left}.widget_list #lists-selection label{float:left;margin:0 0 0 5px}.widget_list #lists-selection input{float:left;margin:3px 5px 0px 0}.widget_list #lists-selection li{height:20px;line-height:20px}.widget_list #lists-selection label{width:200px;height:20px;line-height:20px;overflow:hidden}.widget_list #lists-selection .handle,.widget_list #lists-selection .remove{float:right}.widget_list #list-selection-template{display:none}
|
css/admin-config.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
|
1 |
+
#wysija-tabs a{font-size:14px}#wysija-tabs a.tab-premium{background-color:#d7e6f2;font-weight:bold}p.submit{padding:1em 1.4em 1em 0}span.title{font-size:16px;margin:0;color:#000}.choice-under15{float:right;display:block;width:360px}#wysija-settings input[type="checkbox"],#wysija-settings input[type="radio"]{margin-right:6px;vertical-align:baseline}#wysija-settings label input[type="checkbox"],#cron_page_hit_trigger-1{margin-left:0}#wysija-settings .button-secondary{margin-left:6px}#wysija-settings .form-table th{width:300px}#wysija-settings .form-table th.row{border:1px solid #AAAAAA}#warning-msg-frequency{background-color:#FFFFE0;border-color:#E6DB55}#warning-msg-frequency{border-radius:3px 3px 3px 3px;border-style:solid;border-width:1px;margin:5px 15px 2px;padding:0 0.6em}#warning-msg-frequency ul{margin:0}#mainmenu .premium{background:url(../img/ui-bg_glass_premium_1x400.png) repeat-x scroll 50% 50% #e6e6e6;border:1px solid #a9abc3}#mainmenu .premium:hover{background:url(../img/ui-bg_glass_premium_hover_1x400.png) repeat-x scroll 50% 50% #e6e6e6;border:1px solid #9c9eb2}#mainmenu .premium a{font-weight:700;color:#5d5e76}#mainmenu .premium a:hover{color:#4b4d69}#mainmenu .ui-state-active{background:white !important;border:1px solid #d8d9e6}#premium-content{margin:20px 0 0 0}#premium-content h2{color:#4b4d69;font-family:sans-serif;font-size:1.8em;font-weight:200;line-height:1.2em;margin:0}.wysija-premium-wrapper{margin:0 0 20px 0}.wysija-premium-features{font-size:16px;line-height:28px;width:600px;margin:0 10px 0 0;float:left}.wysija-premium-features a{color:#0b6373}.wysija-premium-actions{float:left;width:390px}a.wysija-premium-activate{background-color:#FFB30D;background:-webkit-gradient(linear, left top, left bottom, from(#157baa), to(#145576));background:-webkit-linear-gradient(#157baa, #145576);background:-moz-linear-gradient(center top, #157baa 0%, #145576 100%);background:-moz-gradient(center top, #157baa 0%, #145576 100%);border:1px solid #0B3A50;color:#ffffff;font-family:"Amaranth", Arial, sans-serif;font-style:italic;font-size:18px;font-weight:normal;letter-spacing:1px;text-decoration:none;text-shadow:0 1px 0 #434343;padding:10px 30px;border-radius:7px;-moz-border-radius:7px;-webkit-border-radius:7px;-moz-box-shadow:0px 2px 3px rgba(0,0,0,0.3);-webkit-box-shadow:0px 2px 3px rgba(0,0,0,0.3);text-shadow:0px 2px 1px rgba(0,0,0,0.3);display:inline-block;text-align:center;width:auto}a.wysija-premium-activate:hover,a.wysija-premium-activate:active{text-decoration:none !important;background:#18668E;background:-webkit-gradient(linear, left top, left bottom, from(#157bab), to(#18668e));background:-webkit-linear-gradient(#157bab, #18668e);background:-moz-linear-gradient(center top, #157bab 20%, #18668e 100%);background:-moz-gradient(center top, #157bab 20%, #18668e 100%)}a.wysija-premium-purchase{background-color:#FFB30D;background:-webkit-gradient(linear, left top, left bottom, from(#fecb19), to(#ff9c00));background:-webkit-linear-gradient(#fecb19, #ff9c00);background:-moz-linear-gradient(center top, #fecb19 0%, #ff9c00 100%);background:-moz-gradient(center top, #fecb19 0%, #ff9c00 100%);border:1px solid #ff9c00;color:#ffffff;font-family:"Amaranth", Arial, sans-serif;font-style:italic;font-size:20px;font-weight:normal;letter-spacing:1px;text-decoration:none;text-shadow:0 1px 0 #434343;padding:10px 30px;border-radius:7px;-moz-border-radius:7px;-webkit-border-radius:7px;-moz-box-shadow:0px 2px 3px rgba(0,0,0,0.3);-webkit-box-shadow:0px 2px 3px rgba(0,0,0,0.3);text-shadow:0px 2px 1px rgba(0,0,0,0.3);display:inline-block;text-align:center;width:auto}a.wysija-premium-purchase:hover,a.wysija-premium-purchase:active{text-decoration:none !important;background:#ffd547;background:-webkit-gradient(linear, left top, left bottom, from(#ffd648), to(#ffbe38));background:-webkit-linear-gradient(#ffd648, #ffbe38);background:-moz-linear-gradient(center top, #ffd648 20%, #ffbe38 100%);background:-moz-gradient(center top, #ffd648 20%, #ffbe38 100%)}a.wysija-premium-purchase,a.wysija-premium-activate{margin:10px 0}#premium-content .left-part{float:left}#premium-content .bullet-hold{width:600px;margin:15px 30px 15px 5px}#premium-content div.feat-thumb{background:url(../img/rocket-small.png) no-repeat scroll 0 0 transparent;float:left;height:65px;margin-right:10px;width:30px;margin-top:6px}#premium-content .description{float:left;width:550px}#premium-content div.description h3{margin:5px 0 4px 0;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;font-size:20px;font-weight:normal;color:black}#premium-content div.description p{margin:0}#wysija-settings .form-table th.rolestitle{padding:3px 3px 3px 0;text-align:left;vertical-align:middle;width:220px}#wysija-settings .form-table th.rolestable{padding:3px;text-align:center;vertical-align:middle;width:90px;word-wrap:break-word}#wysija-settings .form-table td.rolestable{padding:6px 0;text-align:center}#wysija-settings .form-table td.title{padding:2px 0 2px 5px;text-align:left;vertical-align:middle}#wysija-settings .form-table tr.alternate{background-color:#ececec}#wysija-settings #bounce .intro{margin:10px 0 20px 10px}#wysija-settings #bounce #bounce-process-auto,#wysija-settings #bounce #bounce-connector{margin-left:0 !important}#wysija-settings #sendingmethod .methods{border-bottom:1px solid #000}#wysija-settings #sendingmethod .choice-sending-method-site{border-top:1px solid #cccccc}#wysija-settings #sendingmethod .choice-sending-method-site th,#wysija-settings #sendingmethod .choice-sending-method-site td{padding-top:18px}label.dkim{margin-right:20px}.cronleft,.cronright{float:left}.cronleft{width:20px;margin-right:10px}#cron_manual_linkname p{margin:0}.labelcheck{float:left;margin-right:15px}.linknamecboxes{float:left;width:500px}#smtp-rest-label{display:none;margin-left:10px}#wysija-settings #multisite #form-ms-config th{width:455px}#wysija-settings #multisite #ms-sendingmethod th{width:300px}#wysija-settings #multisite .intro{margin:0 0 0 10px}#wysija-settings #sendingmethod .methods input,#wysija-settings #multisite .methods input{margin:0 5px 0 0;float:left}#wysija-settings #sendingmethod .methods h3,#wysija-settings #multisite .methods p.title{float:left;margin:0 !important}#wysija-settings #multisite .choice-one-for-all{display:none}#wysija-settings a.view_all{font-style:italic}#wysija-settings .cronright label{display:block;margin-bottom:10px}#wysija-settings .cronright label span{margin-left:36px}span.icon{display:block;height:20px;width:20px;cursor:pointer}.geeky-option a,.geeky-option span{float:left}.show-more-geeky-options span{background:url(../img/controls/icons.png) no-repeat -200px 0}.show-more-geeky-options:hover span{background:url(../img/controls/icons.png) no-repeat -200px -20px}.hide-geeky-options span{background:url(../img/controls/icons.png) no-repeat -220px 0}.hide-geeky-options:hover span{background:url(../img/controls/icons.png) no-repeat -220px -20px}@-webkit-keyframes opacity{0%{opacity:1}100%{opacity:0}}@-moz-keyframes opacity{0%{opacity:1}100%{opacity:0}}.wysija-button-loading{text-align:center;margin:100px 0 0 0}.wysija-button-loading span{-webkit-animation-name:opacity;-webkit-animation-duration:1s;-webkit-animation-iteration-count:infinite;-moz-animation-name:opacity;-moz-animation-duration:1s;-moz-animation-iteration-count:infinite}.wysija-button-loading span:nth-child(2){-webkit-animation-delay:100ms;-moz-animation-delay:100ms}.wysija-button-loading span:nth-child(3){-webkit-animation-delay:300ms;-moz-animation-delay:300ms}
|
css/admin-dashicons.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
@font-face{font-family:'mailpoet-icon';src:url("../font/icon-email.eot?doyy92");src:url("../font/icon-email.eot?#iefixdoyy92") format("embedded-opentype"),url("../font/icon-email.woff?doyy92") format("woff"),url("../font/icon-email.ttf?doyy92") format("truetype"),url("../font/icon-email.svg?doyy92#mailpoet-icon") format("svg");font-weight:normal;font-style:normal}.mp-menu-icon-bg .menu-top.toplevel_page_wysija_campaigns .wp-menu-image{background:transparent url("../img/mail.png") no-repeat center center}.mp-menu-icon-bg .menu-top.toplevel_page_wysija_campaigns .wp-menu-image:before{content:""}.mp-menu-icon-font .menu-top.toplevel_page_wysija_campaigns .wp-menu-image:before{font:normal 18px/1 "mailpoet-icon" !important;speak:none;color:#999;padding:8px 0;height:36px;width:20px;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-moz-transition:all .1s ease-in-out;-webkit-transition:all .1s ease-in-out;transition:all .1s ease-in-out}.menu-top.toplevel_page_wysija_campaigns .wp-menu-image:before{content:"\f466"}
|
|
css/admin-global.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.clearfix{display:inline-table}* html .clearfix{height:1%}.clearfix{display:block}.
|
1 |
+
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.clearfix{display:inline-table}* html .clearfix{height:1%}.clearfix{display:block}.wysija-version{margin:0 20px 0 165px;padding-bottom:45px}.wysija-footer h2{color:#21759B;cursor:pointer}.wysija-footer h2:hover{text-decoration:underline}.wysija-version{font-size:12px;color:#777777}.wysija-version .social-foot div{float:left;margin-right:10px}.wysija-version .version{float:left}.wysija-version .help{float:left;margin-left:20px}.wysija-version .social-foot .textsocial{margin-left:8px;margin-top:3px;padding-top:0}.wysija-version .social-foot{clear:both;display:inline-block}.wysija-version .version{float:left;margin-bottom:5px}#upperfoot{display:block;float:none}#wysija-app .form-table td{vertical-align:top}#submitexport label input[type="checkbox"]{margin-left:0px !important}
|
css/admin-premium.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
#mainmenu .premium{background:url(../img/ui-bg_glass_premium_1x400.png) repeat-x scroll 50% 50% #e6e6e6;border:1px solid #a9abc3}#mainmenu .premium:hover{background:url(../img/ui-bg_glass_premium_hover_1x400.png) repeat-x scroll 50% 50% #e6e6e6;border:1px solid #9c9eb2}#mainmenu .premium a{font-weight:700;color:#5d5e76}#mainmenu .premium a:hover{color:#4b4d69}#mainmenu .ui-state-active{background:white !important;border:1px solid #d8d9e6}.mpoet-page h2{color:#4b4d69;font-size:1.8em;font-weight:200;line-height:1.2em;margin:0}.wysija-premium-wrapper{margin:0 0 20px 0}.wysija-premium-actions{position:fixed;width:1028px;bottom:0;background-color:#eee;border-top:1px solid #ccc;border-left:1px solid #ccc;border-right:1px solid #ccc;-webkit-border-top-left-radius:7px;-webkit-border-top-right-radius:7px;-moz-border-radius-topleft:7px;-moz-border-radius-topright:7px;border-top-left-radius:7px;border-top-right-radius:7px;z-index:999;padding:10px 10px 0}.wysija-premium-actions .licence{margin-right:15px}.wysija-premium-actions p{margin:0px 0px 10px 0;text-align:center}.wysija-premium-actions span.conditions{font-size:12px;margin-right:15px}.wysija-premium-actions .button-primary.wysija-premium-activate{float:none}.wysija-premium-actions-kim{position:fixed;width:1066px;bottom:0;background-color:#eee;border-top:1px solid #ccc;border-left:1px solid #ccc;border-right:1px solid #ccc;z-index:999;margin-left:-30px;padding:10px 10px;text-align:center}.mpoet-page .feature-section.three-col>div{width:29%}.mpoet-page .three-col img{margin:0.5em 0;max-width:100%}a.wysija-premium-purchase{background-color:#FFB30D !important;background:-webkit-gradient(linear, left top, left bottom, from(#fecb19), to(#ff9c00)) !important;background:-webkit-linear-gradient(#fecb19, #ff9c00) !important;background:-moz-linear-gradient(center top, #fecb19 0%, #ff9c00 100%) !important;background:-moz-gradient(center top, #fecb19 0%, #ff9c00 100%) !important;border:1px solid #ff9c00 !important;color:#ffffff;font-family:"Amaranth", Arial, sans-serif;font-style:italic;font-size:15px !important;font-weight:normal;letter-spacing:1px;text-decoration:none;text-shadow:0 1px 0 #434343;padding:10px 30px;border-radius:7px;-moz-border-radius:7px;-webkit-border-radius:7px;box-shadow:none !important;text-shadow:0px 2px 1px rgba(0,0,0,0.3) !important;display:inline-block;text-align:center;width:auto}a.wysija-premium-purchase:hover{box-shadow:none !important}a.wysija-premium-purchase:hover,a.wysija-premium-purchase:active{text-decoration:none !important;background:#ffd547;background:-webkit-gradient(linear, left top, left bottom, from(#ffd648), to(#ffbe38));background:-webkit-linear-gradient(#ffd648, #ffbe38);background:-moz-linear-gradient(center top, #ffd648 20%, #ffbe38 100%);background:-moz-gradient(center top, #ffd648 20%, #ffbe38 100%)}a.wysija-premium-purchase,a.wysija-premium-activate{margin:10px 0}.mpoet-page .bullet-hold{width:600px;margin:15px 30px 15px 5px}.mpoet-page div.description h3{margin:5px 0 4px 0;font-family:"HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",sans-serif;font-size:20px;font-weight:normal;color:black}.mpoet-page div.description p{margin:0}#prices_table{margin-top:55px}#prices_table .one-third{display:block;float:left;width:284px}#prices_table #prices_names{height:63px}#prices_table #prices_names .one-third{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;background:none repeat-x scroll left top rgba(0,0,0,0);border-color:#414141 -moz-use-text-color #414141 #414141;border-image:none;border-style:solid none solid solid;border-width:1px 0 1px 1px;height:61px;text-align:center}#prices_table #prices_names{display:block}#prices_table #prices_names h3{color:#FFF !important;line-height:1em !important}#prices_table #prices_names .blogger{background-color:#0074A2}#prices_table #prices_names .freelance{background-color:#026187}#prices_table #prices_names .agency{background-color:#014661;border-right:1px solid #414141}#prices_table #prices_cost{height:177px}#prices_table #prices_cost p{margin:0}#prices_table #prices_cost .one-third{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;border-color:-moz-use-text-color -moz-use-text-color #849A97 #849A97;border-image:none;border-style:none none solid solid;border-width:0 0 1px 1px;font-family:'Amaranth',Arial,sans-serif;height:176px}#prices_table #prices_cost .agency{border-right:1px solid #849A97}#prices_table #prices_cost span{display:block}#prices_table #prices_cost .dollars{font-size:80px;height:80px;line-height:normal;padding:20px 55px 0;text-align:center}#prices_table #prices_cost .per_year{font-size:18px;padding:0 60px;text-align:right}#prices_table #prices_cost .blogger .dollars{padding:20px 75px 0}#prices_table #prices_cost .blogger .per_year{padding:0 80px}#prices_table #prices_description{height:62px}#prices_table #prices_description .one-third{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;border-color:-moz-use-text-color -moz-use-text-color #849A97 #849A97;border-image:none;border-style:none none solid solid;border-width:0 0 1px 1px;font-size:22px;height:61px}#prices_table #prices_description .agency{border-right:1px solid #849A97}#prices_table #prices_description .agency p{display:block;margin:-15px 62px 0 0;text-align:right;font-size:.5em}#prices_table #prices_description span{display:block;padding:17px 0;text-align:center}#prices_table #prices_content{height:158px}#prices_table #prices_content .prices_content{-moz-border-bottom-colors:none;-moz-border-left-colors:none;-moz-border-right-colors:none;-moz-border-top-colors:none;border-color:-moz-use-text-color #849A97 #849A97;border-image:none;border-right:1px solid #849A97;border-style:none solid solid;border-width:0 1px 1px;color:#414141;font-size:17px;padding:16px 0}#prices_table #prices_content .prices_content span{display:block;padding:2px 0;text-align:center}a.buy-button{background:none repeat scroll 0 0 #2EA2CC;border-color:#0074A2;box-shadow:0 1px 0 rgba(120,200,230,0.5) inset,0 1px 0 rgba(0,0,0,0.15);color:#FFFFFF;-moz-box-sizing:border-box;border-radius:3px;border-style:solid;border-width:1px;cursor:pointer;display:inline-block;font-size:20px;margin-top:20px;margin-bottom:60px;padding:7px 10px 7px;text-decoration:none;white-space:nowrap}a.buy-button:hover{color:#ecf3fe}.mpoet-page h1{font-size:34px}#wysija-app .mpoet-page h2{font-size:25px}.mpoet-page h1,.mpoet-page h2,.mpoet-page h3,.mpoet-page h4{color:#626262;font-weight:bold}.mpoet-page h3{margin-top:5px;line-height:24px}.mpoet-page .three-col .argument-cta{display:table;margin-top:5px}#premium-content-b .pick-licence{margin-bottom:15px}.mpoet-page hr{margin-bottom:20px}#premium-content-b .price{font-weight:bold}#footer-upgrade,#footer-left,#wpfooter .alignright,.wysija-footer{display:none}.about-wrap div.updated,.about-wrap div.error{display:block !important}#wysija-app .about-wrap .feature-section{margin-top:20px}
|
|
css/admin-statistics.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
.stats_date_filter{padding-top:10px}.statistic-title{clear:both;margin-top:5px}.cl{clear:both}#hook_stats .container{clear:both;padding-top:1px;margin-top:20px}#stats-filter .reset{background:none;border:none;cursor:pointer}#stats-filter .reset:hover{text-decoration:underline}.custom_date{margin-right:10px}.spinner{float:left !important}.hook{margin-top:10px;clear:both}.container-top-links .link_column{width:20%}.container-top-links .click_column{width:6%}.container .check-column{width:2.5em}.container-top-subscribers table th.subscriber{width:30%}.container-top-subscribers table th.clicks{width:7%}.container-top-subscribers table th.opens{width:7%}.container-top-subscribers table th.lists{width:41%}.container-top-subscribers table th.date{width:15%}.container-top-links a.newsletter{display:block;padding-top:5px}.container-top-newsletters th.newsletter{width:19%}.container-top-newsletters th.sent{width:8%}.container-top-newsletters th.opens{width:8%}.container-top-newsletters th.clicks{width:7%}.container-top-newsletters th.unsubscribes{width:11%}.container-top-newsletters th.rates{width:18%}.container-top-newsletters th.sent_at{width:12%}.container-top-newsletters th.lists{width:14%}.container-top-newsletters td a.stats{display:none}.container-top-newsletters td.newsletter:hover a.stats{display:block}.container-top-subscribers th.desc:hover span.sorting-indicator,.container-top-newsletters th.desc:hover span.sorting-indicator{background-position:-7px 0}.stats_feedback{font-weight:bold;margin-top:20px;clear:both}.tip{font-style:italic}.stats_subscriptions-container .tip{margin-left:70px}.container-top-newsletters th.desc:hover span.sorting-indicator:before,.container-top-subscribers th.desc:hover span.sorting-indicator:before,.container-top-newsletters th.asc span.sorting-indicator:before,.container-top-subscribers th.asc span.sorting-indicator:before{content:'\f140'}
|
|
css/admin-subscribers-addlist.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
#wysija-edit .form-table th{width:200px}
|
|
css/admin-subscribers-edit.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
#wysija-edit{padding-bottom:20px}#hook_subscriber_left{width:50%}#hook_subscriber_right{width:50%}.hook-column .submit{text-align:center}#hook_subscriber_bottom{clear:both;padding-top:1px}.container{clear:both;margin-top:30px}.form-table th label{float:right;white-space:nowrap}.labelcheck{float:left;margin-right:15px}#wysija-edit input[type="checkbox"]{margin-right:6px;vertical-align:baseline}#wysija-edit .form-table th{width:60px}.container-stats-subscribers_std table th.newsletter{width:60%}.container-stats-subscribers_std table th.link{width:20%}.container-stats-subscribers_std table th.click{width:5%}.container-stats-subscribers_std .widefat .check-column{width:2.4em}.container-stats-subscribers_std .widefat th.date{width:15%}
|
|
css/admin-subscribers-export.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
#wysija-app table td label{margin-right:15px}#wysija-app table td input[type="radio"]{margin-right:5px}
|
|
css/admin-subscribers-exportlist.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
#wysija-app table td label{margin-right:15px}#wysija-app table td input[type="radio"]{margin-right:5px}
|
|
css/admin-subscribers-importmatch.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
#wysija-edit .widefat td{min-width:
|
1 |
+
#wysija-edit .widefat td{min-width:190px}#wysija-edit .widefat{width:auto}#blocknewlist{width:175px}
|
css/admin-subscribers.css
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
tr.submit_row>td{padding-left:0}.list .check-column{width:10px}#wysija-app .list .column-date{width:70px}#wysija-app .list .column-list-names{width:100px}
|
|
css/admin-widget.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.wysija-widget-form .lists-block input[type="checkbox"],.wysija-widget-form input[type="radio"]{margin:0 4px 0 0}.wysija-widget-form .labelcheck label{margin:0 4px 0 0}.wysija-widget-form .lists-block{margin:0 3px 0 6px;clear:both;max-height:116px;overflow:auto;float:left;margin:0 10px 0 0}.wysija-widget-form .labelcheck{margin:0 0 5px 0;float:left;margin-left:5px}.wysija-widget-form .divblocks{margin:10px 0
|
1 |
+
.wysija-widget-form .lists-block input[type="checkbox"],.wysija-widget-form input[type="radio"]{margin:0 4px 0 0}.wysija-widget-form .labelcheck label{margin:0 4px 0 0}.wysija-widget-form .lists-block{margin:0 3px 0 6px;clear:both;max-height:116px;overflow:auto;float:left;margin:0 10px 0 0}.wysija-widget-form .labelcheck{margin:0 0 5px 0;float:left;margin-left:5px}.wysija-widget-form .divblocks{margin:10px 0 0 0}
|
css/admin.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.clearfix{display:inline-table}* html .clearfix{height:1%}.clearfix{display:block}#wysija-app .column-date{width:125px}#wysija-app .column-clic,#wysija-app .column-opened,#wysija-app .column-emails{width:80px}#wysija-app .column-list-names{width:120px}#wysija-app .menuslinks{margin:20px 0}#statscontainer{height:200px;width:400px}#wysistats1{width:400px}#wysistats1 h3{text-align:center}#wysistats2,#wysistats3{width:200px;padding:30px 0 0 20px}#wysistats3{height:200px;overflow:auto}#wysistats2 ul li,#wysistats .title{font-weight:bold;font-size:14px;margin-top:0}#wysistats3 ol li{font-style:italic;font-size:10px;color:#444}#wysistats3 ol li em{font-size:11px;font-weight:bold}th.sorted,th.sortable{cursor:pointer}div#wysija-app .xdetailed-updated li,div#wysija-app .xdetailed-errors li,div#wysija-app .updated li,div#wysija-app .error li{margin:6px 0}.xdetailed-errors,.xdetailed-updated{border-radius:3px 3px 3px 3px;border-style:solid;border-width:1px;margin:5px 15px 2px;padding:0 0.6em}.xdetailed-updated{background-color:#FFFFE0;border-color:#E6DB55;color:#000;display:none}.xdetailed-errors{background-color:#FFEBE8;border-color:#888888;color:#000;display:none}label input[type="checkbox"],label input[type="radio"]{margin:0 5px 0 15px}label:first-child input[type="checkbox"],label:first-child input[type="radio"]{margin-left:0}label.title{font-weight:bold;font-size:14px}.wrap .button-secondary2{background-color:#6697BF;font-family:sans-serif;font-size:12px;color:#FFFFFF;text-decoration:none;text-shadow:0 1px 0 #777777;box-shadow:1px 1px 0 #AAAAAA;margin-left:4px;padding:3px 8px;position:relative;top:-3px;border-radius:3px;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px}.wrap .button-secondary2:hover,.wrap .wcurrent{background-color:#1C73B5}.wrap #theme-view .button-secondary2{top:2px}.dots{margin:0 4px}#wysija-pagination{text-align:center}.tablenav .tablenav-pages a,.tablenav-pages span.current{margin:0 2px}.total-pages{padding:0px 3px}input.searchbox{width:225px}.wysija-premium img{display:none}#TB_load,#TB_window,#TB_overlay,.ui-dialog{z-index:100000 !important}.ui-widget-overlay{z-index:9998 !important;background-image:none !important}p.label{font-size:13px}.wysija_popup_content{padding:10px 20px 0 20px}.wysija_popup_content h3{margin:0 0 20px 0}a.linkignore{color:#BC0B0B}a.linkignore:hover,a.submitsynch:hover{color:#FF0000}a.submitsynch{color:#52aa05}body{min-width:0 !important}.warning-msg{background-color:#FFFFE0;border-color:#E6DB55}.warning-msg{border-radius:3px 3px 3px 3px;border-style:solid;border-width:1px;margin:5px 15px 2px;padding:0 0.6em}.warning-msg ul{margin:0}span.warning-msg{padding:7px}.about-wrap h3{padding-top:0px}.about-text{margin-bottom:1em;margin-top:0;min-height:20px}.wysija-unsubscribed-on{color:#bbb}.clear_select_all,.force_to_select_all_link{text-align:center}.
|
1 |
+
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.clearfix{display:inline-table}* html .clearfix{height:1%}.clearfix{display:block}#wysija-app .column-date{width:125px}#wysija-app .column-clic,#wysija-app .column-opened,#wysija-app .column-emails{width:80px}#wysija-app .column-list-names{width:120px}#wysija-app .menuslinks{margin:20px 0}#statscontainer{height:200px;width:400px}#wysistats1{width:400px}#wysistats1 h3{text-align:center}#wysistats2,#wysistats3{width:200px;padding:30px 0 0 20px}#wysistats3{height:200px;overflow:auto}.left{float:left}#wysistats2 ul li,#wysistats .title{font-weight:bold;font-size:14px;margin-top:0}#wysistats3 ol li{font-style:italic;font-size:10px;color:#444}#wysistats3 ol li em{font-size:11px;font-weight:bold}th.sorted,th.sortable{cursor:pointer}div#wysija-app .xdetailed-updated li,div#wysija-app .xdetailed-errors li,div#wysija-app .updated li,div#wysija-app .error li{margin:6px 0}.xdetailed-errors,.xdetailed-updated{border-radius:3px 3px 3px 3px;border-style:solid;border-width:1px;margin:5px 15px 2px;padding:0 0.6em}.xdetailed-updated{background-color:#FFFFE0;border-color:#E6DB55;color:#000;font-weight:bold;display:none}.xdetailed-errors{background-color:#FFEBE8;border-color:#888888;color:#000;display:none}label input[type="checkbox"],label input[type="radio"]{margin:0 5px 0 15px}label:first-child input[type="checkbox"],label:first-child input[type="radio"]{margin-left:0}label.title{font-weight:bold;font-size:14px}.wrap .button-secondary2{background-color:#6697BF;font-family:sans-serif;font-size:12px;color:#FFFFFF;text-decoration:none;text-shadow:0 1px 0 #777777;box-shadow:1px 1px 0 #AAAAAA;margin-left:4px;padding:3px 8px;position:relative;top:-3px;border-radius:3px;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px}.wrap .button-secondary2:hover,.wrap .wcurrent{background-color:#1C73B5}.wrap #theme-view .button-secondary2{top:2px}.dots{margin:0 4px}#wysija-pagination{text-align:center}.tablenav .tablenav-pages a,.tablenav-pages span.current{margin:0 2px}.total-pages{padding:0px 3px}input.searchbox{width:225px}.wysija-premium img{display:none}#TB_load,#TB_window,#TB_overlay,.ui-dialog{z-index:100000 !important}.ui-widget-overlay{z-index:9998 !important;background-image:none !important}p.label{font-size:13px}.wysija_popup_content{padding:10px 20px 0 20px}.wysija_popup_content h3{margin:0 0 20px 0}a.linkignore{color:#BC0B0B}a.linkignore:hover,a.submitsynch:hover{color:#FF0000}a.submitsynch{color:#52aa05}body{min-width:0 !important}.warning-msg{background-color:#FFFFE0;border-color:#E6DB55}.warning-msg{border-radius:3px 3px 3px 3px;border-style:solid;border-width:1px;margin:5px 15px 2px;padding:0 0.6em}.warning-msg ul{margin:0}span.warning-msg{padding:7px}.about-wrap h3{padding-top:0px}.about-text{margin-bottom:1em;margin-top:0;min-height:20px}.wysija-unsubscribed-on{color:#bbb}.clear_select_all,.force_to_select_all_link{text-align:center}.clear_select_all a:hover,.force_to_select_all_link a:hover{text-decoration:underline;cursor:pointer !important}#wysija-app .updated,#wysija-app .error{display:none}#wysija-app .notice-msg{background-color:#FFFFE0;border-color:#E6DB55}#wysija-app .error-msg{background-color:#FFEBE8;border-color:#CC0000}#wysija-app .wysija-msg .notice-msg,#wysija-app .wysija-msg .error-msg{border-radius:3px 3px 3px 3px;border-style:solid;border-width:1px;margin:5px 0 15px;padding:0 0.6em}
|
css/adminPopup.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
html{overflow:hidden;overflow-y:auto;height:auto !important}html.wp-toolbar{padding:0 !important}
|
1 |
+
html{overflow:hidden;overflow-y:auto;height:auto !important}html.wp-toolbar{padding:0 !important}.popup_content{margin:10px 0 0 10px}.popup_content.addlink{width:300px}.popup_content.articles{width:600px}.popup_content.dividers{width:620px}.popup_content.autopost{width:625px}.popup_content.themes{width:800px}.popup_content.bookmarks{width:620px}.popup_content.media-browse,.popup_content.media-wp-browse,.popup_content.media-wp-upload{width:715px}.popup_content.widget_text,.popup_content.widget_html{width:300px}.popup_content.widget_list{width:310px}p.align-right{text-align:right;margin-bottom:0 !important}div.updated,div.error{margin:10px !important}
|
css/jquery/ui/themes/base/images/animated-overlay.gif
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-bg_flat_75_ffffff_40x100.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-bg_glass_55_fbf9ee_1x400.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-bg_glass_65_ffffff_1x400.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-bg_glass_75_dadada_1x400.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-bg_glass_75_e6e6e6_1x400.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-bg_glass_95_fef1ec_1x400.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-bg_highlight-soft_75_cccccc_1x100.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-icons_222222_256x240.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-icons_2e83ff_256x240.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-icons_454545_256x240.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-icons_888888_256x240.png
DELETED
Binary file
|
css/jquery/ui/themes/base/images/ui-icons_cd0a0a_256x240.png
DELETED
Binary file
|
css/jquery/ui/themes/base/jquery.ui.core.min.css
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
/*! jQuery UI - v1.10.3 - 2013-05-03
|
2 |
-
* http://jqueryui.com
|
3 |
-
* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
|
4 |
-
|
5 |
-
.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-clearfix{min-height:0}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important}.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}
|
|
|
|
|
|
|
|
|
|
css/jquery/ui/themes/base/jquery.ui.datepicker.min.css
DELETED
@@ -1,5 +0,0 @@
|
|
1 |
-
/*! jQuery UI - v1.10.3 - 2013-05-03
|
2 |
-
* http://jqueryui.com
|
3 |
-
* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
|
4 |
-
|
5 |
-
.ui-datepicker{width:17em;padding:.2em .2em 0;display:none}.ui-datepicker .ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker .ui-datepicker-prev,.ui-datepicker .ui-datepicker-next{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-datepicker-next-hover{top:1px}.ui-datepicker .ui-datepicker-prev{left:2px}.ui-datepicker .ui-datepicker-next{right:2px}.ui-datepicker .ui-datepicker-prev-hover{left:1px}.ui-datepicker .ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-prev span,.ui-datepicker .ui-datepicker-next span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker .ui-datepicker-title{margin:0 2.3em;line-height:1.8em;text-align:center}.ui-datepicker .ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker select.ui-datepicker-month-year{width:100%}.ui-datepicker select.ui-datepicker-month,.ui-datepicker select.ui-datepicker-year{width:49%}.ui-datepicker table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0 .4em}.ui-datepicker th{padding:.7em .3em;text-align:center;font-weight:700;border:0}.ui-datepicker td{border:0;padding:1px}.ui-datepicker td span,.ui-datepicker td a{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker .ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0 .2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker .ui-datepicker-buttonpane button{float:right;margin:.5em .2em .4em;cursor:pointer;padding:.2em .6em .3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi .ui-datepicker-group{float:left}.ui-datepicker-multi .ui-datepicker-group table{width:95%;margin:0 auto .4em}.ui-datepicker-multi-2 .ui-datepicker-group{width:50%}.ui-datepicker-multi-3 .ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4 .ui-datepicker-group{width:25%}.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header{border-left-width:0}.ui-datepicker-multi .ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl .ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl .ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl .ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl .ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl .ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl .ui-datepicker-buttonpane button{float:left}.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl .ui-datepicker-group{float:right}.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header{border-right-width:0;border-left-width:1px}
|
|
|
|
|
|
|
|
|
|
css/rtl.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
body{direction:rtl;unicode-bidi:embed}input#url{direction:ltr}.xdetailed-errors,.xdetailed-updated{margin:2px 15px 5px}.wysija-footer,.wysija-version{margin:0 165px 0 20px}label input[type="checkbox"],label input[type="radio"]{margin:0 15px 0 5px}
|
1 |
+
body{direction:rtl;unicode-bidi:embed}input#url{direction:ltr}.wp-core-ui .button,.wp-core-ui .button-primary,.wp-core-ui .button-secondary{float:right;margin-left:6px;padding:0 3px}.xdetailed-errors,.xdetailed-updated{margin:2px 15px 5px}.wysija-footer,.wysija-version{margin:0 165px 0 20px}label input[type="checkbox"],label input[type="radio"]{margin:0 15px 0 5px}#review-follow div{float:right}#wysija-badge{left:0;right:auto}.about-wrap .feature-section.three-col div{float:right}.dividers ul{margin:0 30px 20px 0;overflow-x:auto;overflow-y:auto;width:620px}.cpt-type{left:0;right:auto;border-right:1px solid #CCCCCC;border-left:none}.wysija-footer,.wysija-version{margin:0 165px 0 20px}.wysija-version .social-foot{float:right}body.rtl #wysija_wrapper{right:0 !important}#wysija_popup_title h3{float:right;margin-right:10px}#wysija_popup_close{float:left;margin-left:10px}#wysija_toolbar{right:657px}.wj_images li,.wj_themes li{float:right}.wj_images #wj_images_preview,.wj_themes #wj_themes_preview{left:295px;right:auto}.wj_content a.wysija_item,.wysija_widget{padding:0 10px 0 0}.wj_styles form label{margin:0 3px 0 0}.wj_styles #aUnderlineInput{margin-right:10px !important}.wysija_item_settings{left:15px;right:auto}#wysija_toggle_images{left:5px;right:auto}#review-follow .review-left.large{float:right}#review-follow .review-left{background-position:100% 0}#review-follow div{float:right}#review-follow .review-left .description{margin-right:146px}#review-follow .review-right{background-image:url("../img/arrow_middle_rtl.jpg");background-position:100% 0}#review-follow .follow-right{background-image:url("../img/arrow_right_rtl.jpg");background-position:100% 0}#wysija-settings input[type="checkbox"],#wysija-settings input[type="radio"],#wysija-settings label input[type="checkbox"]{margin-left:6px}label:first-child input[type="checkbox"],label:first-child input[type="radio"],label input[type="checkbox"],label input[type="radio"]{margin:0 15px 0 5px}.linknamecboxes,.labelcheck{float:right}#premium-content div.feat-thumb{background-image:url("../img/rocket-small-rtl.png");background-position:100% 0;float:right}#wysija-settings .form-table th.rolestitle{text-align:right}.cronleft{float:right;margin:0 0 0 10px}.popup_content.autopost{width:auto}.popup_content{margin:10px 20px 0 0}#wysija-settings #sendingmethod .methods h3,#wysija-settings #multisite .methods p.title{float:right}#wysija-settings #sendingmethod .methods input,#wysija-settings #multisite .methods input{float:right;margin:0 0 0 5px}p.clearfix input,p.clearfix select{float:right}label.radio input{margin:0 0 0 5px}h2.title span,h2.title form{float:right;margin-left:5px;margin-right:0px}#wysija_form_toolbar{position:absolute;width:295px;right:670px !important}#wysija_form_toolbar a.wysija_form_item,.wysija_form_widget{padding-right:7px}
|
css/select2/select2.css
DELETED
@@ -1,615 +0,0 @@
|
|
1 |
-
/*
|
2 |
-
Version: 3.4.5 Timestamp: Mon Nov 4 08:22:42 PST 2013
|
3 |
-
*/
|
4 |
-
.select2-container {
|
5 |
-
margin: 0;
|
6 |
-
position: relative;
|
7 |
-
display: inline-block;
|
8 |
-
/* inline-block for ie7 */
|
9 |
-
zoom: 1;
|
10 |
-
*display: inline;
|
11 |
-
vertical-align: middle;
|
12 |
-
}
|
13 |
-
|
14 |
-
.select2-container,
|
15 |
-
.select2-drop,
|
16 |
-
.select2-search,
|
17 |
-
.select2-search input {
|
18 |
-
/*
|
19 |
-
Force border-box so that % widths fit the parent
|
20 |
-
container without overlap because of margin/padding.
|
21 |
-
|
22 |
-
More Info : http://www.quirksmode.org/css/box.html
|
23 |
-
*/
|
24 |
-
-webkit-box-sizing: border-box; /* webkit */
|
25 |
-
-moz-box-sizing: border-box; /* firefox */
|
26 |
-
box-sizing: border-box; /* css3 */
|
27 |
-
}
|
28 |
-
|
29 |
-
.select2-container .select2-choice {
|
30 |
-
display: block;
|
31 |
-
height: 26px;
|
32 |
-
padding: 0 0 0 8px;
|
33 |
-
overflow: hidden;
|
34 |
-
position: relative;
|
35 |
-
|
36 |
-
border: 1px solid #aaa;
|
37 |
-
white-space: nowrap;
|
38 |
-
line-height: 26px;
|
39 |
-
color: #444;
|
40 |
-
text-decoration: none;
|
41 |
-
|
42 |
-
border-radius: 4px;
|
43 |
-
|
44 |
-
background-clip: padding-box;
|
45 |
-
|
46 |
-
-webkit-touch-callout: none;
|
47 |
-
-webkit-user-select: none;
|
48 |
-
-moz-user-select: none;
|
49 |
-
-ms-user-select: none;
|
50 |
-
user-select: none;
|
51 |
-
|
52 |
-
background-color: #fff;
|
53 |
-
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.5, #fff));
|
54 |
-
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
55 |
-
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 50%);
|
56 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#eeeeee', GradientType = 0);
|
57 |
-
background-image: linear-gradient(top, #fff 0%, #eee 50%);
|
58 |
-
}
|
59 |
-
|
60 |
-
.select2-container.select2-drop-above .select2-choice {
|
61 |
-
border-bottom-color: #aaa;
|
62 |
-
|
63 |
-
border-radius: 0 0 4px 4px;
|
64 |
-
|
65 |
-
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #eee), color-stop(0.9, #fff));
|
66 |
-
background-image: -webkit-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
67 |
-
background-image: -moz-linear-gradient(center bottom, #eee 0%, #fff 90%);
|
68 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#eeeeee', GradientType=0);
|
69 |
-
background-image: linear-gradient(top, #eee 0%, #fff 90%);
|
70 |
-
}
|
71 |
-
|
72 |
-
.select2-container.select2-allowclear .select2-choice .select2-chosen {
|
73 |
-
margin-right: 42px;
|
74 |
-
}
|
75 |
-
|
76 |
-
.select2-container .select2-choice > .select2-chosen {
|
77 |
-
margin-right: 26px;
|
78 |
-
display: block;
|
79 |
-
overflow: hidden;
|
80 |
-
|
81 |
-
white-space: nowrap;
|
82 |
-
|
83 |
-
text-overflow: ellipsis;
|
84 |
-
}
|
85 |
-
|
86 |
-
.select2-container .select2-choice abbr {
|
87 |
-
display: none;
|
88 |
-
width: 12px;
|
89 |
-
height: 12px;
|
90 |
-
position: absolute;
|
91 |
-
right: 24px;
|
92 |
-
top: 8px;
|
93 |
-
|
94 |
-
font-size: 1px;
|
95 |
-
text-decoration: none;
|
96 |
-
|
97 |
-
border: 0;
|
98 |
-
background: url('../../img/select2/select2.png') right top no-repeat;
|
99 |
-
cursor: pointer;
|
100 |
-
outline: 0;
|
101 |
-
}
|
102 |
-
|
103 |
-
.select2-container.select2-allowclear .select2-choice abbr {
|
104 |
-
display: inline-block;
|
105 |
-
}
|
106 |
-
|
107 |
-
.select2-container .select2-choice abbr:hover {
|
108 |
-
background-position: right -11px;
|
109 |
-
cursor: pointer;
|
110 |
-
}
|
111 |
-
|
112 |
-
.select2-drop-mask {
|
113 |
-
border: 0;
|
114 |
-
margin: 0;
|
115 |
-
padding: 0;
|
116 |
-
position: fixed;
|
117 |
-
left: 0;
|
118 |
-
top: 0;
|
119 |
-
min-height: 100%;
|
120 |
-
min-width: 100%;
|
121 |
-
height: auto;
|
122 |
-
width: auto;
|
123 |
-
opacity: 0;
|
124 |
-
z-index: 9998;
|
125 |
-
/* styles required for IE to work */
|
126 |
-
background-color: #fff;
|
127 |
-
filter: alpha(opacity=0);
|
128 |
-
}
|
129 |
-
|
130 |
-
.select2-drop {
|
131 |
-
width: 100%;
|
132 |
-
margin-top: -1px;
|
133 |
-
position: absolute;
|
134 |
-
z-index: 9999;
|
135 |
-
top: 100%;
|
136 |
-
|
137 |
-
background: #fff;
|
138 |
-
color: #000;
|
139 |
-
border: 1px solid #aaa;
|
140 |
-
border-top: 0;
|
141 |
-
|
142 |
-
border-radius: 0 0 4px 4px;
|
143 |
-
|
144 |
-
-webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
145 |
-
box-shadow: 0 4px 5px rgba(0, 0, 0, .15);
|
146 |
-
}
|
147 |
-
|
148 |
-
.select2-drop-auto-width {
|
149 |
-
border-top: 1px solid #aaa;
|
150 |
-
width: auto;
|
151 |
-
}
|
152 |
-
|
153 |
-
.select2-drop-auto-width .select2-search {
|
154 |
-
padding-top: 4px;
|
155 |
-
}
|
156 |
-
|
157 |
-
.select2-drop.select2-drop-above {
|
158 |
-
margin-top: 1px;
|
159 |
-
border-top: 1px solid #aaa;
|
160 |
-
border-bottom: 0;
|
161 |
-
|
162 |
-
border-radius: 4px 4px 0 0;
|
163 |
-
|
164 |
-
-webkit-box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
165 |
-
box-shadow: 0 -4px 5px rgba(0, 0, 0, .15);
|
166 |
-
}
|
167 |
-
|
168 |
-
.select2-drop-active {
|
169 |
-
border: 1px solid #5897fb;
|
170 |
-
border-top: none;
|
171 |
-
}
|
172 |
-
|
173 |
-
.select2-drop.select2-drop-above.select2-drop-active {
|
174 |
-
border-top: 1px solid #5897fb;
|
175 |
-
}
|
176 |
-
|
177 |
-
.select2-container .select2-choice .select2-arrow {
|
178 |
-
display: inline-block;
|
179 |
-
width: 18px;
|
180 |
-
height: 100%;
|
181 |
-
position: absolute;
|
182 |
-
right: 0;
|
183 |
-
top: 0;
|
184 |
-
|
185 |
-
border-left: 1px solid #aaa;
|
186 |
-
border-radius: 0 4px 4px 0;
|
187 |
-
|
188 |
-
background-clip: padding-box;
|
189 |
-
|
190 |
-
background: #ccc;
|
191 |
-
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #ccc), color-stop(0.6, #eee));
|
192 |
-
background-image: -webkit-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
193 |
-
background-image: -moz-linear-gradient(center bottom, #ccc 0%, #eee 60%);
|
194 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#eeeeee', endColorstr = '#cccccc', GradientType = 0);
|
195 |
-
background-image: linear-gradient(top, #ccc 0%, #eee 60%);
|
196 |
-
}
|
197 |
-
|
198 |
-
.select2-container .select2-choice .select2-arrow b {
|
199 |
-
display: block;
|
200 |
-
width: 100%;
|
201 |
-
height: 100%;
|
202 |
-
background: url('../../img/select2/select2.png') no-repeat 0 1px;
|
203 |
-
}
|
204 |
-
|
205 |
-
.select2-search {
|
206 |
-
display: inline-block;
|
207 |
-
width: 100%;
|
208 |
-
min-height: 26px;
|
209 |
-
margin: 0;
|
210 |
-
padding-left: 4px;
|
211 |
-
padding-right: 4px;
|
212 |
-
|
213 |
-
position: relative;
|
214 |
-
z-index: 10000;
|
215 |
-
|
216 |
-
white-space: nowrap;
|
217 |
-
}
|
218 |
-
|
219 |
-
.select2-search input {
|
220 |
-
width: 100%;
|
221 |
-
height: auto !important;
|
222 |
-
min-height: 26px;
|
223 |
-
padding: 4px 20px 4px 5px;
|
224 |
-
margin: 0;
|
225 |
-
|
226 |
-
outline: 0;
|
227 |
-
font-family: sans-serif;
|
228 |
-
font-size: 1em;
|
229 |
-
|
230 |
-
border: 1px solid #aaa;
|
231 |
-
border-radius: 0;
|
232 |
-
|
233 |
-
-webkit-box-shadow: none;
|
234 |
-
box-shadow: none;
|
235 |
-
|
236 |
-
background: #fff url('../../img/select2/select2.png') no-repeat 100% -22px;
|
237 |
-
background: url('../../img/select2/select2.png') no-repeat 100% -22px, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
238 |
-
background: url('../../img/select2/select2.png') no-repeat 100% -22px, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
239 |
-
background: url('../../img/select2/select2.png') no-repeat 100% -22px, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
240 |
-
background: url('../../img/select2/select2.png') no-repeat 100% -22px, linear-gradient(top, #fff 85%, #eee 99%);
|
241 |
-
}
|
242 |
-
|
243 |
-
.select2-drop.select2-drop-above .select2-search input {
|
244 |
-
margin-top: 4px;
|
245 |
-
}
|
246 |
-
|
247 |
-
.select2-search input.select2-active {
|
248 |
-
background: #fff url('../../img/select2/select2-spinner.gif') no-repeat 100%;
|
249 |
-
background: url('../../img/select2/select2-spinner.gif') no-repeat 100%, -webkit-gradient(linear, left bottom, left top, color-stop(0.85, #fff), color-stop(0.99, #eee));
|
250 |
-
background: url('../../img/select2/select2-spinner.gif') no-repeat 100%, -webkit-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
251 |
-
background: url('../../img/select2/select2-spinner.gif') no-repeat 100%, -moz-linear-gradient(center bottom, #fff 85%, #eee 99%);
|
252 |
-
background: url('../../img/select2/select2-spinner.gif') no-repeat 100%, linear-gradient(top, #fff 85%, #eee 99%);
|
253 |
-
}
|
254 |
-
|
255 |
-
.select2-container-active .select2-choice,
|
256 |
-
.select2-container-active .select2-choices {
|
257 |
-
border: 1px solid #5897fb;
|
258 |
-
outline: none;
|
259 |
-
|
260 |
-
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
261 |
-
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
262 |
-
}
|
263 |
-
|
264 |
-
.select2-dropdown-open .select2-choice {
|
265 |
-
border-bottom-color: transparent;
|
266 |
-
-webkit-box-shadow: 0 1px 0 #fff inset;
|
267 |
-
box-shadow: 0 1px 0 #fff inset;
|
268 |
-
|
269 |
-
border-bottom-left-radius: 0;
|
270 |
-
border-bottom-right-radius: 0;
|
271 |
-
|
272 |
-
background-color: #eee;
|
273 |
-
background-image: -webkit-gradient(linear, left bottom, left top, color-stop(0, #fff), color-stop(0.5, #eee));
|
274 |
-
background-image: -webkit-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
275 |
-
background-image: -moz-linear-gradient(center bottom, #fff 0%, #eee 50%);
|
276 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
277 |
-
background-image: linear-gradient(top, #fff 0%, #eee 50%);
|
278 |
-
}
|
279 |
-
|
280 |
-
.select2-dropdown-open.select2-drop-above .select2-choice,
|
281 |
-
.select2-dropdown-open.select2-drop-above .select2-choices {
|
282 |
-
border: 1px solid #5897fb;
|
283 |
-
border-top-color: transparent;
|
284 |
-
|
285 |
-
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(0.5, #eee));
|
286 |
-
background-image: -webkit-linear-gradient(center top, #fff 0%, #eee 50%);
|
287 |
-
background-image: -moz-linear-gradient(center top, #fff 0%, #eee 50%);
|
288 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#ffffff', GradientType=0);
|
289 |
-
background-image: linear-gradient(bottom, #fff 0%, #eee 50%);
|
290 |
-
}
|
291 |
-
|
292 |
-
.select2-dropdown-open .select2-choice .select2-arrow {
|
293 |
-
background: transparent;
|
294 |
-
border-left: none;
|
295 |
-
filter: none;
|
296 |
-
}
|
297 |
-
.select2-dropdown-open .select2-choice .select2-arrow b {
|
298 |
-
background-position: -18px 1px;
|
299 |
-
}
|
300 |
-
|
301 |
-
/* results */
|
302 |
-
.select2-results {
|
303 |
-
max-height: 200px;
|
304 |
-
padding: 0 0 0 4px;
|
305 |
-
margin: 4px 4px 4px 0;
|
306 |
-
position: relative;
|
307 |
-
overflow-x: hidden;
|
308 |
-
overflow-y: auto;
|
309 |
-
-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
|
310 |
-
}
|
311 |
-
|
312 |
-
.select2-results ul.select2-result-sub {
|
313 |
-
margin: 0;
|
314 |
-
padding-left: 0;
|
315 |
-
}
|
316 |
-
|
317 |
-
.select2-results ul.select2-result-sub > li .select2-result-label { padding-left: 20px }
|
318 |
-
.select2-results ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 40px }
|
319 |
-
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 60px }
|
320 |
-
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 80px }
|
321 |
-
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 100px }
|
322 |
-
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 110px }
|
323 |
-
.select2-results ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub ul.select2-result-sub > li .select2-result-label { padding-left: 120px }
|
324 |
-
|
325 |
-
.select2-results li {
|
326 |
-
list-style: none;
|
327 |
-
display: list-item;
|
328 |
-
background-image: none;
|
329 |
-
}
|
330 |
-
|
331 |
-
.select2-results li.select2-result-with-children > .select2-result-label {
|
332 |
-
font-weight: bold;
|
333 |
-
}
|
334 |
-
|
335 |
-
.select2-results .select2-result-label {
|
336 |
-
padding: 3px 7px 4px;
|
337 |
-
margin: 0;
|
338 |
-
cursor: pointer;
|
339 |
-
|
340 |
-
min-height: 1em;
|
341 |
-
|
342 |
-
-webkit-touch-callout: none;
|
343 |
-
-webkit-user-select: none;
|
344 |
-
-moz-user-select: none;
|
345 |
-
-ms-user-select: none;
|
346 |
-
user-select: none;
|
347 |
-
}
|
348 |
-
|
349 |
-
.select2-results .select2-highlighted {
|
350 |
-
background: #3875d7;
|
351 |
-
color: #fff;
|
352 |
-
}
|
353 |
-
|
354 |
-
.select2-results li em {
|
355 |
-
background: #feffde;
|
356 |
-
font-style: normal;
|
357 |
-
}
|
358 |
-
|
359 |
-
.select2-results .select2-highlighted em {
|
360 |
-
background: transparent;
|
361 |
-
}
|
362 |
-
|
363 |
-
.select2-results .select2-highlighted ul {
|
364 |
-
background: #fff;
|
365 |
-
color: #000;
|
366 |
-
}
|
367 |
-
|
368 |
-
|
369 |
-
.select2-results .select2-no-results,
|
370 |
-
.select2-results .select2-searching,
|
371 |
-
.select2-results .select2-selection-limit {
|
372 |
-
background: #f4f4f4;
|
373 |
-
display: list-item;
|
374 |
-
}
|
375 |
-
|
376 |
-
/*
|
377 |
-
disabled look for disabled choices in the results dropdown
|
378 |
-
*/
|
379 |
-
.select2-results .select2-disabled.select2-highlighted {
|
380 |
-
color: #666;
|
381 |
-
background: #f4f4f4;
|
382 |
-
display: list-item;
|
383 |
-
cursor: default;
|
384 |
-
}
|
385 |
-
.select2-results .select2-disabled {
|
386 |
-
background: #f4f4f4;
|
387 |
-
display: list-item;
|
388 |
-
cursor: default;
|
389 |
-
}
|
390 |
-
|
391 |
-
.select2-results .select2-selected {
|
392 |
-
display: none;
|
393 |
-
}
|
394 |
-
|
395 |
-
.select2-more-results.select2-active {
|
396 |
-
background: #f4f4f4 url('../../img/select2/select2-spinner.gif') no-repeat 100%;
|
397 |
-
}
|
398 |
-
|
399 |
-
.select2-more-results {
|
400 |
-
background: #f4f4f4;
|
401 |
-
display: list-item;
|
402 |
-
}
|
403 |
-
|
404 |
-
/* disabled styles */
|
405 |
-
|
406 |
-
.select2-container.select2-container-disabled .select2-choice {
|
407 |
-
background-color: #f4f4f4;
|
408 |
-
background-image: none;
|
409 |
-
border: 1px solid #ddd;
|
410 |
-
cursor: default;
|
411 |
-
}
|
412 |
-
|
413 |
-
.select2-container.select2-container-disabled .select2-choice .select2-arrow {
|
414 |
-
background-color: #f4f4f4;
|
415 |
-
background-image: none;
|
416 |
-
border-left: 0;
|
417 |
-
}
|
418 |
-
|
419 |
-
.select2-container.select2-container-disabled .select2-choice abbr {
|
420 |
-
display: none;
|
421 |
-
}
|
422 |
-
|
423 |
-
|
424 |
-
/* multiselect */
|
425 |
-
|
426 |
-
.select2-container-multi .select2-choices {
|
427 |
-
height: auto !important;
|
428 |
-
height: 1%;
|
429 |
-
margin: 0;
|
430 |
-
padding: 0;
|
431 |
-
position: relative;
|
432 |
-
|
433 |
-
border: 1px solid #aaa;
|
434 |
-
cursor: text;
|
435 |
-
overflow: hidden;
|
436 |
-
|
437 |
-
background-color: #fff;
|
438 |
-
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(1%, #eee), color-stop(15%, #fff));
|
439 |
-
background-image: -webkit-linear-gradient(top, #eee 1%, #fff 15%);
|
440 |
-
background-image: -moz-linear-gradient(top, #eee 1%, #fff 15%);
|
441 |
-
background-image: linear-gradient(top, #eee 1%, #fff 15%);
|
442 |
-
}
|
443 |
-
|
444 |
-
.select2-locked {
|
445 |
-
padding: 3px 5px 3px 5px !important;
|
446 |
-
}
|
447 |
-
|
448 |
-
.select2-container-multi .select2-choices {
|
449 |
-
min-height: 26px;
|
450 |
-
}
|
451 |
-
|
452 |
-
.select2-container-multi.select2-container-active .select2-choices {
|
453 |
-
border: 1px solid #5897fb;
|
454 |
-
outline: none;
|
455 |
-
|
456 |
-
-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
457 |
-
box-shadow: 0 0 5px rgba(0, 0, 0, .3);
|
458 |
-
}
|
459 |
-
.select2-container-multi .select2-choices li {
|
460 |
-
float: left;
|
461 |
-
list-style: none;
|
462 |
-
}
|
463 |
-
.select2-container-multi .select2-choices .select2-search-field {
|
464 |
-
margin: 0;
|
465 |
-
padding: 0;
|
466 |
-
white-space: nowrap;
|
467 |
-
}
|
468 |
-
|
469 |
-
.select2-container-multi .select2-choices .select2-search-field input {
|
470 |
-
padding: 5px;
|
471 |
-
margin: 1px 0;
|
472 |
-
|
473 |
-
font-family: sans-serif;
|
474 |
-
font-size: 100%;
|
475 |
-
color: #666;
|
476 |
-
outline: 0;
|
477 |
-
border: 0;
|
478 |
-
-webkit-box-shadow: none;
|
479 |
-
box-shadow: none;
|
480 |
-
background: transparent !important;
|
481 |
-
}
|
482 |
-
|
483 |
-
.select2-container-multi .select2-choices .select2-search-field input.select2-active {
|
484 |
-
background: #fff url('../../img/select2/select2-spinner.gif') no-repeat 100% !important;
|
485 |
-
}
|
486 |
-
|
487 |
-
.select2-default {
|
488 |
-
color: #999 !important;
|
489 |
-
}
|
490 |
-
|
491 |
-
.select2-container-multi .select2-choices .select2-search-choice {
|
492 |
-
padding: 3px 5px 3px 18px;
|
493 |
-
margin: 3px 0 3px 5px;
|
494 |
-
position: relative;
|
495 |
-
|
496 |
-
line-height: 13px;
|
497 |
-
color: #333;
|
498 |
-
cursor: default;
|
499 |
-
border: 1px solid #aaaaaa;
|
500 |
-
|
501 |
-
border-radius: 3px;
|
502 |
-
|
503 |
-
-webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
504 |
-
box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
|
505 |
-
|
506 |
-
background-clip: padding-box;
|
507 |
-
|
508 |
-
-webkit-touch-callout: none;
|
509 |
-
-webkit-user-select: none;
|
510 |
-
-moz-user-select: none;
|
511 |
-
-ms-user-select: none;
|
512 |
-
user-select: none;
|
513 |
-
|
514 |
-
background-color: #e4e4e4;
|
515 |
-
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#f4f4f4', GradientType=0);
|
516 |
-
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eee));
|
517 |
-
background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
518 |
-
background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
519 |
-
background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
|
520 |
-
}
|
521 |
-
.select2-container-multi .select2-choices .select2-search-choice .select2-chosen {
|
522 |
-
cursor: default;
|
523 |
-
}
|
524 |
-
.select2-container-multi .select2-choices .select2-search-choice-focus {
|
525 |
-
background: #d4d4d4;
|
526 |
-
}
|
527 |
-
|
528 |
-
.select2-search-choice-close {
|
529 |
-
display: block;
|
530 |
-
width: 12px;
|
531 |
-
height: 13px;
|
532 |
-
position: absolute;
|
533 |
-
right: 3px;
|
534 |
-
top: 4px;
|
535 |
-
|
536 |
-
font-size: 1px;
|
537 |
-
outline: none;
|
538 |
-
background: url('../../img/select2/select2.png') right top no-repeat;
|
539 |
-
}
|
540 |
-
|
541 |
-
.select2-container-multi .select2-search-choice-close {
|
542 |
-
left: 3px;
|
543 |
-
}
|
544 |
-
|
545 |
-
.select2-container-multi .select2-choices .select2-search-choice .select2-search-choice-close:hover {
|
546 |
-
background-position: right -11px;
|
547 |
-
}
|
548 |
-
.select2-container-multi .select2-choices .select2-search-choice-focus .select2-search-choice-close {
|
549 |
-
background-position: right -11px;
|
550 |
-
}
|
551 |
-
|
552 |
-
/* disabled styles */
|
553 |
-
.select2-container-multi.select2-container-disabled .select2-choices {
|
554 |
-
background-color: #f4f4f4;
|
555 |
-
background-image: none;
|
556 |
-
border: 1px solid #ddd;
|
557 |
-
cursor: default;
|
558 |
-
}
|
559 |
-
|
560 |
-
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice {
|
561 |
-
padding: 3px 5px 3px 5px;
|
562 |
-
border: 1px solid #ddd;
|
563 |
-
background-image: none;
|
564 |
-
background-color: #f4f4f4;
|
565 |
-
}
|
566 |
-
|
567 |
-
.select2-container-multi.select2-container-disabled .select2-choices .select2-search-choice .select2-search-choice-close { display: none;
|
568 |
-
background: none;
|
569 |
-
}
|
570 |
-
/* end multiselect */
|
571 |
-
|
572 |
-
|
573 |
-
.select2-result-selectable .select2-match,
|
574 |
-
.select2-result-unselectable .select2-match {
|
575 |
-
text-decoration: underline;
|
576 |
-
}
|
577 |
-
|
578 |
-
.select2-offscreen, .select2-offscreen:focus {
|
579 |
-
clip: rect(0 0 0 0) !important;
|
580 |
-
width: 1px !important;
|
581 |
-
height: 1px !important;
|
582 |
-
border: 0 !important;
|
583 |
-
margin: 0 !important;
|
584 |
-
padding: 0 !important;
|
585 |
-
overflow: hidden !important;
|
586 |
-
position: absolute !important;
|
587 |
-
outline: 0 !important;
|
588 |
-
left: 0px !important;
|
589 |
-
top: 0px !important;
|
590 |
-
}
|
591 |
-
|
592 |
-
.select2-display-none {
|
593 |
-
display: none;
|
594 |
-
}
|
595 |
-
|
596 |
-
.select2-measure-scrollbar {
|
597 |
-
position: absolute;
|
598 |
-
top: -10000px;
|
599 |
-
left: -10000px;
|
600 |
-
width: 100px;
|
601 |
-
height: 100px;
|
602 |
-
overflow: scroll;
|
603 |
-
}
|
604 |
-
/* Retina-ize icons */
|
605 |
-
|
606 |
-
@media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi) {
|
607 |
-
.select2-search input, .select2-search-choice-close, .select2-container .select2-choice abbr, .select2-container .select2-choice .select2-arrow b {
|
608 |
-
background-image: url('../../img/select2/select2x2.png') !important;
|
609 |
-
background-repeat: no-repeat !important;
|
610 |
-
background-size: 60px 40px !important;
|
611 |
-
}
|
612 |
-
.select2-search input {
|
613 |
-
background-position: 100% -21px !important;
|
614 |
-
}
|
615 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/smoothness/jquery-ui-1.8.20.custom.css
CHANGED
@@ -35,7 +35,7 @@
|
|
35 |
----------------------------------*/
|
36 |
|
37 |
/* Overlays */
|
38 |
-
.ui-widget-overlay { position:
|
39 |
|
40 |
|
41 |
/*!
|
35 |
----------------------------------*/
|
36 |
|
37 |
/* Overlays */
|
38 |
+
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
39 |
|
40 |
|
41 |
/*!
|
css/tmce/editor.css
DELETED
@@ -1,2317 +0,0 @@
|
|
1 |
-
|
2 |
-
/*------------------------------------------------------------------------------
|
3 |
-
|
4 |
-
TinyMCE and Quicklinks toolbars
|
5 |
-
------------------------------------------------------------------------------*/
|
6 |
-
|
7 |
-
/* wp_theme/ui.css */
|
8 |
-
.wp_themeSkin table,
|
9 |
-
.wp_themeSkin tbody,
|
10 |
-
.wp_themeSkin a,
|
11 |
-
.wp_themeSkin img,
|
12 |
-
.wp_themeSkin tr,
|
13 |
-
.wp_themeSkin div,
|
14 |
-
.wp_themeSkin td,
|
15 |
-
.wp_themeSkin iframe,
|
16 |
-
.wp_themeSkin span,
|
17 |
-
.wp_themeSkin *,
|
18 |
-
.wp_themeSkin .mceText {
|
19 |
-
border: 0;
|
20 |
-
margin: 0;
|
21 |
-
padding: 0;
|
22 |
-
white-space: nowrap;
|
23 |
-
text-decoration: none;
|
24 |
-
font-weight: normal;
|
25 |
-
cursor: default;
|
26 |
-
vertical-align: baseline;
|
27 |
-
width: auto;
|
28 |
-
border-collapse: separate;
|
29 |
-
}
|
30 |
-
|
31 |
-
.wp_themeSkin a:hover,
|
32 |
-
.wp_themeSkin a:link,
|
33 |
-
.wp_themeSkin a:visited,
|
34 |
-
.wp_themeSkin a:active {
|
35 |
-
text-decoration: none;
|
36 |
-
font-weight: normal;
|
37 |
-
cursor: default;
|
38 |
-
}
|
39 |
-
|
40 |
-
.wp_themeSkin table td {
|
41 |
-
vertical-align: middle;
|
42 |
-
}
|
43 |
-
|
44 |
-
.wp_themeSkin *,
|
45 |
-
.wp_themeSkin a:hover,
|
46 |
-
.wp_themeSkin a:link,
|
47 |
-
.wp_themeSkin a:visited,
|
48 |
-
.wp_themeSkin a:active {
|
49 |
-
color: #555;
|
50 |
-
}
|
51 |
-
|
52 |
-
/* These are part of TinyMCE, used in TinyMCE Advanced, but not WordPress. These are not updated for 3.8's design. */
|
53 |
-
.wp_themeSkin span.mce_sup,
|
54 |
-
.wp_themeSkin span.mce_sub,
|
55 |
-
.wp_themeSkin span.mce_media,
|
56 |
-
.wp_themeSkin span.mce_styleprops,
|
57 |
-
.wp_themeSkin span.mce_search,
|
58 |
-
.wp_themeSkin span.mce_emotions,
|
59 |
-
.wp_themeSkin span.mce_print,
|
60 |
-
.wp_themeSkin span.mce_attribs,
|
61 |
-
.wp_themeSkin span.mce_hr,
|
62 |
-
.wp_themeSkin span.mce_cut,
|
63 |
-
.wp_themeSkin span.mce_copy,
|
64 |
-
.wp_themeSkin span.mce_paste,
|
65 |
-
.wp_themeSkin span.mce_cite,
|
66 |
-
.wp_themeSkin span.mce_visualchars,
|
67 |
-
.wp_themeSkin span.mce_advhr,
|
68 |
-
.wp_themeSkin span.mce_insertdate,
|
69 |
-
.wp_themeSkin span.mce_anchor,
|
70 |
-
.wp_themeSkin span.mce_visualaid,
|
71 |
-
.wp_themeSkin span.mce_cleanup,
|
72 |
-
.wp_themeSkin span.mce_table,
|
73 |
-
.wp_themeSkin span.mce_row_props,
|
74 |
-
.wp_themeSkin span.mce_cell_props,
|
75 |
-
.wp_themeSkin span.mce_row_before,
|
76 |
-
.wp_themeSkin span.mce_row_after,
|
77 |
-
.wp_themeSkin span.mce_delete_row,
|
78 |
-
.wp_themeSkin span.mce_col_before,
|
79 |
-
.wp_themeSkin span.mce_col_after,
|
80 |
-
.wp_themeSkin span.mce_delete_col,
|
81 |
-
.wp_themeSkin span.mce_split_cells,
|
82 |
-
.wp_themeSkin span.mce_merge_cells,
|
83 |
-
.wp_themeSkin span.mce_delete_table,
|
84 |
-
.wp_themeSkin span.mce_ins,
|
85 |
-
.wp_themeSkin span.mce_abbr,
|
86 |
-
.wp_themeSkin span.mce_acronym,
|
87 |
-
.wp_themeSkin span.mce_del,
|
88 |
-
.wp_themeSkin span.mce_replace,
|
89 |
-
.wp_themeSkin span.mce_code,
|
90 |
-
.wp_themeSkin span.mce_nonbreaking,
|
91 |
-
.wp_themeSkin span.mce_inserttime,
|
92 |
-
.wp_themeSkin span.mce_insertlayer,
|
93 |
-
.wp_themeSkin span.mce_moveforward,
|
94 |
-
.wp_themeSkin span.mce_movebackward,
|
95 |
-
.wp_themeSkin span.mce_absolute {
|
96 |
-
-moz-transition: none;
|
97 |
-
-webkit-transition: none;
|
98 |
-
transition: none;
|
99 |
-
background: url("../js/tinymce/skins/wordpress/images/icons.gif") no-repeat 20px 20px;
|
100 |
-
}
|
101 |
-
|
102 |
-
.wp_themeSkin span.mce_code:after {
|
103 |
-
content: '\f475';
|
104 |
-
font-family: 'dashicons';
|
105 |
-
}
|
106 |
-
|
107 |
-
/* No @font-face support */
|
108 |
-
.no-font-face .wp_themeSkin span.mce_undo,
|
109 |
-
.no-font-face .wp_themeSkin span.mce_redo,
|
110 |
-
.no-font-face .wp_themeSkin span.mce_bullist,
|
111 |
-
.no-font-face .wp_themeSkin span.mce_numlist,
|
112 |
-
.no-font-face .wp_themeSkin span.mce_blockquote,
|
113 |
-
.no-font-face .wp_themeSkin span.mce_charmap,
|
114 |
-
.no-font-face .wp_themeSkin span.mce_bold,
|
115 |
-
.no-font-face .wp_themeSkin span.mce_italic,
|
116 |
-
.no-font-face .wp_themeSkin span.mce_underline,
|
117 |
-
.no-font-face .wp_themeSkin span.mce_justifyleft,
|
118 |
-
.no-font-face .wp_themeSkin span.mce_justifyright,
|
119 |
-
.no-font-face .wp_themeSkin span.mce_justifycenter,
|
120 |
-
.no-font-face .wp_themeSkin span.mce_justifyfull,
|
121 |
-
.no-font-face .wp_themeSkin span.mce_indent,
|
122 |
-
.no-font-face .wp_themeSkin span.mce_outdent,
|
123 |
-
.no-font-face .wp_themeSkin span.mce_link,
|
124 |
-
.no-font-face .wp_themeSkin span.mce_unlink,
|
125 |
-
.no-font-face .wp_themeSkin span.mce_help,
|
126 |
-
.no-font-face .wp_themeSkin span.mce_removeformat,
|
127 |
-
.no-font-face .wp_themeSkin span.mce_fullscreen,
|
128 |
-
.no-font-face .wp_themeSkin span.mce_wp_fullscreen,
|
129 |
-
.no-font-face .wp_themeSkin span.mce_media,
|
130 |
-
.no-font-face .wp_themeSkin span.mce_pastetext,
|
131 |
-
.no-font-face .wp_themeSkin span.mce_pasteword,
|
132 |
-
.no-font-face .wp_themeSkin span.mce_wp_help,
|
133 |
-
.no-font-face .wp_themeSkin span.mce_wp_adv,
|
134 |
-
.no-font-face .wp_themeSkin span.mce_wp_more,
|
135 |
-
.no-font-face .wp_themeSkin span.mce_strikethrough,
|
136 |
-
.no-font-face .wp_themeSkin span.mce_spellchecker,
|
137 |
-
.no-font-face .wp_themeSkin span.mce_forecolor,
|
138 |
-
.no-font-face .wp_themeSkin .mce_forecolorpicker,
|
139 |
-
.no-font-face .wp_themeSkin .mceSplitButton .mce_spellchecker span.mce_spellchecker,
|
140 |
-
.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor,
|
141 |
-
.no-font-face .wp_themeSkin .mceSplitButton span.mce_numlist,
|
142 |
-
.no-font-face .wp_themeSkin .mceSplitButton span.mce_bullist {
|
143 |
-
-moz-transition: none;
|
144 |
-
-webkit-transition: none;
|
145 |
-
transition: none;
|
146 |
-
background-image: url('../images/wpicons.png?ver=20120720');
|
147 |
-
}
|
148 |
-
|
149 |
-
/* Theme */
|
150 |
-
.no-font-face .wp_themeSkin span.mce_undo {background-position:-500px -20px}
|
151 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_undo,
|
152 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_undo {background-position:-500px 0}
|
153 |
-
|
154 |
-
.no-font-face .wp_themeSkin span.mce_redo {background-position:-480px -20px}
|
155 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_redo,
|
156 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_redo {background-position:-480px 0}
|
157 |
-
|
158 |
-
.no-font-face .wp_themeSkin span.mce_bullist {background-position:-40px -20px}
|
159 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bullist,
|
160 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_bullist,
|
161 |
-
.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_bullist {background-position:-40px 0}
|
162 |
-
|
163 |
-
.no-font-face .wp_themeSkin span.mce_numlist {background-position:-60px -20px}
|
164 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_numlist,
|
165 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_numlist,
|
166 |
-
.no-font-face .wp_themeSkin .mceSplitButton:hover span.mce_numlist {background-position:-60px 0}
|
167 |
-
|
168 |
-
.no-font-face .wp_themeSkin span.mce_blockquote {background-position:-80px -20px}
|
169 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_blockquote,
|
170 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_blockquote {background-position:-80px 0}
|
171 |
-
|
172 |
-
.no-font-face .wp_themeSkin span.mce_charmap {background-position:-420px -20px}
|
173 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_charmap,
|
174 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_charmap {background-position:-420px 0}
|
175 |
-
|
176 |
-
.no-font-face .wp_themeSkin span.mce_bold {background-position:0 -20px}
|
177 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_bold,
|
178 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_bold {background-position:0 0}
|
179 |
-
|
180 |
-
.no-font-face .wp_themeSkin span.mce_italic {background-position:-20px -20px}
|
181 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_italic,
|
182 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_italic {background-position:-20px 0}
|
183 |
-
|
184 |
-
.no-font-face .wp_themeSkin span.mce_underline {background-position:-280px -20px}
|
185 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_underline,
|
186 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_underline {background-position:-280px 0}
|
187 |
-
|
188 |
-
.no-font-face .wp_themeSkin span.mce_justifyleft {background-position:-100px -20px}
|
189 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyleft,
|
190 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyleft {background-position:-100px 0}
|
191 |
-
|
192 |
-
.no-font-face .wp_themeSkin span.mce_justifyright {background-position:-140px -20px}
|
193 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyright,
|
194 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyright {background-position:-140px 0}
|
195 |
-
|
196 |
-
.no-font-face .wp_themeSkin span.mce_justifycenter {background-position:-120px -20px}
|
197 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifycenter,
|
198 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifycenter {background-position:-120px 0}
|
199 |
-
|
200 |
-
.no-font-face .wp_themeSkin span.mce_justifyfull {background-position:-300px -20px}
|
201 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_justifyfull,
|
202 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_justifyfull {background-position:-300px 0}
|
203 |
-
|
204 |
-
.no-font-face .wp_themeSkin span.mce_indent {background-position:-460px -20px}
|
205 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_indent,
|
206 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_indent {background-position:-460px 0}
|
207 |
-
|
208 |
-
.no-font-face .wp_themeSkin span.mce_outdent {background-position:-440px -20px}
|
209 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_outdent,
|
210 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_outdent {background-position:-440px 0}
|
211 |
-
|
212 |
-
.no-font-face .wp_themeSkin span.mce_link {background-position:-160px -20px}
|
213 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_link,
|
214 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_link {background-position:-160px 0}
|
215 |
-
|
216 |
-
.no-font-face .wp_themeSkin span.mce_unlink {background-position:-180px -20px}
|
217 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_unlink,
|
218 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_unlink {background-position:-180px 0}
|
219 |
-
|
220 |
-
.no-font-face .wp_themeSkin span.mce_help {background-position:-520px -20px}
|
221 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_help,
|
222 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_help {background-position:-520px 0}
|
223 |
-
|
224 |
-
.no-font-face .wp_themeSkin span.mce_removeformat {background-position:-380px -20px}
|
225 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_removeformat,
|
226 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_removeformat {background-position:-380px 0}
|
227 |
-
|
228 |
-
.no-font-face .wp_themeSkin span.mce_strikethrough {background-position:-540px -20px;}
|
229 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_strikethrough,
|
230 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_strikethrough {background-position:-540px 0}
|
231 |
-
|
232 |
-
.no-font-face .wp_themeSkin .mceSplitButton .mce_forecolor span.mce_forecolor {background-position:-320px -20px}
|
233 |
-
.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_forecolor,
|
234 |
-
.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_forecolor {background-position:-320px 0}
|
235 |
-
|
236 |
-
.no-font-face .wp_themeSkin .mce_forecolorpicker {background-position:-320px -20px}
|
237 |
-
|
238 |
-
/* Plugins in WP */
|
239 |
-
.no-font-face .wp_themeSkin span.mce_fullscreen {background-position:-240px -20px}
|
240 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_fullscreen,
|
241 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_fullscreen {background-position:-240px 0}
|
242 |
-
|
243 |
-
.no-font-face .wp_themeSkin span.mce_wp_fullscreen {background-position:-240px -20px}
|
244 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_fullscreen,
|
245 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_fullscreen {background-position:-240px 0}
|
246 |
-
|
247 |
-
.no-font-face .wp_themeSkin span.mce_media {background-position:-400px -20px}
|
248 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_media,
|
249 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_media {background-position:-400px 0}
|
250 |
-
|
251 |
-
.no-font-face .wp_themeSkin span.mce_pastetext {background-position:-340px -20px}
|
252 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pastetext,
|
253 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_pastetext {background-position:-340px 0}
|
254 |
-
|
255 |
-
.no-font-face .wp_themeSkin span.mce_pasteword {background-position:-360px -20px}
|
256 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_pasteword,
|
257 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_pasteword {background-position:-360px 0}
|
258 |
-
|
259 |
-
.no-font-face .wp_themeSkin span.mce_spellchecker {background-position:-220px -20px}
|
260 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_spellchecker,
|
261 |
-
.no-font-face .wp_themeSkin .mceSplitButtonEnabled:hover span.mce_spellchecker,
|
262 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_spellchecker,
|
263 |
-
.no-font-face .wp_themeSkin .mceSplitButtonSelected span.mce_spellchecker {background-position:-220px 0}
|
264 |
-
|
265 |
-
.no-font-face .wp_themeSkin span.mce_wp_help {background-position:-520px -20px}
|
266 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_help,
|
267 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_help {background-position:-520px 0}
|
268 |
-
|
269 |
-
.no-font-face .wp_themeSkin span.mce_wp_adv {background-position:-260px -20px}
|
270 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_adv,
|
271 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_adv {background-position:-260px 0}
|
272 |
-
|
273 |
-
.no-font-face .wp_themeSkin span.mce_wp_more {background-position:-200px -20px}
|
274 |
-
.no-font-face .wp_themeSkin .mceButtonEnabled:hover span.mce_wp_more,
|
275 |
-
.no-font-face .wp_themeSkin .mceButtonActive span.mce_wp_more {background-position:-200px 0}
|
276 |
-
|
277 |
-
.no-font-face .mceIcon:before {
|
278 |
-
display: none !important;
|
279 |
-
}
|
280 |
-
/* End no @font-face */
|
281 |
-
|
282 |
-
/* Containers */
|
283 |
-
.wp_themeSkin table {}
|
284 |
-
|
285 |
-
.wp_themeSkin iframe {
|
286 |
-
display: block;
|
287 |
-
}
|
288 |
-
|
289 |
-
.wp_themeSkin #mce_fullscreen_ifr {
|
290 |
-
background-color: #fff;
|
291 |
-
}
|
292 |
-
|
293 |
-
.wp_themeSkin .mceToolbar {
|
294 |
-
padding: 1px;
|
295 |
-
}
|
296 |
-
|
297 |
-
/* External */
|
298 |
-
.wp_themeSkin .mceExternalToolbar {
|
299 |
-
position: absolute;
|
300 |
-
border-bottom: 0;
|
301 |
-
display: none;
|
302 |
-
}
|
303 |
-
|
304 |
-
.wp_themeSkin .mceExternalToolbar td.mceToolbar {
|
305 |
-
padding-right: 13px;
|
306 |
-
}
|
307 |
-
|
308 |
-
.wp_themeSkin .mceExternalClose {
|
309 |
-
position: absolute;
|
310 |
-
top: 3px;
|
311 |
-
right: 3px;
|
312 |
-
width: 7px;
|
313 |
-
height: 7px;
|
314 |
-
background: url("../js/tinymce/skins/wordpress/images/icons.gif") -820px 0;
|
315 |
-
}
|
316 |
-
|
317 |
-
/* Layout */
|
318 |
-
.wp_themeSkin table.mceToolbar,
|
319 |
-
.wp_themeSkin tr.mceFirst .mceToolbar tr td,
|
320 |
-
.wp_themeSkin tr.mceLast .mceToolbar tr td {
|
321 |
-
border: 0;
|
322 |
-
margin: 0;
|
323 |
-
padding: 0;
|
324 |
-
}
|
325 |
-
|
326 |
-
.wp_themeSkin table.mceLayout {
|
327 |
-
border: 0;
|
328 |
-
}
|
329 |
-
|
330 |
-
.wp_themeSkin .mceStatusbar {
|
331 |
-
background: #fff;
|
332 |
-
border-top: 1px solid #eee;
|
333 |
-
color: #000;
|
334 |
-
display: block;
|
335 |
-
font-family: sans-serif;
|
336 |
-
font-size: 12px;
|
337 |
-
height: 20px;
|
338 |
-
line-height: 16px;
|
339 |
-
padding: 0 0 0 8px;
|
340 |
-
overflow: visible;
|
341 |
-
}
|
342 |
-
|
343 |
-
.wp_themeSkin .mceStatusbar * {
|
344 |
-
color: #555;
|
345 |
-
}
|
346 |
-
|
347 |
-
.wp_themeSkin .mceStatusbar div {
|
348 |
-
float: left;
|
349 |
-
padding: 2px;
|
350 |
-
}
|
351 |
-
|
352 |
-
.wp_themeSkin .mceStatusbar a.mceResize {
|
353 |
-
display: block;
|
354 |
-
float: right;
|
355 |
-
background: url("../js/tinymce/skins/wordpress/images/icons.gif") -800px 0;
|
356 |
-
width: 20px;
|
357 |
-
height: 20px;
|
358 |
-
cursor: se-resize;
|
359 |
-
}
|
360 |
-
|
361 |
-
.wp_themeSkin .mceStatusbar a:hover {
|
362 |
-
text-decoration: underline;
|
363 |
-
}
|
364 |
-
|
365 |
-
.wp_themeSkin table.mceToolbar {
|
366 |
-
margin: 0 6px 2px;
|
367 |
-
}
|
368 |
-
|
369 |
-
.wp_themeSkin table.mceToolbar :active,
|
370 |
-
.wp_themeSkin table.mceToolbar :focus,
|
371 |
-
.wp_themeSkin table.mceToolbar:focus,
|
372 |
-
.wp_themeSkin span.mceSeparator:focus {
|
373 |
-
outline: none;
|
374 |
-
}
|
375 |
-
|
376 |
-
.wp_themeSkin #content_toolbar1 {
|
377 |
-
margin-top: 2px;
|
378 |
-
}
|
379 |
-
|
380 |
-
.wp_themeSkin .mceToolbar .mceToolbarEndListBox span {
|
381 |
-
display: none;
|
382 |
-
}
|
383 |
-
|
384 |
-
.wp_themeSkin span.mceIcon,
|
385 |
-
.wp_themeSkin img.mceIcon {
|
386 |
-
display: block;
|
387 |
-
width: 20px;
|
388 |
-
height: 20px;
|
389 |
-
}
|
390 |
-
|
391 |
-
a .mceIcon, .mceAction {
|
392 |
-
text-align: center;
|
393 |
-
font: normal 20px/1 'dashicons' !important;
|
394 |
-
speak: none;
|
395 |
-
-webkit-font-smoothing: antialiased;
|
396 |
-
-moz-osx-font-smoothing: grayscale;
|
397 |
-
}
|
398 |
-
|
399 |
-
.mceAction {
|
400 |
-
line-height:16px;
|
401 |
-
}
|
402 |
-
|
403 |
-
/* Button */
|
404 |
-
.wp_themeSkin .mceButton {
|
405 |
-
display: block;
|
406 |
-
width: 20px;
|
407 |
-
height: 20px;
|
408 |
-
cursor: default;
|
409 |
-
padding: 1px 2px;
|
410 |
-
margin: 1px;
|
411 |
-
-webkit-border-radius: 2px;
|
412 |
-
border-radius: 2px;
|
413 |
-
}
|
414 |
-
|
415 |
-
.wp_themeSkin a.mceButtonEnabled:hover {
|
416 |
-
background-image: inherit 0 -10px;
|
417 |
-
}
|
418 |
-
|
419 |
-
.wp_themeSkin .mceOldBoxModel a.mceButton span, .wp_themeSkin .mceOldBoxModel a.mceButton img {
|
420 |
-
margin: 0 0 0 1px;
|
421 |
-
}
|
422 |
-
|
423 |
-
.wp_themeSkin .mceButtonDisabled .mceIcon {
|
424 |
-
opacity: 0.2;
|
425 |
-
filter: alpha(opacity=20);
|
426 |
-
}
|
427 |
-
|
428 |
-
/* Separator */
|
429 |
-
.wp_themeSkin .mceSeparator {
|
430 |
-
display: none;
|
431 |
-
}
|
432 |
-
|
433 |
-
/* ListBox */
|
434 |
-
.wp_themeSkin .mceListBox,
|
435 |
-
.wp_themeSkin .mceListBox a {
|
436 |
-
display: block;
|
437 |
-
}
|
438 |
-
|
439 |
-
.wp_themeSkin .mceListBox .mceText {
|
440 |
-
padding: 1px 4px 1px 5px;
|
441 |
-
width: 70px;
|
442 |
-
text-align: left;
|
443 |
-
text-decoration: none;
|
444 |
-
-webkit-border-bottom-left-radius: 2px;
|
445 |
-
-webkit-border-top-left-radius: 2px;
|
446 |
-
border-bottom-left-radius: 2px;
|
447 |
-
border-top-left-radius: 2px;
|
448 |
-
font-family: sans-serif;
|
449 |
-
font-size: 12px;
|
450 |
-
height: 20px;
|
451 |
-
line-height: 20px;
|
452 |
-
overflow: hidden;
|
453 |
-
}
|
454 |
-
|
455 |
-
.wp_themeSkin .mceListBox {
|
456 |
-
margin: 1px;
|
457 |
-
direction: ltr;
|
458 |
-
background-color: #fff;
|
459 |
-
border: 1px solid #ddd;
|
460 |
-
-webkit-box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2);
|
461 |
-
box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .2);
|
462 |
-
}
|
463 |
-
|
464 |
-
.wp_themeSkin .mceListBox .mceOpen {
|
465 |
-
width: 12px;
|
466 |
-
height: 20px;
|
467 |
-
border-collapse: separate;
|
468 |
-
padding: 1px;
|
469 |
-
-webkit-border-bottom-left-radius: 0;
|
470 |
-
-webkit-border-top-left-radius: 0;
|
471 |
-
border-bottom-left-radius: 0;
|
472 |
-
border-top-left-radius: 0;
|
473 |
-
}
|
474 |
-
|
475 |
-
.wp_themeSkin .mceListBox .mceFirst a {
|
476 |
-
border-style: solid;
|
477 |
-
border-width: 1px;
|
478 |
-
border-bottom-right-radius: 2px;
|
479 |
-
border-top-right-radius: 2px;
|
480 |
-
}
|
481 |
-
|
482 |
-
.wp_themeSkin .mceListBoxMenu .mce_formatPreview {
|
483 |
-
line-height: normal;
|
484 |
-
}
|
485 |
-
|
486 |
-
.wp_themeSkin .mceListBox .mceOpen,
|
487 |
-
.wp_themeSkin .mceListBoxHover .mceOpen,
|
488 |
-
.wp_themeSkin .mceListBoxSelected .mceOpen,
|
489 |
-
.wp_themeSkin table.mceListBoxEnabled .mceOpen {
|
490 |
-
background-image: url("../../../../../wp-includes/images/down_arrow.gif");
|
491 |
-
background-position: 3px 1px;
|
492 |
-
background-repeat: no-repeat;
|
493 |
-
}
|
494 |
-
|
495 |
-
.wp_themeSkin .mceListBoxDisabled .mceText {
|
496 |
-
color: gray;
|
497 |
-
}
|
498 |
-
|
499 |
-
.wp_themeSkin .mceListBoxMenu {
|
500 |
-
overflow: auto;
|
501 |
-
overflow-x: hidden;
|
502 |
-
}
|
503 |
-
|
504 |
-
.wp_themeSkin .mceOldBoxModel .mceListBox .mceText {
|
505 |
-
height: 22px;
|
506 |
-
}
|
507 |
-
|
508 |
-
.wp_themeSkin select.mceListBox {
|
509 |
-
font-family: sans-serif;
|
510 |
-
font-size: 12px;
|
511 |
-
border-color: #b2b2b2;
|
512 |
-
background-color: #fff;
|
513 |
-
}
|
514 |
-
|
515 |
-
/* SplitButton */
|
516 |
-
.wp_themeSkin .mceSplitButton a,
|
517 |
-
.wp_themeSkin .mceSplitButton span {
|
518 |
-
display: block;
|
519 |
-
height: 20px;
|
520 |
-
}
|
521 |
-
|
522 |
-
.wp_themeSkin .mceSplitButton {
|
523 |
-
display: block;
|
524 |
-
direction: ltr;
|
525 |
-
}
|
526 |
-
|
527 |
-
.wp_themeSkin table.mceSplitButton td {
|
528 |
-
padding: 2px;
|
529 |
-
-webkit-border-radius: 2px;
|
530 |
-
border-radius: 2px;
|
531 |
-
}
|
532 |
-
|
533 |
-
.wp_themeSkin table.mceSplitButton:hover td {
|
534 |
-
background-image: inherit 0 -10px;
|
535 |
-
}
|
536 |
-
|
537 |
-
.wp_themeSkin .mceSplitButton a.mceAction {
|
538 |
-
height: 20px;
|
539 |
-
width: 20px;
|
540 |
-
padding: 1px 2px;
|
541 |
-
border-right: 0 none;
|
542 |
-
}
|
543 |
-
|
544 |
-
.wp_themeSkin .mceSplitButton span.mceAction {
|
545 |
-
background-image: url("../../../../../wp-includes/js/tinymce/skins/wordpress/images/icons.gif");
|
546 |
-
background-repeat: no-repeat;
|
547 |
-
background-color: transparent;
|
548 |
-
width: 20px;
|
549 |
-
}
|
550 |
-
|
551 |
-
.wp_themeSkin .mceSplitButton span.mceAction.mce_bullist,
|
552 |
-
.wp_themeSkin .mceSplitButton span.mceAction.mce_numlist {
|
553 |
-
background-image: none;
|
554 |
-
}
|
555 |
-
|
556 |
-
.wp_themeSkin .mceSplitButton a.mceOpen {
|
557 |
-
width: 11px;
|
558 |
-
height: 20px;
|
559 |
-
background-position: 0px 2px;
|
560 |
-
background-repeat: no-repeat;
|
561 |
-
padding: 1px 0;
|
562 |
-
}
|
563 |
-
|
564 |
-
.wp_themeSkin .mceSplitButton span.mceOpen {
|
565 |
-
display: none;
|
566 |
-
}
|
567 |
-
|
568 |
-
.wp_themeSkin .mceSplitButtonDisabled .mceAction {
|
569 |
-
opacity: 0.3;
|
570 |
-
filter: alpha(opacity=30);
|
571 |
-
}
|
572 |
-
|
573 |
-
.wp_themeSkin .mceListBox a.mceText,
|
574 |
-
.wp_themeSkin .mceSplitButton a.mceAction {
|
575 |
-
-webkit-border-bottom-left-radius: 2px;
|
576 |
-
-webkit-border-top-left-radius: 2px;
|
577 |
-
border-bottom-left-radius: 2px;
|
578 |
-
border-top-left-radius: 2px;
|
579 |
-
}
|
580 |
-
|
581 |
-
.wp_themeSkin .mceSplitButton a.mceOpen,
|
582 |
-
.wp_themeSkin .mceListBox a.mceOpen {
|
583 |
-
-webkit-border-bottom-right-radius: 2px;
|
584 |
-
-webkit-border-top-right-radius: 2px;
|
585 |
-
border-bottom-right-radius: 2px;
|
586 |
-
border-top-right-radius: 2px;
|
587 |
-
}
|
588 |
-
|
589 |
-
/* ColorSplitButton */
|
590 |
-
.wp_themeSkin div.mceColorSplitMenu table {
|
591 |
-
background-color: #ebebeb;
|
592 |
-
border-color: #bbb;
|
593 |
-
}
|
594 |
-
|
595 |
-
.wp_themeSkin .mceColorSplitMenu td {
|
596 |
-
padding: 2px;
|
597 |
-
}
|
598 |
-
|
599 |
-
.wp_themeSkin .mceColorSplitMenu a {
|
600 |
-
display: block;
|
601 |
-
width: 9px;
|
602 |
-
height: 9px;
|
603 |
-
overflow: hidden;
|
604 |
-
border-color: #B2B2B2;
|
605 |
-
}
|
606 |
-
|
607 |
-
.wp_themeSkin .mceColorSplitMenu td.mceMoreColors {
|
608 |
-
padding: 1px 3px 1px 1px;
|
609 |
-
}
|
610 |
-
|
611 |
-
.wp_themeSkin .mceColorSplitMenu a.mceMoreColors {
|
612 |
-
width: 100%;
|
613 |
-
height: auto;
|
614 |
-
text-align: center;
|
615 |
-
font-family: "Open Sans", sans-serif;
|
616 |
-
font-size: 11px;
|
617 |
-
line-height: 20px;
|
618 |
-
border-color: #fff;
|
619 |
-
}
|
620 |
-
|
621 |
-
.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover {}
|
622 |
-
.wp_themeSkin a.mceMoreColors:hover {}
|
623 |
-
.wp_themeSkin .mceColorPreview {
|
624 |
-
margin: -5px 0 0 2px;
|
625 |
-
width: 16px;
|
626 |
-
height: 4px;
|
627 |
-
overflow: hidden;
|
628 |
-
}
|
629 |
-
|
630 |
-
/* Menu */
|
631 |
-
.wp_themeSkin .mceMenu {
|
632 |
-
position: absolute;
|
633 |
-
left: 0;
|
634 |
-
top: 0;
|
635 |
-
z-index: 1000;
|
636 |
-
border-color: #ddd;
|
637 |
-
direction: ltr;
|
638 |
-
}
|
639 |
-
|
640 |
-
.wp_themeSkin .mceNoIcons span.mceIcon {
|
641 |
-
width: 0;
|
642 |
-
}
|
643 |
-
|
644 |
-
.wp_themeSkin .mceNoIcons a .mceText {
|
645 |
-
padding-left: 10px;
|
646 |
-
}
|
647 |
-
|
648 |
-
.wp_themeSkin .mceMenu table {
|
649 |
-
background-color: #ebeaeb;
|
650 |
-
}
|
651 |
-
|
652 |
-
.wp_themeSkin .mceMenu a,
|
653 |
-
.wp_themeSkin .mceMenu span,
|
654 |
-
.wp_themeSkin .mceMenu {
|
655 |
-
display: block;
|
656 |
-
}
|
657 |
-
|
658 |
-
.wp_themeSkin .mceMenu td {
|
659 |
-
height: 20px;overflow: hidden;
|
660 |
-
}
|
661 |
-
|
662 |
-
.wp_themeSkin .mceMenu a {
|
663 |
-
position: relative;
|
664 |
-
padding: 3px 0 4px 0;
|
665 |
-
text-decoration: none !important;
|
666 |
-
}
|
667 |
-
|
668 |
-
.wp_themeSkin .mceMenu .mceText {
|
669 |
-
position: relative;
|
670 |
-
display: block;
|
671 |
-
font-family: "Open Sans", sans-serif;
|
672 |
-
cursor: default;
|
673 |
-
margin: 0;
|
674 |
-
padding: 0 25px;
|
675 |
-
color: #000;
|
676 |
-
}
|
677 |
-
|
678 |
-
.wp_themeSkin .mceMenu span.mceText, .wp_themeSkin .mceMenu .mcePreview {
|
679 |
-
font-size: 12px;
|
680 |
-
}
|
681 |
-
|
682 |
-
.wp_themeSkin .mceMenu pre.mceText {
|
683 |
-
font-family: Monospace;
|
684 |
-
}
|
685 |
-
|
686 |
-
.wp_themeSkin .mceMenu .mceIcon {
|
687 |
-
position: absolute;
|
688 |
-
top: 0;
|
689 |
-
left: 0;
|
690 |
-
width: 22px;
|
691 |
-
}
|
692 |
-
|
693 |
-
.wp_themeSkin .mceMenu .mceMenuItemEnabled a:hover,
|
694 |
-
.wp_themeSkin .mceMenu .mceMenuItemActive {
|
695 |
-
background-color: #f5f5f5;
|
696 |
-
}
|
697 |
-
|
698 |
-
.wp_themeSkin td.mceMenuItemSeparator {
|
699 |
-
height: 1px;
|
700 |
-
background-color: #aaa;
|
701 |
-
}
|
702 |
-
|
703 |
-
.wp_themeSkin .mceMenuItemTitle a {
|
704 |
-
border-top: 0;
|
705 |
-
border-right: 0;
|
706 |
-
border-left: 0;
|
707 |
-
border-bottom: 1px solid #aaa;
|
708 |
-
text-decoration: none !important;
|
709 |
-
background-color: #ccc;
|
710 |
-
}
|
711 |
-
|
712 |
-
.wp_themeSkin .mceMenuItemTitle span.mceText {
|
713 |
-
font-weight: bold;
|
714 |
-
padding-left: 4px;
|
715 |
-
color: #000;
|
716 |
-
}
|
717 |
-
|
718 |
-
.wp_themeSkin .mceMenuItemSelected .mceIcon {
|
719 |
-
background: url("/wp-includes/js/tinymce/skins/wordpress/images/menu_check.gif");
|
720 |
-
color: #888;
|
721 |
-
}
|
722 |
-
|
723 |
-
.wp_themeSkin .mceNoIcons .mceMenuItemSelected a {
|
724 |
-
background: url("/wp-includes/js/tinymce/skins/wordpress/images/menu_arrow.gif") no-repeat -6px center;
|
725 |
-
}
|
726 |
-
|
727 |
-
.wp_themeSkin .mceMenu span.mceMenuLine {
|
728 |
-
display: none;
|
729 |
-
}
|
730 |
-
|
731 |
-
.wp_themeSkin .mceMenuItemSub a {
|
732 |
-
background: url("/wp-includes/js/tinymce/skins/wordpress/images/menu_arrow.gif") no-repeat top right;
|
733 |
-
}
|
734 |
-
|
735 |
-
/* Progress,Resize */
|
736 |
-
.wp_themeSkin .mceBlocker {
|
737 |
-
position: absolute;
|
738 |
-
left: 0;
|
739 |
-
top: 0;
|
740 |
-
z-index: 1000;
|
741 |
-
opacity: 0.5;
|
742 |
-
filter: alpha(opacity=50);
|
743 |
-
background: #FFF;
|
744 |
-
}
|
745 |
-
|
746 |
-
.wp_themeSkin .mceProgress {
|
747 |
-
position: absolute;
|
748 |
-
left: 0;
|
749 |
-
top: 0;
|
750 |
-
z-index: 1001;
|
751 |
-
background: url("/wp-includes/images/spinner.gif") no-repeat;
|
752 |
-
width: 32px;
|
753 |
-
height: 32px;
|
754 |
-
margin: -16px 0 0 -16px;
|
755 |
-
}
|
756 |
-
|
757 |
-
.wp_themeSkin .mcePlaceHolder {
|
758 |
-
border: 1px dotted gray;
|
759 |
-
}
|
760 |
-
|
761 |
-
/* Rtl */
|
762 |
-
.mceRtl .mceListBox .mceText {
|
763 |
-
text-align: right;
|
764 |
-
padding: 0 4px 0 0;
|
765 |
-
}
|
766 |
-
|
767 |
-
.mceRtl .mceMenuItem .mceText {
|
768 |
-
text-align: right;
|
769 |
-
}
|
770 |
-
|
771 |
-
/* Formats */
|
772 |
-
.wp_themeSkin .mce_p span.mceText {}
|
773 |
-
.wp_themeSkin .mce_address span.mceText {
|
774 |
-
font-style: italic;
|
775 |
-
}
|
776 |
-
|
777 |
-
.wp_themeSkin .mce_pre span.mceText {
|
778 |
-
font-family: monospace;
|
779 |
-
}
|
780 |
-
|
781 |
-
.wp_themeSkin .mce_h1 span.mceText {
|
782 |
-
font-weight: bolder;
|
783 |
-
font-size: 18px;
|
784 |
-
}
|
785 |
-
|
786 |
-
.wp_themeSkin .mce_h2 span.mceText {
|
787 |
-
font-weight: bolder;
|
788 |
-
font-size: 14px;
|
789 |
-
}
|
790 |
-
|
791 |
-
.wp_themeSkin .mce_h3 span.mceText {
|
792 |
-
font-weight: bolder;
|
793 |
-
font-size: 12px;
|
794 |
-
}
|
795 |
-
|
796 |
-
.wp_themeSkin .mce_h4 span.mceText {
|
797 |
-
font-weight: bolder;
|
798 |
-
font-size: 11px;
|
799 |
-
}
|
800 |
-
|
801 |
-
.wp_themeSkin .mce_h5 span.mceText {
|
802 |
-
font-weight: bolder;
|
803 |
-
font-size: 11px;
|
804 |
-
}
|
805 |
-
|
806 |
-
.wp_themeSkin .mce_h6 span.mceText {
|
807 |
-
font-weight: bolder;
|
808 |
-
font-size: 10px;
|
809 |
-
}
|
810 |
-
|
811 |
-
span.mce_bold:before {
|
812 |
-
content: '\f200';
|
813 |
-
}
|
814 |
-
|
815 |
-
span.mce_italic:before {
|
816 |
-
content: '\f201';
|
817 |
-
}
|
818 |
-
|
819 |
-
span.mce_bullist:before {
|
820 |
-
content: '\f203';
|
821 |
-
}
|
822 |
-
|
823 |
-
span.mce_numlist:before {
|
824 |
-
content: '\f204';
|
825 |
-
}
|
826 |
-
|
827 |
-
span.mce_blockquote:before {
|
828 |
-
content: '\f205';
|
829 |
-
}
|
830 |
-
|
831 |
-
span.mce_justifyleft:before {
|
832 |
-
content: '\f206';
|
833 |
-
}
|
834 |
-
|
835 |
-
span.mce_justifycenter:before {
|
836 |
-
content: '\f207';
|
837 |
-
}
|
838 |
-
|
839 |
-
span.mce_justifyright:before {
|
840 |
-
content: '\f208';
|
841 |
-
}
|
842 |
-
|
843 |
-
span.mce_link:before {
|
844 |
-
content: '\f103';
|
845 |
-
}
|
846 |
-
|
847 |
-
span.mce_unlink:before {
|
848 |
-
content: '\f225';
|
849 |
-
}
|
850 |
-
|
851 |
-
span.mce_wp_more:before {
|
852 |
-
content: '\f209';
|
853 |
-
}
|
854 |
-
|
855 |
-
span.mce_strikethrough:before {
|
856 |
-
content: '\f224';
|
857 |
-
}
|
858 |
-
|
859 |
-
span.mce_spellchecker {
|
860 |
-
font-size: 20px;
|
861 |
-
background: none !important;
|
862 |
-
margin-top: 2px;
|
863 |
-
}
|
864 |
-
|
865 |
-
span.mce_spellchecker:before {
|
866 |
-
content: '\f210';
|
867 |
-
}
|
868 |
-
|
869 |
-
span.mce_fullscreen:before,
|
870 |
-
span.mce_wp_fullscreen:before {
|
871 |
-
content: '\f211';
|
872 |
-
}
|
873 |
-
|
874 |
-
span.mce_wp_adv:before {
|
875 |
-
content: '\f212';
|
876 |
-
}
|
877 |
-
span.mce_underline:before {
|
878 |
-
content: '\f213';
|
879 |
-
}
|
880 |
-
|
881 |
-
span.mce_justifyfull:before {
|
882 |
-
content: '\f214';
|
883 |
-
}
|
884 |
-
|
885 |
-
span.mce_forecolor {
|
886 |
-
background: none !important;
|
887 |
-
}
|
888 |
-
|
889 |
-
span.mce_forecolor:before {
|
890 |
-
content: '\f215';
|
891 |
-
}
|
892 |
-
|
893 |
-
span.mce_pastetext:before {
|
894 |
-
content: '\f217';
|
895 |
-
}
|
896 |
-
|
897 |
-
span.mce_pasteword:before {
|
898 |
-
content: '\f216';
|
899 |
-
}
|
900 |
-
|
901 |
-
span.mce_removeformat:before {
|
902 |
-
content: '\f218';
|
903 |
-
}
|
904 |
-
|
905 |
-
span.mce_charmap:before {
|
906 |
-
content: '\f220';
|
907 |
-
}
|
908 |
-
|
909 |
-
span.mce_outdent:before {
|
910 |
-
content: '\f221';
|
911 |
-
}
|
912 |
-
|
913 |
-
span.mce_indent:before {
|
914 |
-
content: '\f222';
|
915 |
-
}
|
916 |
-
|
917 |
-
span.mce_undo:before {
|
918 |
-
content: '\f171';
|
919 |
-
}
|
920 |
-
|
921 |
-
span.mce_redo:before {
|
922 |
-
content: '\f172';
|
923 |
-
}
|
924 |
-
|
925 |
-
span.mce_help:before,
|
926 |
-
span.mce_wp_help:before {
|
927 |
-
content: '\f223';
|
928 |
-
}
|
929 |
-
|
930 |
-
span.mce_image:before {
|
931 |
-
content: '\f104';
|
932 |
-
}
|
933 |
-
|
934 |
-
span.mce_ltr:before {
|
935 |
-
content: '\f320';
|
936 |
-
}
|
937 |
-
|
938 |
-
/* Default icons */
|
939 |
-
.wp_themeSkin span.mce_cleanup {background-position:-380px -20px}
|
940 |
-
.wp_themeSkin span.mce_anchor {background-position:-200px 0}
|
941 |
-
.wp_themeSkin span.mce_sub {background-position:-600px 0}
|
942 |
-
.wp_themeSkin span.mce_sup {background-position:-620px 0}
|
943 |
-
.wp_themeSkin span.mce_newdocument {background-position:-520px 0}
|
944 |
-
.wp_themeSkin span.mce_image {background-position:-380px 0}
|
945 |
-
.wp_themeSkin span.mce_code {background-position:-260px 0}
|
946 |
-
.wp_themeSkin span.mce_hr {background-position:-360px 0}
|
947 |
-
.wp_themeSkin span.mce_visualaid {background-position:-660px 0}
|
948 |
-
.wp_themeSkin span.mce_paste {background-position:-560px 0}
|
949 |
-
.wp_themeSkin span.mce_copy {background-position:-700px 0}
|
950 |
-
.wp_themeSkin span.mce_cut {background-position:-680px 0}
|
951 |
-
.wp_themeSkin .mce_backcolor span.mceAction {background-position:-760px 0}
|
952 |
-
.wp_themeSkin .mce_backcolorpicker {background-position:-760px 0}
|
953 |
-
|
954 |
-
/* Plugins */
|
955 |
-
.wp_themeSkin span.mce_advhr {background-position:-0px -20px}
|
956 |
-
.wp_themeSkin span.mce_ltr {background-position:-20px -20px}
|
957 |
-
.wp_themeSkin span.mce_rtl {background-position:-40px -20px}
|
958 |
-
.wp_themeSkin span.mce_emotions {background-position:-60px -20px}
|
959 |
-
.wp_themeSkin span.mce_fullpage {background-position:-80px -20px}
|
960 |
-
.wp_themeSkin span.mce_iespell {background-position:-120px -20px}
|
961 |
-
.wp_themeSkin span.mce_insertdate {background-position:-140px -20px}
|
962 |
-
.wp_themeSkin span.mce_inserttime {background-position:-160px -20px}
|
963 |
-
.wp_themeSkin span.mce_absolute {background-position:-180px -20px}
|
964 |
-
.wp_themeSkin span.mce_backward {background-position:-200px -20px}
|
965 |
-
.wp_themeSkin span.mce_forward {background-position:-220px -20px}
|
966 |
-
.wp_themeSkin span.mce_insert_layer {background-position:-240px -20px}
|
967 |
-
.wp_themeSkin span.mce_insertlayer {background-position:-260px -20px}
|
968 |
-
.wp_themeSkin span.mce_movebackward {background-position:-280px -20px}
|
969 |
-
.wp_themeSkin span.mce_moveforward {background-position:-300px -20px}
|
970 |
-
.wp_themeSkin span.mce_media {background-position:-320px -20px}
|
971 |
-
.wp_themeSkin span.mce_nonbreaking {background-position:-340px -20px}
|
972 |
-
.wp_themeSkin span.mce_selectall {background-position:-400px -20px}
|
973 |
-
.wp_themeSkin span.mce_preview {background-position:-420px -20px}
|
974 |
-
.wp_themeSkin span.mce_print {background-position:-440px -20px}
|
975 |
-
.wp_themeSkin span.mce_cancel {background-position:-460px -20px}
|
976 |
-
.wp_themeSkin span.mce_save {background-position:-480px -20px}
|
977 |
-
.wp_themeSkin span.mce_replace {background-position:-500px -20px}
|
978 |
-
.wp_themeSkin span.mce_search {background-position:-520px -20px}
|
979 |
-
.wp_themeSkin span.mce_styleprops {background-position:-560px -20px}
|
980 |
-
.wp_themeSkin span.mce_table {background-position:-580px -20px}
|
981 |
-
.wp_themeSkin span.mce_cell_props {background-position:-600px -20px}
|
982 |
-
.wp_themeSkin span.mce_delete_table {background-position:-620px -20px}
|
983 |
-
.wp_themeSkin span.mce_delete_col {background-position:-640px -20px}
|
984 |
-
.wp_themeSkin span.mce_delete_row {background-position:-660px -20px}
|
985 |
-
.wp_themeSkin span.mce_col_after {background-position:-680px -20px}
|
986 |
-
.wp_themeSkin span.mce_col_before {background-position:-700px -20px}
|
987 |
-
.wp_themeSkin span.mce_row_after {background-position:-720px -20px}
|
988 |
-
.wp_themeSkin span.mce_row_before {background-position:-740px -20px}
|
989 |
-
.wp_themeSkin span.mce_merge_cells {background-position:-760px -20px}
|
990 |
-
.wp_themeSkin span.mce_table_props {background-position:-980px -20px}
|
991 |
-
.wp_themeSkin span.mce_row_props {background-position:-780px -20px}
|
992 |
-
.wp_themeSkin span.mce_split_cells {background-position:-800px -20px}
|
993 |
-
.wp_themeSkin span.mce_template {background-position:-820px -20px}
|
994 |
-
.wp_themeSkin span.mce_visualchars {background-position:-840px -20px}
|
995 |
-
.wp_themeSkin span.mce_abbr {background-position:-860px -20px}
|
996 |
-
.wp_themeSkin span.mce_acronym {background-position:-880px -20px}
|
997 |
-
.wp_themeSkin span.mce_attribs {background-position:-900px -20px}
|
998 |
-
.wp_themeSkin span.mce_cite {background-position:-920px -20px}
|
999 |
-
.wp_themeSkin span.mce_del {background-position:-940px -20px}
|
1000 |
-
.wp_themeSkin span.mce_ins {background-position:-960px -20px}
|
1001 |
-
.wp_themeSkin span.mce_pagebreak {background-position:0 -40px}
|
1002 |
-
.wp_themeSkin span.mce_restoredraft {background-position:-20px -40px}
|
1003 |
-
.wp_themeSkin span.mce_visualblocks {background-position: -40px -40px}
|
1004 |
-
|
1005 |
-
/* border */
|
1006 |
-
.wp_themeSkin .mceExternalToolbar,
|
1007 |
-
.wp_themeSkin .mceButton,
|
1008 |
-
.wp_themeSkin a.mceButtonEnabled:hover,
|
1009 |
-
.wp_themeSkin a.mceButtonActive,
|
1010 |
-
.wp_themeSkin a.mceButtonSelected,
|
1011 |
-
.wp_themeSkin .mceListBox .mceText,
|
1012 |
-
.wp_themeSkin .mceListBox .mceOpen,
|
1013 |
-
.wp_themeSkin select.mceListBox,
|
1014 |
-
.wp_themeSkin .mceSplitButton a.mceAction,
|
1015 |
-
.wp_themeSkin .mceSplitButton a.mceOpen,
|
1016 |
-
.wp_themeSkin .mceSplitButton a.mceOpen:hover,
|
1017 |
-
.wp_themeSkin .mceSplitButtonSelected a.mceOpen,
|
1018 |
-
.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction,
|
1019 |
-
.wp_themeSkin .mceSplitButton a.mceAction:hover,
|
1020 |
-
.wp_themeSkin div.mceColorSplitMenu table,
|
1021 |
-
.wp_themeSkin .mceColorSplitMenu a,
|
1022 |
-
.wp_themeSkin .mceColorSplitMenu a.mceMoreColors,
|
1023 |
-
.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover,
|
1024 |
-
.wp_themeSkin a.mceMoreColors:hover,
|
1025 |
-
.wp_themeSkin .mceMenu {
|
1026 |
-
border-style: solid;
|
1027 |
-
border-width: 1px;
|
1028 |
-
}
|
1029 |
-
|
1030 |
-
.wp_themeSkin .mceListBox .mceText {
|
1031 |
-
border-right: 0 none;
|
1032 |
-
}
|
1033 |
-
|
1034 |
-
.wp_themeSkin iframe {
|
1035 |
-
background: transparent;
|
1036 |
-
}
|
1037 |
-
|
1038 |
-
.wp_themeSkin .mceButton {
|
1039 |
-
border-color: transparent;
|
1040 |
-
}
|
1041 |
-
|
1042 |
-
.wp_themeSkin .mceListBox .mceText,
|
1043 |
-
.wp_themeSkin .mceListBox .mceOpen {
|
1044 |
-
border-color: transparent;
|
1045 |
-
}
|
1046 |
-
|
1047 |
-
.wp_themeSkin a.mceButtonEnabled:hover,
|
1048 |
-
.wp_themeSkin table.mceSplitButton:hover {
|
1049 |
-
border-color: #bbb;
|
1050 |
-
background: #eee;
|
1051 |
-
background-image: -webkit-gradient(linear, left bottom, left top, from(#e5e5e5), to(#fff));
|
1052 |
-
background-image: -webkit-linear-gradient(bottom, #e5e5e5, #fff);
|
1053 |
-
background-image: -moz-linear-gradient(bottom, #e5e5e5, #fff);
|
1054 |
-
background-image: -o-linear-gradient(bottom, #e5e5e5, #fff);
|
1055 |
-
background-image: linear-gradient(to top, #e5e5e5, #fff);
|
1056 |
-
}
|
1057 |
-
|
1058 |
-
.wp_themeSkin a.mceButton:active,
|
1059 |
-
.wp_themeSkin a.mceButtonEnabled:active,
|
1060 |
-
.wp_themeSkin a.mceButtonSelected:active,
|
1061 |
-
.wp_themeSkin a.mceButtonActive,
|
1062 |
-
.wp_themeSkin a.mceButtonActive:active,
|
1063 |
-
.wp_themeSkin a.mceButtonActive:hover,
|
1064 |
-
.wp_themeSkin .mceSplitButtonSelected table,
|
1065 |
-
.wp_themeSkin .mceSplitButtonSelected table:hover {
|
1066 |
-
outline: none;
|
1067 |
-
border-color: #999 #ccc #ccc #999;
|
1068 |
-
background: #eee;
|
1069 |
-
background-image: -webkit-gradient(linear, left bottom, left top, from(#f6f6f6), to(#e3e3e3));
|
1070 |
-
background-image: -webkit-linear-gradient(bottom, #f6f6f6, #e3e3e3);
|
1071 |
-
background-image: -moz-linear-gradient(bottom, #f6f6f6, #e3e3e3);
|
1072 |
-
background-image: -o-linear-gradient(bottom, #f6f6f6, #e3e3e3);
|
1073 |
-
background-image: linear-gradient(to top, #f6f6f6, #e3e3e3);
|
1074 |
-
}
|
1075 |
-
|
1076 |
-
.wp_themeSkin .mceSplitButtonSelected table a.mceOpen,
|
1077 |
-
.wp_themeSkin .mceSplitButtonSelected table a.mceAction {
|
1078 |
-
border-color: #999 #ccc #ccc #999;
|
1079 |
-
}
|
1080 |
-
|
1081 |
-
.wp_themeSkin .mceButtonDisabled {
|
1082 |
-
border-color: transparent;
|
1083 |
-
}
|
1084 |
-
|
1085 |
-
.wp_themeSkin .mceListBox .mceOpen {
|
1086 |
-
border-left: 0;
|
1087 |
-
}
|
1088 |
-
|
1089 |
-
.wp_themeSkin .mceListBoxEnabled:hover,
|
1090 |
-
.wp_themeSkin .mceListBoxEnabled:active,
|
1091 |
-
.wp_themeSkin .mceListBoxHover,
|
1092 |
-
.wp_themeSkin .mceListBoxHover:active,
|
1093 |
-
.wp_themeSkin .mceListBoxSelected {
|
1094 |
-
-webkit-box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .3);
|
1095 |
-
box-shadow: inset 0 1px 1px -1px rgba(0, 0, 0, .3);
|
1096 |
-
border-color: #bbb;
|
1097 |
-
}
|
1098 |
-
|
1099 |
-
/* SplitButton */
|
1100 |
-
.wp_themeSkin .mceSplitButton .mceLast span.mceOpen .mceIconOnly {
|
1101 |
-
display: block;
|
1102 |
-
}
|
1103 |
-
|
1104 |
-
.wp_themeSkin .mceSplitButton a.mceAction,
|
1105 |
-
.wp_themeSkin .mceSplitButton a.mceOpen {
|
1106 |
-
border-color: transparent;
|
1107 |
-
}
|
1108 |
-
|
1109 |
-
.wp_themeSkin .mceSplitButton:hover a {
|
1110 |
-
border-color: #bbb;
|
1111 |
-
}
|
1112 |
-
|
1113 |
-
.wp_themeSkin .mceSplitButtonEnabled a.mceOpen,
|
1114 |
-
.wp_themeSkin .mceSplitButtonSelected a.mceOpen,
|
1115 |
-
.wp_themeSkin .mceSplitButtonActive a.mceOpen,
|
1116 |
-
.wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen {
|
1117 |
-
background-image: url("../../../../../wp-includes/images/down_arrow.gif");
|
1118 |
-
background-position: 1px 2px;
|
1119 |
-
background-repeat: no-repeat;
|
1120 |
-
border-left: 0;
|
1121 |
-
}
|
1122 |
-
|
1123 |
-
.wp_themeSkin .mceSplitButtonActive td {
|
1124 |
-
-webkit-border-radius: 3px;
|
1125 |
-
border-radius: 3px;
|
1126 |
-
}
|
1127 |
-
|
1128 |
-
.wp_themeSkin .mceColorSplitMenu a.mceMoreColors:hover {
|
1129 |
-
border-color: #0A246A;
|
1130 |
-
background-color: #B6BDD2;
|
1131 |
-
}
|
1132 |
-
|
1133 |
-
.wp_themeSkin a.mceMoreColors:hover {
|
1134 |
-
border-color: #0A246A;
|
1135 |
-
}
|
1136 |
-
|
1137 |
-
.wp_themeSkin .mceMenuItemDisabled .mceText {
|
1138 |
-
color: #888;
|
1139 |
-
}
|
1140 |
-
|
1141 |
-
#mceModalBlocker {
|
1142 |
-
background: #000;
|
1143 |
-
opacity: 0.7;
|
1144 |
-
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
|
1145 |
-
filter: alpha(opacity=70);
|
1146 |
-
}
|
1147 |
-
|
1148 |
-
/* WP specific */
|
1149 |
-
.wp-editor-wrap {
|
1150 |
-
position: relative;
|
1151 |
-
}
|
1152 |
-
|
1153 |
-
.wp-editor-tools {
|
1154 |
-
position: relative;
|
1155 |
-
z-index: 1;
|
1156 |
-
}
|
1157 |
-
|
1158 |
-
.wp-editor-container {
|
1159 |
-
clear: both;
|
1160 |
-
}
|
1161 |
-
|
1162 |
-
.wp-editor-area {
|
1163 |
-
font-family: Consolas, Monaco, monospace;
|
1164 |
-
font-size: 13px;
|
1165 |
-
padding: 10px;
|
1166 |
-
margin: 1px 0 0;
|
1167 |
-
line-height: 150%;
|
1168 |
-
border: 0 none;
|
1169 |
-
outline: none;
|
1170 |
-
display: block;
|
1171 |
-
resize: vertical;
|
1172 |
-
-moz-box-sizing: border-box;
|
1173 |
-
-webkit-box-sizing: border-box;
|
1174 |
-
box-sizing: border-box;
|
1175 |
-
}
|
1176 |
-
|
1177 |
-
.wp-editor-tools {
|
1178 |
-
padding: 0;
|
1179 |
-
}
|
1180 |
-
|
1181 |
-
.wp-editor-container textarea.wp-editor-area {
|
1182 |
-
width: 100%;
|
1183 |
-
margin: 0;
|
1184 |
-
-webkit-box-shadow: none;
|
1185 |
-
box-shadow: none;
|
1186 |
-
}
|
1187 |
-
|
1188 |
-
.quicktags-toolbar,
|
1189 |
-
.wp_themeSkin tr.mceFirst td.mceToolbar {
|
1190 |
-
border-bottom: 1px solid #dedede;
|
1191 |
-
background: #f5f5f5;
|
1192 |
-
}
|
1193 |
-
|
1194 |
-
.wp-editor-tabs {
|
1195 |
-
float: right;
|
1196 |
-
}
|
1197 |
-
|
1198 |
-
.wp-switch-editor {
|
1199 |
-
background: #ebebeb;
|
1200 |
-
border: 1px solid #dedede;
|
1201 |
-
color: #777;
|
1202 |
-
cursor: pointer;
|
1203 |
-
float: right;
|
1204 |
-
font: 13px/19px "Open Sans", sans-serif;
|
1205 |
-
height: 19px;
|
1206 |
-
margin: 5px 0 0 5px;
|
1207 |
-
padding: 3px 8px 4px;
|
1208 |
-
position: relative;
|
1209 |
-
top: 1px;
|
1210 |
-
}
|
1211 |
-
|
1212 |
-
.wp-switch-editor:active {
|
1213 |
-
background-color: #f1f1f1;
|
1214 |
-
}
|
1215 |
-
|
1216 |
-
.wp-switch-editor:hover {
|
1217 |
-
text-decoration: none !important;
|
1218 |
-
background: #fff;
|
1219 |
-
}
|
1220 |
-
|
1221 |
-
.js .tmce-active .wp-editor-area {
|
1222 |
-
color: white;
|
1223 |
-
}
|
1224 |
-
|
1225 |
-
.tmce-active .quicktags-toolbar {
|
1226 |
-
display: none;
|
1227 |
-
}
|
1228 |
-
|
1229 |
-
.tmce-active .switch-tmce,
|
1230 |
-
.html-active .switch-html {
|
1231 |
-
background: #f5f5f5;
|
1232 |
-
color: #555;
|
1233 |
-
height: 20px;
|
1234 |
-
border-bottom: none;
|
1235 |
-
}
|
1236 |
-
|
1237 |
-
.wp-media-buttons {
|
1238 |
-
float: left;
|
1239 |
-
}
|
1240 |
-
|
1241 |
-
.wp-media-buttons .button {
|
1242 |
-
margin-right: 5px;
|
1243 |
-
margin-bottom: 4px;
|
1244 |
-
padding-left: 7px;
|
1245 |
-
padding-right: 7px;
|
1246 |
-
}
|
1247 |
-
|
1248 |
-
.wp-media-buttons .button:active {
|
1249 |
-
position: relative;
|
1250 |
-
top: 1px;
|
1251 |
-
margin-top: -1px;
|
1252 |
-
margin-bottom: 1px;
|
1253 |
-
}
|
1254 |
-
|
1255 |
-
.wp-media-buttons .insert-media {
|
1256 |
-
padding-left: 5px;
|
1257 |
-
}
|
1258 |
-
|
1259 |
-
.wp-media-buttons a {
|
1260 |
-
text-decoration: none;
|
1261 |
-
color: #464646;
|
1262 |
-
font-size: 12px;
|
1263 |
-
}
|
1264 |
-
|
1265 |
-
.wp-media-buttons img {
|
1266 |
-
padding: 0 4px;
|
1267 |
-
vertical-align: middle;
|
1268 |
-
}
|
1269 |
-
|
1270 |
-
.wp-media-buttons span.wp-media-buttons-icon {
|
1271 |
-
display: inline-block;
|
1272 |
-
width: 18px;
|
1273 |
-
height: 18px;
|
1274 |
-
vertical-align: text-top;
|
1275 |
-
margin: 0 2px;
|
1276 |
-
}
|
1277 |
-
|
1278 |
-
.wp-media-buttons .add_media span.wp-media-buttons-icon {
|
1279 |
-
background: none;
|
1280 |
-
}
|
1281 |
-
|
1282 |
-
.wp-media-buttons .add_media span.wp-media-buttons-icon:before {
|
1283 |
-
font: normal 18px/1 'dashicons';
|
1284 |
-
speak: none;
|
1285 |
-
-webkit-font-smoothing: antialiased;
|
1286 |
-
-moz-osx-font-smoothing: grayscale;
|
1287 |
-
}
|
1288 |
-
|
1289 |
-
.wp-media-buttons .add_media span.wp-media-buttons-icon:before {
|
1290 |
-
content: '\f104';
|
1291 |
-
}
|
1292 |
-
|
1293 |
-
.quicktags-toolbar {
|
1294 |
-
border-bottom-style: solid;
|
1295 |
-
border-bottom-width: 1px;
|
1296 |
-
-webkit-border-top-right-radius: 3px;
|
1297 |
-
-webkit-border-top-left-radius: 3px;
|
1298 |
-
border-top-right-radius: 3px;
|
1299 |
-
border-top-left-radius: 3px;
|
1300 |
-
padding: 2px 8px 0;
|
1301 |
-
min-height: 29px;
|
1302 |
-
}
|
1303 |
-
|
1304 |
-
.quicktags-toolbar > div {
|
1305 |
-
padding: 2px 4px 0;
|
1306 |
-
}
|
1307 |
-
|
1308 |
-
.quicktags-toolbar input {
|
1309 |
-
margin: 2px 1px 4px;
|
1310 |
-
line-height: 18px;
|
1311 |
-
display: inline-block;
|
1312 |
-
min-width: 26px;
|
1313 |
-
padding: 2px 4px;
|
1314 |
-
font: 12px/18px "Open Sans", sans-serif;
|
1315 |
-
color: #464646;
|
1316 |
-
border: 1px solid #c3c3c3;
|
1317 |
-
-webkit-border-radius: 3px;
|
1318 |
-
border-radius: 3px;
|
1319 |
-
background: #eee;
|
1320 |
-
background-image: -webkit-gradient(linear, left bottom, left top, from(#e3e3e3), to(#fff));
|
1321 |
-
background-image: -webkit-linear-gradient(bottom, #e3e3e3, #fff);
|
1322 |
-
background-image: -moz-linear-gradient(bottom, #e3e3e3, #fff);
|
1323 |
-
background-image: -o-linear-gradient(bottom, #e3e3e3, #fff);
|
1324 |
-
background-image: linear-gradient(to top, #e3e3e3, #fff);
|
1325 |
-
}
|
1326 |
-
|
1327 |
-
.quicktags-toolbar input:hover {
|
1328 |
-
border-color: #aaa;
|
1329 |
-
background: #ddd;
|
1330 |
-
}
|
1331 |
-
|
1332 |
-
.quicktags-toolbar input[value="link"] {
|
1333 |
-
text-decoration: underline;
|
1334 |
-
}
|
1335 |
-
|
1336 |
-
.quicktags-toolbar input[value="del"] {
|
1337 |
-
text-decoration: line-through;
|
1338 |
-
}
|
1339 |
-
|
1340 |
-
.quicktags-toolbar input[value="i"] {
|
1341 |
-
font-style: italic;
|
1342 |
-
}
|
1343 |
-
|
1344 |
-
.quicktags-toolbar input[value="b"] {
|
1345 |
-
font-weight: bold;
|
1346 |
-
}
|
1347 |
-
|
1348 |
-
#wp_editbtns,
|
1349 |
-
#wp_gallerybtns {
|
1350 |
-
padding: 2px;
|
1351 |
-
position: absolute;
|
1352 |
-
display: none;
|
1353 |
-
z-index: 155000;
|
1354 |
-
}
|
1355 |
-
|
1356 |
-
#wp_editimgbtn,
|
1357 |
-
#wp_delimgbtn,
|
1358 |
-
#wp_editgallery,
|
1359 |
-
#wp_delgallery {
|
1360 |
-
border-color: #999;
|
1361 |
-
background-color: #eee;
|
1362 |
-
margin: 2px;
|
1363 |
-
padding: 2px;
|
1364 |
-
border-width: 1px;
|
1365 |
-
border-style: solid;
|
1366 |
-
-webkit-border-radius: 3px;
|
1367 |
-
border-radius: 3px;
|
1368 |
-
}
|
1369 |
-
|
1370 |
-
#wp_editimgbtn:hover,
|
1371 |
-
#wp_delimgbtn:hover,
|
1372 |
-
#wp_editgallery:hover,
|
1373 |
-
#wp_delgallery:hover {
|
1374 |
-
border-color: #555;
|
1375 |
-
background-color: #ccc;
|
1376 |
-
}
|
1377 |
-
|
1378 |
-
/*------------------------------------------------------------------------------
|
1379 |
-
wp-link
|
1380 |
-
------------------------------------------------------------------------------*/
|
1381 |
-
|
1382 |
-
#wp-link {
|
1383 |
-
background-color: #F5F5F5;
|
1384 |
-
line-height: 1.4em;
|
1385 |
-
font-size: 12px;
|
1386 |
-
}
|
1387 |
-
|
1388 |
-
#wp-link ol,
|
1389 |
-
#wp-link ul {
|
1390 |
-
list-style: none;
|
1391 |
-
margin: 0;
|
1392 |
-
padding: 0;
|
1393 |
-
}
|
1394 |
-
|
1395 |
-
#wp-link input[type="text"] {
|
1396 |
-
-webkit-box-sizing: border-box;
|
1397 |
-
}
|
1398 |
-
|
1399 |
-
#wp-link input[type="text"],
|
1400 |
-
#wp-link textarea {
|
1401 |
-
border-width: 1px;
|
1402 |
-
border-style: solid;
|
1403 |
-
-webkit-border-radius: 4px;
|
1404 |
-
border-radius: 4px;
|
1405 |
-
font-size: 12px;
|
1406 |
-
margin: 1px;
|
1407 |
-
padding: 3px;
|
1408 |
-
}
|
1409 |
-
|
1410 |
-
#wp-link #link-options {
|
1411 |
-
padding: 10px 0 14px;
|
1412 |
-
border-bottom: 1px solid #dfdfdf;
|
1413 |
-
margin: 0 6px 14px;
|
1414 |
-
}
|
1415 |
-
|
1416 |
-
#wp-link p.howto {
|
1417 |
-
margin: 3px;
|
1418 |
-
}
|
1419 |
-
|
1420 |
-
#wp-link #internal-toggle {
|
1421 |
-
display: inline-block;
|
1422 |
-
cursor: pointer;
|
1423 |
-
padding-left: 18px;
|
1424 |
-
}
|
1425 |
-
|
1426 |
-
#wp-link .toggle-arrow {
|
1427 |
-
background: transparent url("../../../../../wp-includes/images/toggle-arrow.png") top left no-repeat;
|
1428 |
-
height: 23px;
|
1429 |
-
line-height: 23px;
|
1430 |
-
}
|
1431 |
-
|
1432 |
-
#wp-link .toggle-arrow-active {
|
1433 |
-
background-position: center left;
|
1434 |
-
}
|
1435 |
-
|
1436 |
-
#wp-link label input[type="text"] {
|
1437 |
-
width: 360px;
|
1438 |
-
margin-top: 5px;
|
1439 |
-
}
|
1440 |
-
|
1441 |
-
#wp-link #link-options label span,
|
1442 |
-
#wp-link #search-panel label span.search-label {
|
1443 |
-
display: inline-block;
|
1444 |
-
width: 80px;
|
1445 |
-
text-align: right;
|
1446 |
-
padding-right: 5px;
|
1447 |
-
}
|
1448 |
-
|
1449 |
-
#wp-link .link-search-field {
|
1450 |
-
float: left;
|
1451 |
-
width: 220px;
|
1452 |
-
}
|
1453 |
-
|
1454 |
-
#wp-link .link-search-wrapper {
|
1455 |
-
margin: 5px 6px 9px;
|
1456 |
-
display: block;
|
1457 |
-
overflow: hidden;
|
1458 |
-
}
|
1459 |
-
|
1460 |
-
#wp-link .link-search-wrapper span {
|
1461 |
-
float: left;
|
1462 |
-
margin-top: 4px;
|
1463 |
-
}
|
1464 |
-
|
1465 |
-
#wp-link .link-search-wrapper .spinner {
|
1466 |
-
display: none;
|
1467 |
-
vertical-align: text-bottom;
|
1468 |
-
}
|
1469 |
-
|
1470 |
-
#wp-link .link-target {
|
1471 |
-
width: auto;
|
1472 |
-
padding: 3px 0 0;
|
1473 |
-
margin: 0 0 0 87px;
|
1474 |
-
font-size: 11px;
|
1475 |
-
}
|
1476 |
-
|
1477 |
-
#wp-link .query-results {
|
1478 |
-
border: 1px #dfdfdf solid;
|
1479 |
-
margin: 0 5px 5px;
|
1480 |
-
background: #fff;
|
1481 |
-
height: 185px;
|
1482 |
-
overflow: auto;
|
1483 |
-
position: relative;
|
1484 |
-
}
|
1485 |
-
|
1486 |
-
#wp-link li,
|
1487 |
-
#wp-link .query-notice {
|
1488 |
-
clear: both;
|
1489 |
-
margin-bottom: 0;
|
1490 |
-
border-bottom: 1px solid #f1f1f1;
|
1491 |
-
color: #333;
|
1492 |
-
padding: 4px 6px;
|
1493 |
-
cursor: pointer;
|
1494 |
-
position: relative;
|
1495 |
-
}
|
1496 |
-
|
1497 |
-
#wp-link li:hover {
|
1498 |
-
background: #eaf2fa;
|
1499 |
-
color: #151515;
|
1500 |
-
}
|
1501 |
-
|
1502 |
-
#wp-link li.unselectable {
|
1503 |
-
border-bottom: 1px solid #dfdfdf;
|
1504 |
-
}
|
1505 |
-
|
1506 |
-
#wp-link li.unselectable:hover {
|
1507 |
-
background: #fff;
|
1508 |
-
cursor: auto;
|
1509 |
-
color: #333;
|
1510 |
-
}
|
1511 |
-
|
1512 |
-
#wp-link li.selected {
|
1513 |
-
background: #ddd;
|
1514 |
-
color: #333;
|
1515 |
-
}
|
1516 |
-
|
1517 |
-
#wp-link li.selected .item-title {
|
1518 |
-
font-weight: bold;
|
1519 |
-
}
|
1520 |
-
|
1521 |
-
#wp-link .item-title {
|
1522 |
-
display: inline-block;
|
1523 |
-
width: 80%;
|
1524 |
-
}
|
1525 |
-
|
1526 |
-
#wp-link .item-info {
|
1527 |
-
text-transform: uppercase;
|
1528 |
-
color: #666;
|
1529 |
-
font-size: 11px;
|
1530 |
-
position: absolute;
|
1531 |
-
right: 5px;
|
1532 |
-
top: 4px;
|
1533 |
-
bottom: 0;
|
1534 |
-
}
|
1535 |
-
|
1536 |
-
#wp-link #search-results {
|
1537 |
-
display: none;
|
1538 |
-
}
|
1539 |
-
|
1540 |
-
#wp-link #search-panel {
|
1541 |
-
float: left;
|
1542 |
-
width: 100%;
|
1543 |
-
}
|
1544 |
-
|
1545 |
-
#wp-link .river-waiting {
|
1546 |
-
display: none;
|
1547 |
-
padding: 10px 0;
|
1548 |
-
}
|
1549 |
-
|
1550 |
-
#wp-link .river-waiting .spinner {
|
1551 |
-
margin: 0 auto;
|
1552 |
-
display: block;
|
1553 |
-
}
|
1554 |
-
|
1555 |
-
#wp-link .submitbox {
|
1556 |
-
padding: 5px 10px;
|
1557 |
-
font-size: 11px;
|
1558 |
-
overflow: auto;
|
1559 |
-
height: 29px;
|
1560 |
-
}
|
1561 |
-
|
1562 |
-
#wp-link-cancel {
|
1563 |
-
line-height: 25px;
|
1564 |
-
float: left;
|
1565 |
-
}
|
1566 |
-
|
1567 |
-
#wp-link-update {
|
1568 |
-
line-height: 23px;
|
1569 |
-
float: right;
|
1570 |
-
}
|
1571 |
-
|
1572 |
-
/*!
|
1573 |
-
* jQuery UI CSS Framework 1.10.1
|
1574 |
-
* http://jqueryui.com
|
1575 |
-
*
|
1576 |
-
* Copyright 2013 jQuery Foundation and other contributors
|
1577 |
-
* Released under the MIT license.
|
1578 |
-
* http://jquery.org/license
|
1579 |
-
*
|
1580 |
-
* http://docs.jquery.com/UI/Theming/API
|
1581 |
-
*/
|
1582 |
-
|
1583 |
-
/* Layout helpers
|
1584 |
-
----------------------------------*/
|
1585 |
-
.ui-helper-hidden {
|
1586 |
-
display: none;
|
1587 |
-
}
|
1588 |
-
.ui-helper-hidden-accessible {
|
1589 |
-
border: 0;
|
1590 |
-
clip: rect(0 0 0 0);
|
1591 |
-
height: 1px;
|
1592 |
-
margin: -1px;
|
1593 |
-
overflow: hidden;
|
1594 |
-
padding: 0;
|
1595 |
-
position: absolute;
|
1596 |
-
width: 1px;
|
1597 |
-
}
|
1598 |
-
.ui-helper-reset {
|
1599 |
-
margin: 0;
|
1600 |
-
padding: 0;
|
1601 |
-
border: 0;
|
1602 |
-
outline: 0;
|
1603 |
-
line-height: 1.3;
|
1604 |
-
text-decoration: none;
|
1605 |
-
font-size: 100%;
|
1606 |
-
list-style: none;
|
1607 |
-
}
|
1608 |
-
.ui-helper-clearfix:before,
|
1609 |
-
.ui-helper-clearfix:after {
|
1610 |
-
content: "";
|
1611 |
-
display: table;
|
1612 |
-
border-collapse: collapse;
|
1613 |
-
}
|
1614 |
-
.ui-helper-clearfix:after {
|
1615 |
-
clear: both;
|
1616 |
-
}
|
1617 |
-
.ui-helper-clearfix {
|
1618 |
-
min-height: 0; /* support: IE7 */
|
1619 |
-
}
|
1620 |
-
.ui-helper-zfix {
|
1621 |
-
width: 100%;
|
1622 |
-
height: 100%;
|
1623 |
-
top: 0;
|
1624 |
-
left: 0;
|
1625 |
-
position: absolute;
|
1626 |
-
opacity: 0;
|
1627 |
-
filter:Alpha(Opacity=0);
|
1628 |
-
}
|
1629 |
-
|
1630 |
-
.ui-front {
|
1631 |
-
z-index: 100;
|
1632 |
-
}
|
1633 |
-
|
1634 |
-
|
1635 |
-
/* Interaction Cues
|
1636 |
-
----------------------------------*/
|
1637 |
-
.ui-state-disabled {
|
1638 |
-
cursor: default !important;
|
1639 |
-
}
|
1640 |
-
|
1641 |
-
|
1642 |
-
/* Icons
|
1643 |
-
----------------------------------*/
|
1644 |
-
|
1645 |
-
/* states and images */
|
1646 |
-
.ui-icon {
|
1647 |
-
display: block;
|
1648 |
-
text-indent: -99999px;
|
1649 |
-
overflow: hidden;
|
1650 |
-
background-repeat: no-repeat;
|
1651 |
-
}
|
1652 |
-
|
1653 |
-
|
1654 |
-
/* Misc visuals
|
1655 |
-
----------------------------------*/
|
1656 |
-
|
1657 |
-
/* Overlays */
|
1658 |
-
.ui-widget-overlay {
|
1659 |
-
position: fixed;
|
1660 |
-
top: 0;
|
1661 |
-
left: 0;
|
1662 |
-
width: 100%;
|
1663 |
-
height: 100%;
|
1664 |
-
}
|
1665 |
-
|
1666 |
-
|
1667 |
-
/*!
|
1668 |
-
* jQuery UI Resizable 1.10.1
|
1669 |
-
* http://jqueryui.com
|
1670 |
-
*
|
1671 |
-
* Copyright 2013 jQuery Foundation and other contributors
|
1672 |
-
* Released under the MIT license.
|
1673 |
-
* http://jquery.org/license
|
1674 |
-
*
|
1675 |
-
* http://docs.jquery.com/UI/Resizable#theming
|
1676 |
-
*/
|
1677 |
-
.ui-resizable {
|
1678 |
-
position: relative;
|
1679 |
-
}
|
1680 |
-
.ui-resizable-handle {
|
1681 |
-
position: absolute;
|
1682 |
-
font-size: 0.1px;
|
1683 |
-
display: block;
|
1684 |
-
}
|
1685 |
-
.ui-resizable-disabled .ui-resizable-handle,
|
1686 |
-
.ui-resizable-autohide .ui-resizable-handle {
|
1687 |
-
display: none;
|
1688 |
-
}
|
1689 |
-
.ui-resizable-n {
|
1690 |
-
cursor: n-resize;
|
1691 |
-
height: 7px;
|
1692 |
-
width: 100%;
|
1693 |
-
top: -5px;
|
1694 |
-
left: 0;
|
1695 |
-
}
|
1696 |
-
.ui-resizable-s {
|
1697 |
-
cursor: s-resize;
|
1698 |
-
height: 7px;
|
1699 |
-
width: 100%;
|
1700 |
-
bottom: -5px;
|
1701 |
-
left: 0;
|
1702 |
-
}
|
1703 |
-
.ui-resizable-e {
|
1704 |
-
cursor: e-resize;
|
1705 |
-
width: 7px;
|
1706 |
-
right: -5px;
|
1707 |
-
top: 0;
|
1708 |
-
height: 100%;
|
1709 |
-
}
|
1710 |
-
.ui-resizable-w {
|
1711 |
-
cursor: w-resize;
|
1712 |
-
width: 7px;
|
1713 |
-
left: -5px;
|
1714 |
-
top: 0;
|
1715 |
-
height: 100%;
|
1716 |
-
}
|
1717 |
-
.ui-resizable-se {
|
1718 |
-
cursor: se-resize;
|
1719 |
-
width: 12px;
|
1720 |
-
height: 12px;
|
1721 |
-
right: 1px;
|
1722 |
-
bottom: 1px;
|
1723 |
-
}
|
1724 |
-
.ui-resizable-sw {
|
1725 |
-
cursor: sw-resize;
|
1726 |
-
width: 9px;
|
1727 |
-
height: 9px;
|
1728 |
-
left: -5px;
|
1729 |
-
bottom: -5px;
|
1730 |
-
}
|
1731 |
-
.ui-resizable-nw {
|
1732 |
-
cursor: nw-resize;
|
1733 |
-
width: 9px;
|
1734 |
-
height: 9px;
|
1735 |
-
left: -5px;
|
1736 |
-
top: -5px;
|
1737 |
-
}
|
1738 |
-
.ui-resizable-ne {
|
1739 |
-
cursor: ne-resize;
|
1740 |
-
width: 9px;
|
1741 |
-
height: 9px;
|
1742 |
-
right: -5px;
|
1743 |
-
top: -5px;
|
1744 |
-
}
|
1745 |
-
|
1746 |
-
/*!
|
1747 |
-
* jQuery UI Dialog 1.10.1
|
1748 |
-
* http://jqueryui.com
|
1749 |
-
*
|
1750 |
-
* Copyright 2013 jQuery Foundation and other contributors
|
1751 |
-
* Released under the MIT license.
|
1752 |
-
* http://jquery.org/license
|
1753 |
-
*
|
1754 |
-
* http://docs.jquery.com/UI/Dialog#theming
|
1755 |
-
*/
|
1756 |
-
.ui-dialog {
|
1757 |
-
position: absolute;
|
1758 |
-
top: 0;
|
1759 |
-
/* @noflip */
|
1760 |
-
left: 0;
|
1761 |
-
padding: .2em;
|
1762 |
-
outline: 0;
|
1763 |
-
}
|
1764 |
-
.ui-dialog .ui-dialog-titlebar {
|
1765 |
-
padding: .4em 1em;
|
1766 |
-
position: relative;
|
1767 |
-
}
|
1768 |
-
.ui-dialog .ui-dialog-title {
|
1769 |
-
float: left;
|
1770 |
-
margin: .1em 0;
|
1771 |
-
white-space: nowrap;
|
1772 |
-
width: 90%;
|
1773 |
-
overflow: hidden;
|
1774 |
-
text-overflow: ellipsis;
|
1775 |
-
}
|
1776 |
-
.ui-dialog .ui-dialog-titlebar-close {
|
1777 |
-
position: absolute;
|
1778 |
-
right: .3em;
|
1779 |
-
top: 50%;
|
1780 |
-
width: 21px;
|
1781 |
-
margin: -10px 0 0 0;
|
1782 |
-
padding: 1px;
|
1783 |
-
height: 20px;
|
1784 |
-
}
|
1785 |
-
.ui-dialog .ui-dialog-content {
|
1786 |
-
position: relative;
|
1787 |
-
border: 0;
|
1788 |
-
padding: .5em 1em;
|
1789 |
-
background: none;
|
1790 |
-
overflow: auto;
|
1791 |
-
}
|
1792 |
-
.ui-dialog .ui-dialog-buttonpane {
|
1793 |
-
text-align: left;
|
1794 |
-
border-width: 1px 0 0 0;
|
1795 |
-
background-image: none;
|
1796 |
-
margin-top: .5em;
|
1797 |
-
padding: .3em 1em .5em .4em;
|
1798 |
-
}
|
1799 |
-
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
|
1800 |
-
float: right;
|
1801 |
-
}
|
1802 |
-
.ui-dialog .ui-dialog-buttonpane button {
|
1803 |
-
margin: .5em .4em .5em 0;
|
1804 |
-
cursor: pointer;
|
1805 |
-
}
|
1806 |
-
.ui-dialog .ui-resizable-se {
|
1807 |
-
width: 12px;
|
1808 |
-
height: 12px;
|
1809 |
-
right: -5px;
|
1810 |
-
bottom: -5px;
|
1811 |
-
background-position: 16px 16px;
|
1812 |
-
}
|
1813 |
-
.ui-draggable .ui-dialog-titlebar {
|
1814 |
-
cursor: move;
|
1815 |
-
}
|
1816 |
-
|
1817 |
-
/* WP jQuery Dialog Theme */
|
1818 |
-
.wp-dialog {
|
1819 |
-
padding: 0;
|
1820 |
-
z-index: 300002;
|
1821 |
-
border: 0;
|
1822 |
-
-webkit-box-shadow: 0 5px 15px rgba(0,0,0,0.7);
|
1823 |
-
box-shadow: 0 5px 15px rgba(0,0,0,0.7);
|
1824 |
-
background-color: #f5f5f5;
|
1825 |
-
}
|
1826 |
-
|
1827 |
-
.wp-dialog .ui-dialog-title {
|
1828 |
-
display: block;
|
1829 |
-
text-align: center;
|
1830 |
-
padding: 0;
|
1831 |
-
}
|
1832 |
-
|
1833 |
-
.wp-dialog .ui-dialog-titlebar {
|
1834 |
-
padding: 0 1em;
|
1835 |
-
background-color: #444;
|
1836 |
-
font-size: 13px;
|
1837 |
-
line-height: 24px;
|
1838 |
-
color: #fff;
|
1839 |
-
}
|
1840 |
-
|
1841 |
-
.wp-dialog .ui-dialog-content {
|
1842 |
-
padding: 0;
|
1843 |
-
}
|
1844 |
-
|
1845 |
-
.wp-dialog .ui-dialog-titlebar-close {
|
1846 |
-
cursor: pointer;
|
1847 |
-
-webkit-appearance: none;
|
1848 |
-
border: 0;
|
1849 |
-
width: 30px;
|
1850 |
-
height: 20px;
|
1851 |
-
top: 13px;
|
1852 |
-
right: 6px;
|
1853 |
-
background: none;
|
1854 |
-
}
|
1855 |
-
|
1856 |
-
.wp-dialog .ui-dialog-titlebar-close:before {
|
1857 |
-
content: '\f158';
|
1858 |
-
font: normal 20px/1 'dashicons';
|
1859 |
-
speak: none;
|
1860 |
-
-webkit-font-smoothing: antialiased;
|
1861 |
-
-moz-osx-font-smoothing: grayscale;
|
1862 |
-
color: #999;
|
1863 |
-
padding-left: 12px;
|
1864 |
-
}
|
1865 |
-
|
1866 |
-
.wp-dialog .ui-dialog-titlebar-close:hover:before {
|
1867 |
-
color: #2ea2cc;
|
1868 |
-
}
|
1869 |
-
|
1870 |
-
.wp-dialog .ui-dialog-titlebar-close .ui-button-text {
|
1871 |
-
display: none;
|
1872 |
-
}
|
1873 |
-
|
1874 |
-
.wp-dialog .ui-dialog-titlebar-close:hover,
|
1875 |
-
.wp-dialog .ui-dialog-titlebar-close:focus {
|
1876 |
-
background-position: -87px -32px;
|
1877 |
-
}
|
1878 |
-
|
1879 |
-
.ui-widget-overlay {
|
1880 |
-
z-index: 300001;
|
1881 |
-
background-color: #000;
|
1882 |
-
opacity: 0.6;
|
1883 |
-
filter: alpha(opacity=60);
|
1884 |
-
}
|
1885 |
-
|
1886 |
-
/* TinyMCE modal */
|
1887 |
-
.clearlooks2 .mceTop {
|
1888 |
-
border-bottom: 1px solid #ccc;
|
1889 |
-
}
|
1890 |
-
|
1891 |
-
.clearlooks2 .mceTop span {
|
1892 |
-
font: 13px/24px "Open Sans", sans-serif;
|
1893 |
-
color: #e5e5e5;
|
1894 |
-
}
|
1895 |
-
|
1896 |
-
.clearlooks2 .mceTop .mceLeft {
|
1897 |
-
background: #444444;
|
1898 |
-
border-color: transparent;
|
1899 |
-
}
|
1900 |
-
|
1901 |
-
.clearlooks2 .mceTop .mceRight {
|
1902 |
-
background: #444444;
|
1903 |
-
border-color: transparent;
|
1904 |
-
}
|
1905 |
-
|
1906 |
-
.clearlooks2 .mceMiddle {
|
1907 |
-
clip: rect(24px auto auto auto);
|
1908 |
-
}
|
1909 |
-
|
1910 |
-
.clearlooks2 .mceMiddle .mceLeft {
|
1911 |
-
background: #f1f1f1;
|
1912 |
-
border-color: transparent;
|
1913 |
-
}
|
1914 |
-
|
1915 |
-
.clearlooks2 .mceMiddle .mceRight {
|
1916 |
-
background: #f1f1f1;
|
1917 |
-
border-color: transparent;
|
1918 |
-
}
|
1919 |
-
|
1920 |
-
.clearlooks2 .mceBottom {
|
1921 |
-
background: #f1f1f1;
|
1922 |
-
border-color: transparent;
|
1923 |
-
}
|
1924 |
-
|
1925 |
-
.clearlooks2 .mceBottom .mceLeft {
|
1926 |
-
background: #f1f1f1;
|
1927 |
-
border-color: transparent;
|
1928 |
-
}
|
1929 |
-
|
1930 |
-
.clearlooks2 .mceBottom .mceCenter {
|
1931 |
-
background: #f1f1f1;
|
1932 |
-
border-color: transparent;
|
1933 |
-
}
|
1934 |
-
|
1935 |
-
.clearlooks2 .mceBottom .mceRight {
|
1936 |
-
background: #f1f1f1;
|
1937 |
-
border-color: transparent;
|
1938 |
-
}
|
1939 |
-
|
1940 |
-
.clearlooks2 .mceClose,
|
1941 |
-
.clearlooks2 .mceFocus .mceClose,
|
1942 |
-
.clearlooks2 .mceFocus .mceClose:hover {
|
1943 |
-
background-image: none;
|
1944 |
-
}
|
1945 |
-
.clearlooks2 .mceClose:before {
|
1946 |
-
speak: none;
|
1947 |
-
-webkit-font-smoothing: antialiased;
|
1948 |
-
-moz-osx-font-smoothing: grayscale;
|
1949 |
-
color: #999;
|
1950 |
-
padding-left: 12px;
|
1951 |
-
}
|
1952 |
-
|
1953 |
-
/* Distraction Free Writing mode
|
1954 |
-
* =Overlay Styles
|
1955 |
-
-------------------------------------------------------------- */
|
1956 |
-
.fullscreen-overlay {
|
1957 |
-
z-index: 149999;
|
1958 |
-
display: none;
|
1959 |
-
position: fixed;
|
1960 |
-
top: 0;
|
1961 |
-
bottom: 0;
|
1962 |
-
left: 0;
|
1963 |
-
right: 0;
|
1964 |
-
filter: inherit;
|
1965 |
-
}
|
1966 |
-
|
1967 |
-
.fullscreen-active .fullscreen-overlay,
|
1968 |
-
.fullscreen-active #wp-fullscreen-body {
|
1969 |
-
display: block;
|
1970 |
-
}
|
1971 |
-
|
1972 |
-
.fullscreen-fader {
|
1973 |
-
z-index: 200000;
|
1974 |
-
}
|
1975 |
-
|
1976 |
-
.fullscreen-active .fullscreen-fader {
|
1977 |
-
display: none;
|
1978 |
-
}
|
1979 |
-
|
1980 |
-
/* =Overlay Body
|
1981 |
-
-------------------------------------------------------------- */
|
1982 |
-
#wp-fullscreen-body {
|
1983 |
-
width: 100%;
|
1984 |
-
z-index: 150005;
|
1985 |
-
display: none;
|
1986 |
-
position: absolute;
|
1987 |
-
top: 0;
|
1988 |
-
left: 0;
|
1989 |
-
font-size: 12px;
|
1990 |
-
}
|
1991 |
-
|
1992 |
-
#wp-fullscreen-wrap {
|
1993 |
-
margin: 0 auto 50px;
|
1994 |
-
position: relative;
|
1995 |
-
padding-top: 60px;
|
1996 |
-
}
|
1997 |
-
|
1998 |
-
#wp-fullscreen-title {
|
1999 |
-
font-size: 1.7em;
|
2000 |
-
line-height: 100%;
|
2001 |
-
outline: medium none;
|
2002 |
-
padding: 6px 7px;
|
2003 |
-
width: 100%;
|
2004 |
-
margin-bottom: 30px;
|
2005 |
-
-webkit-box-shadow: none;
|
2006 |
-
box-shadow: none;
|
2007 |
-
}
|
2008 |
-
|
2009 |
-
#wp-fullscreen-container {
|
2010 |
-
padding: 4px 10px 50px;
|
2011 |
-
}
|
2012 |
-
|
2013 |
-
#wp-fullscreen-title,
|
2014 |
-
#wp-fullscreen-container {
|
2015 |
-
-webkit-border-radius: 0;
|
2016 |
-
border-radius: 0;
|
2017 |
-
border: 1px dashed transparent;
|
2018 |
-
background: transparent;
|
2019 |
-
-moz-transition-property: border-color;
|
2020 |
-
-moz-transition-duration: 0.6s;
|
2021 |
-
-webkit-transition-property: border-color;
|
2022 |
-
-webkit-transition-duration: 0.6s;
|
2023 |
-
-o-transition-property: border-color;
|
2024 |
-
-o-transition-duration: 0.6s;
|
2025 |
-
transition-property: border-color;
|
2026 |
-
transition-duration: 0.6s;
|
2027 |
-
}
|
2028 |
-
|
2029 |
-
#wp_mce_fullscreen {
|
2030 |
-
width: 100%;
|
2031 |
-
min-height: 300px;
|
2032 |
-
border: 0;
|
2033 |
-
background: transparent;
|
2034 |
-
font-family: Consolas, Monaco, monospace;
|
2035 |
-
line-height: 1.6em;
|
2036 |
-
padding: 0;
|
2037 |
-
overflow-y: hidden;
|
2038 |
-
outline: none;
|
2039 |
-
resize: none;
|
2040 |
-
-webkit-box-shadow: none;
|
2041 |
-
box-shadow: none;
|
2042 |
-
}
|
2043 |
-
|
2044 |
-
#wp-fullscreen-tagline {
|
2045 |
-
color: #BBBBBB;
|
2046 |
-
font-size: 18px;
|
2047 |
-
float: right;
|
2048 |
-
padding-top: 5px;
|
2049 |
-
}
|
2050 |
-
|
2051 |
-
/* =Top bar
|
2052 |
-
-------------------------------------------------------------- */
|
2053 |
-
#fullscreen-topbar {
|
2054 |
-
background: #f5f5f5;
|
2055 |
-
border-bottom: 1px solid #fff;
|
2056 |
-
height: 40px;
|
2057 |
-
left: 0;
|
2058 |
-
min-width: 800px;
|
2059 |
-
position: fixed;
|
2060 |
-
top: 0;
|
2061 |
-
width: 100%;
|
2062 |
-
z-index: 150050;
|
2063 |
-
}
|
2064 |
-
|
2065 |
-
#wp-fullscreen-toolbar {
|
2066 |
-
padding: 6px 10px 0;
|
2067 |
-
clear: both;
|
2068 |
-
max-width: 1100px;
|
2069 |
-
min-width: 820px;
|
2070 |
-
margin: 0 auto;
|
2071 |
-
}
|
2072 |
-
|
2073 |
-
#wp-fullscreen-mode-bar,
|
2074 |
-
#wp-fullscreen-button-bar,
|
2075 |
-
#wp-fullscreen-close,
|
2076 |
-
#wp-fullscreen-count {
|
2077 |
-
float: left;
|
2078 |
-
}
|
2079 |
-
|
2080 |
-
#wp-fullscreen-save {
|
2081 |
-
float: right;
|
2082 |
-
padding: 2px 2px 0 5px;
|
2083 |
-
}
|
2084 |
-
|
2085 |
-
#wp-fullscreen-count,
|
2086 |
-
#wp-fullscreen-close {
|
2087 |
-
padding-top: 5px;
|
2088 |
-
}
|
2089 |
-
|
2090 |
-
#wp-fullscreen-central-toolbar {
|
2091 |
-
margin: auto;
|
2092 |
-
padding: 0;
|
2093 |
-
}
|
2094 |
-
|
2095 |
-
#wp-fullscreen-buttons > div {
|
2096 |
-
float: left;
|
2097 |
-
}
|
2098 |
-
|
2099 |
-
#wp-fullscreen-mode-bar {
|
2100 |
-
padding: 1px 14px 0 0;
|
2101 |
-
}
|
2102 |
-
|
2103 |
-
#wp-fullscreen-modes a {
|
2104 |
-
display: block;
|
2105 |
-
font-size: 11px;
|
2106 |
-
text-decoration: none;
|
2107 |
-
float: left;
|
2108 |
-
margin: 1px 0 0 0;
|
2109 |
-
padding: 2px 6px 2px;
|
2110 |
-
border-width: 1px 1px 1px 0;
|
2111 |
-
border-style: solid;
|
2112 |
-
border-color: #bbb;
|
2113 |
-
color: #777;
|
2114 |
-
text-shadow: 0 1px 0 #fff;
|
2115 |
-
background-color: #f4f4f4;
|
2116 |
-
background: #f4f4f4;
|
2117 |
-
background-image: -webkit-gradient(linear, left bottom, left top, from(#e4e4e4), to(#f9f9f9));
|
2118 |
-
background-image: -webkit-linear-gradient(bottom, #e4e4e4, #f9f9f9);
|
2119 |
-
background-image: -moz-linear-gradient(bottom, #e4e4e4, #f9f9f9);
|
2120 |
-
background-image: -o-linear-gradient(bottom, #e4e4e4, #f9f9f9);
|
2121 |
-
background-image: linear-gradient(to top, #e4e4e4, #f9f9f9);
|
2122 |
-
}
|
2123 |
-
|
2124 |
-
#wp-fullscreen-modes a:hover,
|
2125 |
-
.wp-html-mode #wp-fullscreen-modes a:last-child,
|
2126 |
-
.wp-tmce-mode #wp-fullscreen-modes a:first-child {
|
2127 |
-
color: #333;
|
2128 |
-
border-color: #999;
|
2129 |
-
background: #eee;
|
2130 |
-
background-image: -webkit-gradient(linear, left top, left bottom, from(#e4e4e4), to(#f9f9f9));
|
2131 |
-
background-image: -webkit-linear-gradient(top, #e4e4e4, #f9f9f9);
|
2132 |
-
background-image: -moz-linear-gradient(top, #e4e4e4, #f9f9f9);
|
2133 |
-
background-image: -o-linear-gradient(top, #e4e4e4, #f9f9f9);
|
2134 |
-
background-image: linear-gradient(to bottom, #e4e4e4, #f9f9f9);
|
2135 |
-
}
|
2136 |
-
|
2137 |
-
#wp-fullscreen-modes a:first-child {
|
2138 |
-
border-width: 1px;
|
2139 |
-
-webkit-border-top-left-radius: 3px;
|
2140 |
-
-webkit-border-bottom-left-radius: 3px;
|
2141 |
-
border-top-left-radius: 3px;
|
2142 |
-
border-bottom-left-radius: 3px;
|
2143 |
-
}
|
2144 |
-
|
2145 |
-
#wp-fullscreen-modes a:last-child {
|
2146 |
-
-webkit-border-top-right-radius: 3px;
|
2147 |
-
-webkit-border-bottom-right-radius: 3px;
|
2148 |
-
border-top-right-radius: 3px;
|
2149 |
-
border-bottom-right-radius: 3px;
|
2150 |
-
}
|
2151 |
-
|
2152 |
-
#wp-fullscreen-buttons .active a {
|
2153 |
-
background: inherit;
|
2154 |
-
}
|
2155 |
-
|
2156 |
-
#wp-fullscreen-buttons .hidden {
|
2157 |
-
display: none;
|
2158 |
-
}
|
2159 |
-
|
2160 |
-
#wp-fullscreen-buttons .disabled {
|
2161 |
-
opacity: 0.5;
|
2162 |
-
}
|
2163 |
-
|
2164 |
-
.wp-html-mode #wp-fullscreen-buttons div {
|
2165 |
-
display: none;
|
2166 |
-
}
|
2167 |
-
|
2168 |
-
.wp-html-mode #wp-fullscreen-buttons div.wp-fullscreen-both {
|
2169 |
-
display: block;
|
2170 |
-
}
|
2171 |
-
|
2172 |
-
#fullscreen-topbar.fullscreen-make-sticky {
|
2173 |
-
display: block !important;
|
2174 |
-
}
|
2175 |
-
|
2176 |
-
#wp-fullscreen-save img {
|
2177 |
-
vertical-align: middle;
|
2178 |
-
}
|
2179 |
-
|
2180 |
-
#wp-fullscreen-save img,
|
2181 |
-
#wp-fullscreen-save span {
|
2182 |
-
padding-right: 4px;
|
2183 |
-
display: none;
|
2184 |
-
}
|
2185 |
-
|
2186 |
-
/* =Thickbox Adjustments
|
2187 |
-
-------------------------------------------------------------- */
|
2188 |
-
.fullscreen-active #TB_overlay {
|
2189 |
-
z-index: 150100;
|
2190 |
-
}
|
2191 |
-
|
2192 |
-
.fullscreen-active #TB_window {
|
2193 |
-
z-index: 150102;
|
2194 |
-
}
|
2195 |
-
|
2196 |
-
/* =TinyMCE Adjustments
|
2197 |
-
-------------------------------------------------------------- */
|
2198 |
-
#wp_mce_fullscreen_ifr {
|
2199 |
-
background: transparent;
|
2200 |
-
}
|
2201 |
-
|
2202 |
-
#wp_mce_fullscreen_parent #wp_mce_fullscreen_tbl tr.mceFirst {
|
2203 |
-
display : none;
|
2204 |
-
}
|
2205 |
-
|
2206 |
-
#wp-fullscreen-container .wp_themeSkin table td {
|
2207 |
-
vertical-align: top;
|
2208 |
-
}
|
2209 |
-
|
2210 |
-
/* Colors */
|
2211 |
-
.fullscreen-overlay {
|
2212 |
-
background: #fff;
|
2213 |
-
}
|
2214 |
-
|
2215 |
-
.wp-fullscreen-focus #wp-fullscreen-title,
|
2216 |
-
.wp-fullscreen-focus #wp-fullscreen-container {
|
2217 |
-
border-color: #ccc;
|
2218 |
-
}
|
2219 |
-
|
2220 |
-
/* =CSS 3 transitions
|
2221 |
-
-------------------------------------------------------------- */
|
2222 |
-
|
2223 |
-
.fade-1000,
|
2224 |
-
.fade-600,
|
2225 |
-
.fade-400,
|
2226 |
-
.fade-300 {
|
2227 |
-
opacity: 0;
|
2228 |
-
-moz-transition-property: opacity;
|
2229 |
-
-webkit-transition-property: opacity;
|
2230 |
-
-o-transition-property: opacity;
|
2231 |
-
transition-property: opacity;
|
2232 |
-
}
|
2233 |
-
|
2234 |
-
.fade-1000 {
|
2235 |
-
-moz-transition-duration: 1s;
|
2236 |
-
-webkit-transition-duration: 1s;
|
2237 |
-
-o-transition-duration: 1s;
|
2238 |
-
transition-duration: 1s;
|
2239 |
-
}
|
2240 |
-
|
2241 |
-
.fade-600 {
|
2242 |
-
-moz-transition-duration: 0.6s;
|
2243 |
-
-webkit-transition-duration: 0.6s;
|
2244 |
-
-o-transition-duration: 0.6s;
|
2245 |
-
transition-duration: 0.6s;
|
2246 |
-
}
|
2247 |
-
|
2248 |
-
.fade-400 {
|
2249 |
-
-moz-transition-duration: 0.4s;
|
2250 |
-
-webkit-transition-duration: 0.4s;
|
2251 |
-
-o-transition-duration: 0.4s;
|
2252 |
-
transition-duration: 0.4s;
|
2253 |
-
}
|
2254 |
-
|
2255 |
-
.fade-300 {
|
2256 |
-
-moz-transition-duration: 0.3s;
|
2257 |
-
-webkit-transition-duration: 0.3s;
|
2258 |
-
-o-transition-duration: 0.3s;
|
2259 |
-
transition-duration: 0.3s;
|
2260 |
-
}
|
2261 |
-
|
2262 |
-
.fade-trigger {
|
2263 |
-
opacity: 1;
|
2264 |
-
}
|
2265 |
-
|
2266 |
-
/* =Localization
|
2267 |
-
-------------------------------------------------------------- */
|
2268 |
-
.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors,
|
2269 |
-
.rtl .wp_themeSkin .mceMenu .mceText,
|
2270 |
-
.rtl .wp-switch-editor,
|
2271 |
-
.rtl .quicktags-toolbar input,
|
2272 |
-
.rtl .clearlooks2 .mceTop span,
|
2273 |
-
.rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors {
|
2274 |
-
font-family: Tahoma, sans-serif;
|
2275 |
-
}
|
2276 |
-
|
2277 |
-
html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors,
|
2278 |
-
html:lang(he-il) .rtl .wp_themeSkin .mceMenu .mceText,
|
2279 |
-
html:lang(he-il) .rtl .wp-switch-editor,
|
2280 |
-
html:lang(he-il) .rtl .quicktags-toolbar input,
|
2281 |
-
html:lang(he-il) .rtl .clearlooks2 .mceTop span,
|
2282 |
-
html:lang(he-il) .rtl .wp_themeSkin .mceColorSplitMenu a.mceMoreColors {
|
2283 |
-
font-family: Arial, sans-serif;
|
2284 |
-
}
|
2285 |
-
|
2286 |
-
|
2287 |
-
/* HiDPI */
|
2288 |
-
@media print,
|
2289 |
-
(-o-min-device-pixel-ratio: 5/4),
|
2290 |
-
(-webkit-min-device-pixel-ratio: 1.25),
|
2291 |
-
(min-resolution: 120dpi) {
|
2292 |
-
.wp-media-buttons .add_media span.wp-media-buttons-icon,
|
2293 |
-
#wp-fullscreen-buttons #wp_fs_image span.mce_image {
|
2294 |
-
background: none;
|
2295 |
-
}
|
2296 |
-
|
2297 |
-
.wp_themeSkin .mceListBox .mceOpen,
|
2298 |
-
.wp_themeSkin .mceListBoxHover .mceOpen,
|
2299 |
-
.wp_themeSkin .mceListBoxSelected .mceOpen,
|
2300 |
-
.wp_themeSkin table.mceListBoxEnabled .mceOpen {
|
2301 |
-
background-image: url('../../../../../wp-includes/images/down_arrow-2x.gif');
|
2302 |
-
background-size: 10px 20px;
|
2303 |
-
}
|
2304 |
-
|
2305 |
-
.wp_themeSkin .mceSplitButtonEnabled a.mceOpen,
|
2306 |
-
.wp_themeSkin .mceSplitButtonSelected a.mceOpen,
|
2307 |
-
.wp_themeSkin .mceSplitButtonActive a.mceOpen,
|
2308 |
-
.wp_themeSkin .mceSplitButtonEnabled:hover a.mceOpen {
|
2309 |
-
background-image: url('../../../../../wp-includes/images/down_arrow-2x.gif');
|
2310 |
-
background-size: 10px 20px;
|
2311 |
-
}
|
2312 |
-
|
2313 |
-
#wp-link .toggle-arrow {
|
2314 |
-
background: transparent url('../../../../../wp-includes/images/toggle-arrow-2x.png') top left no-repeat;
|
2315 |
-
background-size: 19px 69px;
|
2316 |
-
}
|
2317 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/validationEngine.jquery.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.widget_wysija_cont .inputContainer{position:relative;float:left}.widget_wysija_cont .ajaxSubmit{padding:20px;background:#55ea55;border:1px solid #999;display:none}.formError{position:absolute;top:300px;left:300px;display:block;z-index:5000;cursor:pointer}.formError .formErrorContent{background:none repeat scroll 0 0 #8E2121;border:1px solid #BBBBBB;color:#FFFFFF;font-family:tahoma;font-size:11px;padding:4px 10px;position:relative;width:150px;z-index:5001}.widget_wysija_cont .formError .formErrorArrow{width:15px;margin:-2px 0 0 13px;position:relative;z-index:5006}.widget_wysija_cont .formError .formErrorArrowBottom{margin:0px 0 0 12px;top:2px}.widget_wysija_cont .formError .formErrorArrow div{border-left:2px solid #ddd;border-right:2px solid #ddd;font-size:0px;height:1px;background:#8E2121;margin:0 auto;line-height:0;font-size:0;display:block}.widget_wysija_cont .greenPopup .formErrorArrow div{background:#33be40}.widget_wysija_cont .blackPopup .formErrorArrow div{background:#393939;color:#FFF}.widget_wysija_cont .formError .formErrorArrow .line10{width:15px;border:none}.widget_wysija_cont .formError .formErrorArrow .line9{width:13px;border:none}.widget_wysija_cont .formError .formErrorArrow .line8{width:11px}.widget_wysija_cont .formError .formErrorArrow .line7{width:9px}.widget_wysija_cont .formError .formErrorArrow .line6{width:7px}.widget_wysija_cont .formError .formErrorArrow .line5{width:5px}.widget_wysija_cont .formError .formErrorArrow .line4{width:3px}.widget_wysija_cont .formError .formErrorArrow .line3{width:1px;border-left:2px solid #ddd;border-right:2px solid #ddd;border-bottom:0 solid #ddd}.widget_wysija_cont .formError .formErrorArrow .line2{width:3px;border:none;background:#ddd}.widget_wysija_cont .formError .formErrorArrow .line1{width:1px;border:none;background:#ddd}.greenPopup .formErrorContent{background:none repeat scroll 0 0 #FFFBCC;color:#555555}.widget_wysija_cont .updated,.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{margin:5px 0 15px;color:#333333;font-family:sans-serif;font-size:12px;line-height:1.4em}.widget_wysija_cont .error,.widget_wysija_cont .login #login_error{background-color:#FFEBE8;border-color:#CC0000}.widget_wysija_cont .updated,.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-style:solid;border-width:1px;margin:5px 15px 2px;padding:0 0.6em;color:#333333}.widget_wysija_cont.updated,.widget_wysija_cont .login .message{background-color:#FFFFE0;border-color:#E6DB55}.widget_wysija_cont .xdetailed-updated{background-color:#FFFFE0;border-color:#E6DB55;color:#000;font-weight:bold;display:none}.widget_wysija_cont .xdetailed-errors{background-color:#A50000;border-color:#888888;color:#DDDDDD;font-weight:bold;display:none}.widget_wysija_cont .instruct{font-style:italic;font-weight:bold;padding:5px 0;font-size:11px}.widget_wysija_cont .needInfo{padding-left:15px;text-decoration:underline}.widget_wysija_cont .wysija-submit{display:block;margin-top:20px}.widget_wysija_cont input.defaultlabels{color:#888}.widget_wysija_cont input.defaultlabels:focus{color:#373737}.widget_wysija_cont .abs-req{display:none}.widget_wysija_cont p label{display:block}.widget_wysija_cont .iframe-hidden{display:none}.widget_wysija_cont .updated,.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{background-color:#FFFFFF;border:1px solid;border-radius:0 0 0 0;font-weight:normal;margin:4px 0;padding:4px}.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{background-color:#e55057;color:#fff}.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{background-color:#e55057;color:#fff;border-color:#CC0000}.widget_wysija_cont .allmsgs ul{padding:0}.widget_wysija_cont .allmsgs li{list-style-type:none}.widget_wysija_cont .updated,.widget_wysija_cont .login .message{background-color:#FFFFE0;border-color:#E6DB55}.widget_wysija_cont .updated ul{margin:0}.widget_wysija_cont .showerrors{color:#DDDDDD}#wysija-subscriptions input.checkboxx{margin-left:0px;margin-right:10px}#wysija-subscriptions th label{margin-right:10px}#wysija-box-after-comment{width:25px}#wysija-box-after-register{margin:
|
1 |
+
.widget_wysija_cont .inputContainer{position:relative;float:left}.widget_wysija_cont .ajaxSubmit{padding:20px;background:#55ea55;border:1px solid #999;display:none}.formError{position:absolute;top:300px;left:300px;display:block;z-index:5000;cursor:pointer}.formError .formErrorContent{background:none repeat scroll 0 0 #8E2121;border:1px solid #BBBBBB;color:#FFFFFF;font-family:tahoma;font-size:11px;padding:4px 10px;position:relative;width:150px;z-index:5001}.widget_wysija_cont .formError .formErrorArrow{width:15px;margin:-2px 0 0 13px;position:relative;z-index:5006}.widget_wysija_cont .formError .formErrorArrowBottom{margin:0px 0 0 12px;top:2px}.widget_wysija_cont .formError .formErrorArrow div{border-left:2px solid #ddd;border-right:2px solid #ddd;font-size:0px;height:1px;background:#8E2121;margin:0 auto;line-height:0;font-size:0;display:block}.widget_wysija_cont .greenPopup .formErrorArrow div{background:#33be40}.widget_wysija_cont .blackPopup .formErrorArrow div{background:#393939;color:#FFF}.widget_wysija_cont .formError .formErrorArrow .line10{width:15px;border:none}.widget_wysija_cont .formError .formErrorArrow .line9{width:13px;border:none}.widget_wysija_cont .formError .formErrorArrow .line8{width:11px}.widget_wysija_cont .formError .formErrorArrow .line7{width:9px}.widget_wysija_cont .formError .formErrorArrow .line6{width:7px}.widget_wysija_cont .formError .formErrorArrow .line5{width:5px}.widget_wysija_cont .formError .formErrorArrow .line4{width:3px}.widget_wysija_cont .formError .formErrorArrow .line3{width:1px;border-left:2px solid #ddd;border-right:2px solid #ddd;border-bottom:0 solid #ddd}.widget_wysija_cont .formError .formErrorArrow .line2{width:3px;border:none;background:#ddd}.widget_wysija_cont .formError .formErrorArrow .line1{width:1px;border:none;background:#ddd}.greenPopup .formErrorContent{background:none repeat scroll 0 0 #FFFBCC;color:#555555}.widget_wysija_cont .updated,.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{margin:5px 0 15px;color:#333333;font-family:sans-serif;font-size:12px;line-height:1.4em}.widget_wysija_cont .error,.widget_wysija_cont .login #login_error{background-color:#FFEBE8;border-color:#CC0000}.widget_wysija_cont .updated,.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-style:solid;border-width:1px;margin:5px 15px 2px;padding:0 0.6em;color:#333333}.widget_wysija_cont.updated,.widget_wysija_cont .login .message{background-color:#FFFFE0;border-color:#E6DB55}.widget_wysija_cont .xdetailed-updated{background-color:#FFFFE0;border-color:#E6DB55;color:#000;font-weight:bold;display:none}.widget_wysija_cont .xdetailed-errors{background-color:#A50000;border-color:#888888;color:#DDDDDD;font-weight:bold;display:none}.widget_wysija_cont .instruct{font-style:italic;font-weight:bold;padding:5px 0;font-size:11px}.widget_wysija_cont .needInfo{padding-left:15px;text-decoration:underline}.widget_wysija_cont .wysija-submit{display:block;margin-top:20px}.widget_wysija_cont input.defaultlabels{color:#888}.widget_wysija_cont input.defaultlabels:focus{color:#373737}.widget_wysija_cont .abs-req{display:none}.widget_wysija_cont p label{display:block}.widget_wysija_cont .iframe-hidden{display:none}.widget_wysija_cont .updated,.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{background-color:#FFFFFF;border:1px solid;border-radius:0 0 0 0;font-weight:normal;margin:4px 0;padding:4px}.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{background-color:#e55057;color:#fff}.widget_wysija_cont .error,.widget_wysija_cont .xdetailed-errors{background-color:#e55057;color:#fff;border-color:#CC0000}.widget_wysija_cont .allmsgs ul{padding:0}.widget_wysija_cont .allmsgs li{list-style-type:none}.widget_wysija_cont .updated,.widget_wysija_cont .login .message{background-color:#FFFFE0;border-color:#E6DB55}.widget_wysija_cont .updated ul{margin:0}.widget_wysija_cont .showerrors{color:#DDDDDD}#wysija-subscriptions input.checkboxx{margin-left:0px;margin-right:10px}#wysija-subscriptions th label{margin-right:10px}#wysija-box-after-comment{width:25px}#wysija-box-after-register{margin:2px 6px 16px 0;padding:3px}.wysija-unsubscribed-on{color:#bbb}#profile-details-section-wysija{float:right;width:48%}.widget_wysija .wysija-required{font-weight:bold}.widget_wysija .wysija-checkbox-label{margin:0 0 10px 0}
|
css/vendor/bootstrap.tooltip.css
DELETED
@@ -1,101 +0,0 @@
|
|
1 |
-
.tooltip {
|
2 |
-
position: absolute;
|
3 |
-
z-index: 1030;
|
4 |
-
display: block;
|
5 |
-
visibility: visible;
|
6 |
-
font-size: 12px;
|
7 |
-
line-height: 1.4;
|
8 |
-
opacity: 0;
|
9 |
-
filter: alpha(opacity=0);
|
10 |
-
}
|
11 |
-
.tooltip.in {
|
12 |
-
opacity: 0.9;
|
13 |
-
filter: alpha(opacity=90);
|
14 |
-
}
|
15 |
-
.tooltip.top {
|
16 |
-
margin-top: -3px;
|
17 |
-
padding: 5px 0;
|
18 |
-
}
|
19 |
-
.tooltip.right {
|
20 |
-
margin-left: 3px;
|
21 |
-
padding: 0 5px;
|
22 |
-
}
|
23 |
-
.tooltip.bottom {
|
24 |
-
margin-top: 3px;
|
25 |
-
padding: 5px 0;
|
26 |
-
}
|
27 |
-
.tooltip.left {
|
28 |
-
margin-left: -3px;
|
29 |
-
padding: 0 5px;
|
30 |
-
}
|
31 |
-
.tooltip-inner {
|
32 |
-
max-width: 200px;
|
33 |
-
padding: 3px 8px;
|
34 |
-
color: #ffffff;
|
35 |
-
text-align: center;
|
36 |
-
text-decoration: none;
|
37 |
-
background-color: #000000;
|
38 |
-
border-radius: 4px;
|
39 |
-
}
|
40 |
-
.tooltip-inner a {
|
41 |
-
color: #fff;
|
42 |
-
}
|
43 |
-
.tooltip-arrow {
|
44 |
-
position: absolute;
|
45 |
-
width: 0;
|
46 |
-
height: 0;
|
47 |
-
border-color: transparent;
|
48 |
-
border-style: solid;
|
49 |
-
}
|
50 |
-
.tooltip.top .tooltip-arrow {
|
51 |
-
bottom: 0;
|
52 |
-
left: 50%;
|
53 |
-
margin-left: -5px;
|
54 |
-
border-width: 5px 5px 0;
|
55 |
-
border-top-color: #000000;
|
56 |
-
}
|
57 |
-
.tooltip.top-left .tooltip-arrow {
|
58 |
-
bottom: 0;
|
59 |
-
left: 5px;
|
60 |
-
border-width: 5px 5px 0;
|
61 |
-
border-top-color: #000000;
|
62 |
-
}
|
63 |
-
.tooltip.top-right .tooltip-arrow {
|
64 |
-
bottom: 0;
|
65 |
-
right: 5px;
|
66 |
-
border-width: 5px 5px 0;
|
67 |
-
border-top-color: #000000;
|
68 |
-
}
|
69 |
-
.tooltip.right .tooltip-arrow {
|
70 |
-
top: 50%;
|
71 |
-
left: 0;
|
72 |
-
margin-top: -5px;
|
73 |
-
border-width: 5px 5px 5px 0;
|
74 |
-
border-right-color: #000000;
|
75 |
-
}
|
76 |
-
.tooltip.left .tooltip-arrow {
|
77 |
-
top: 50%;
|
78 |
-
right: 0;
|
79 |
-
margin-top: -5px;
|
80 |
-
border-width: 5px 0 5px 5px;
|
81 |
-
border-left-color: #000000;
|
82 |
-
}
|
83 |
-
.tooltip.bottom .tooltip-arrow {
|
84 |
-
top: 0;
|
85 |
-
left: 50%;
|
86 |
-
margin-left: -5px;
|
87 |
-
border-width: 0 5px 5px;
|
88 |
-
border-bottom-color: #000000;
|
89 |
-
}
|
90 |
-
.tooltip.bottom-left .tooltip-arrow {
|
91 |
-
top: 0;
|
92 |
-
left: 5px;
|
93 |
-
border-width: 0 5px 5px;
|
94 |
-
border-bottom-color: #000000;
|
95 |
-
}
|
96 |
-
.tooltip.bottom-right .tooltip-arrow {
|
97 |
-
top: 0;
|
98 |
-
right: 5px;
|
99 |
-
border-width: 0 5px 5px;
|
100 |
-
border-bottom-color: #000000;
|
101 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/wysija-editor.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.clearfix{display:inline-table}* html .clearfix{height:1%}.clearfix{display:block}.hidden{display:none}strong{font-weight:bold}img{vertical-align:middle}:focus{outline:0 !important}.inline{display:-moz-inline-box;display:inline-block;*display:inline;*float:left}.wysija_tools li,.wysija_tools dd{margin:0 !important}.wysija_controls li{margin:0 0 0 3px !important}#wysija_items{position:fixed;width:275px;right:20px;top:20px;z-index:999}#wysija_items li{line-height:100px;height:100px;outline:1px solid #ccc;text-align:center}.wysija_items li.disabled{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";filter:alpha(opacity=20);-moz-opacity:0.2;opacity:0.2}.wysija_items li.active a{height:100px;cursor:pointer;display:block}.wysija_header,.wysija_footer{position:relative;display:inline-table;display:block;height:1%;margin:0;padding:0;z-index:98}.wysija_header:after,.wysija_footer:after{content:".";display:block;height:0;clear:both;visibility:hidden}.wysija_block{position:relative;margin:0 10px;padding:10px 18px 10px 18px;display:inline-table;display:block;height:1%;margin:0;z-index:98}.wysija_block.dragging,.wysija_header.dragging,.wysija_footer.dragging{z-index:99000}.wysija_block:after{content:".";display:block;height:0;clear:both;visibility:hidden}.wysija_block.hover{border:1px dashed #bbb;margin:0 0 0 0;padding:9px 17px 9px 17px}.wysija_block.static{padding:0;margin:0}.wysija_block .wysija_controls{background-color:#dfdfdf;background-image:-moz-linear-gradient(center bottom, #bbb, #eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#bbb), to(#eee));-moz-border-radius:2px;-webkit-border-radius:2px;-khtml-border-radius:2px;border-radius:2px;border:1px solid #ccc;position:absolute;margin:0;padding:0;width:598px;height:20px;left:-1px;right:0;top:-22px;width:100%}.wysija_block .wysija_controls .handle{width:600px}.wysija_block .wysija_controls li{float:left;width:20px;height:20px}.wysija_block .wysija_controls a{cursor:pointer;float:left;font-size:120%;font-weight:bold;height:20px;line-height:20px;text-align:center;width:20px;color:#000}.wysija_block .handle_container,.wysija_block .handle_container a{float:none;width:40px}.wysija_block .handle_container{left:280px;top:0;position:absolute}.wysija_gallery .wysija_tools,.wysija_image .wysija_tools{position:absolute;height:34px;line-height:34px;margin:0;width:152px;top:-36px;z-index:1010;background-color:#dfdfdf;background-image:-moz-linear-gradient(center bottom, #bbb, #eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#bbb), to(#eee));-moz-border-radius:2px;-webkit-border-radius:2px;-khtml-border-radius:2px;border-radius:2px;border:1px solid #ccc;padding:0 0 0 5px}.wysija_gallery .wysija_tools{width:102px}.left .wysija_image .wysija_tools,.center .wysija_image .wysija_tools,.left.wysija_gallery .wysija_tools,.center.wysija_gallery .wysija_tools{left:0;text-align:left}.right .wysija_image .wysija_tools,.right.wysija_gallery .wysija_tools{right:0;text-align:right}.wysija_text .wysija_tools{position:absolute;height:20px;line-height:20px;top:0;right:0;margin:0;z-index:1000;width:20px}.wysija_text.alone .wysija_tools{display:none}.wysija_gallery .wysija_tools li,.wysija_image .wysija_tools li{float:left;width:25px;height:34px}.wysija_text .wysija_tools li{float:left;width:20px;height:20px}.wysija_gallery .wysija_tools a,.wysija_image .wysija_tools a,.wysija_text .wysija_tools a{background-color:#dfdfdf;background-image:-moz-linear-gradient(center bottom, #bbb, #eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#bbb), to(#eee));float:left;width:20px;height:20px;margin:5px 3px 0 0;-moz-border-radius:2px;-webkit-border-radius:2px;-khtml-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;border:1px solid #ccc;z-index:1010;position:relative}.wysija_text .wysija_tools a{margin:0}.wysija_gallery .wysija_tools a:hover,.wysija_image .wysija_tools a:hover,.wysija_text .wysija_tools a:hover{background-color:#ddd;border-color:#909090}.wysija_gallery .wysija_tools a.active,.wysija_image .wysija_tools a.active,.wysija_text .wysija_tools a.active{background-color:#ddd;background-image:-moz-linear-gradient(center bottom, #eee, #bbb);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#eee), to(#bbb));border-color:#909090}.wysija_controls a span,.wysija_gallery .wysija_tools a span,.wysija_image .wysija_tools a span,.wysija_text .wysija_tools a span,.wj_content a span{display:block;height:20px;width:20px}.wysija_controls span input{margin:2px 0 0 0;padding:0;color:transparent}.alignment-left span{background:url(../img/controls/icons.png) no-repeat 0 0}.alignment-left.active span,.alignment-left:hover span{background:url(../img/controls/icons.png) no-repeat 0 -20px}.alignment-center span{background:url(../img/controls/icons.png) no-repeat -20px 0}.alignment-center.active span,.alignment-center:hover span{background:url(../img/controls/icons.png) no-repeat -20px -20px}.alignment-right span{background:url(../img/controls/icons.png) no-repeat -40px 0}.alignment-right.active span,.alignment-right:hover span{background:url(../img/controls/icons.png) no-repeat -40px -20px}.add-link span{background:url(../img/controls/icons.png) no-repeat -60px 0}.add-link.active span,.add-link:hover span{background:url(../img/controls/icons.png) no-repeat -60px -20px}.remove-link span{background:url(../img/controls/icons.png) no-repeat -80px 0}.remove-link.active span,.remove-link:hover span{background:url(../img/controls/icons.png) no-repeat -80px -20px}.remove span{background:url(../img/controls/icons.png) no-repeat -100px 0}.remove.active span,.remove:hover span{background:url(../img/controls/icons.png) no-repeat -100px -20px}.handle span{background:url(../img/controls/grip-handle.png) no-repeat;cursor:move;width:40px !important}.duplicate span{background:url(../img/controls/icons.png) no-repeat -140px 0}.duplicate.active span,.duplicate:hover span{background:url(../img/controls/icons.png) no-repeat -140px -20px}.settings span{background:url(../img/controls/icons.png) no-repeat -160px 0}.settings.active span,.settings:hover span{background:url(../img/controls/icons.png) no-repeat -160px -20px}.icon-plus span{background:url(../img/controls/icons.png) no-repeat -200px 0}.icon-plus.active span,.icon-plus:hover span{background:url(../img/controls/icons.png) no-repeat -200px -20px}.icon-minus span{background:url(../img/controls/icons.png) no-repeat -220px 0}.icon-minus.active span,.icon-minus:hover span{background:url(../img/controls/icons.png) no-repeat -220px -20px}.banner{color:#000;z-index:999;text-align:center;width:600px;position:absolute;top:0;right:0;left:0;bottom:0;white-space:nowrap;font-size:16px !important;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.banner .banner-message{margin:20px auto 0 auto}.banner .banner-icon{background:url(../img/controls/image-placeholder.png) no-repeat;padding:2px 0 0 28px}.banner .banner-notice{margin:10px auto 0 auto;font-size:12px;font-style:italic}#wysija_wrapper{padding:20px;width:600px;border:1px solid #ccc;position:relative;background-color:#fff;-webkit-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);-moz-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);box-shadow:0 0 5px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1)}#wysija_wrapper:before,#wysija_wrapper:after{position:absolute;width:40%;height:10px;content:' ';left:12px;bottom:12px;background:transparent;-webkit-transform:skew(-5deg) rotate(-5deg);-moz-transform:skew(-5deg) rotate(-5deg);-ms-transform:skew(-5deg) rotate(-5deg);-o-transform:skew(-5deg) rotate(-5deg);transform:skew(-5deg) rotate(-5deg);-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);-moz-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3);z-index:-1}#wysija_wrapper:after{left:auto;right:12px;-webkit-transform:skew(5deg) rotate(5deg);-moz-transform:skew(5deg) rotate(5deg);-ms-transform:skew(5deg) rotate(5deg);-o-transform:skew(5deg) rotate(5deg);transform:skew(5deg) rotate(5deg)}body.rtl #wysija_wrapper{right:603px !important}#wysija_container{margin:30px 0 0 0;width:600px;border-collapse:collapse;width:600px;margin:0;padding:0}#wysija_header{padding:0}#wysija_body{vertical-align:top;padding:0}#wysija_footer{padding:0}#wysija_block_placeholder{height:0;padding:0;margin:0}.block_placeholder,.text_placeholder{font-weight:bold;height:0;overflow:hidden;line-height:30px;text-align:center;border:0 none;width:598px;z-index:9500;margin:0 auto;text-indent:-9999px}.wysija_block .block_placeholder,.wysija_block .text_placeholder,.wysija_block .image_placeholder{margin:0}.image_placeholder{margin:1px 0 0 1px}.hover .image_placeholder{margin:0}.wysija_content .empty.editable{font-size:13px;line-height:30px}.wysija_image.empty{height:0;width:0;margin:0 !important;z-index:-1;overflow:hidden}.wysija_image.empty.active{height:auto}.wysija_image.active{background:url(../img/controls/image-placeholder.png) no-repeat center center #f5f5f5;border:1px dashed #dfdfdf}#wysija_header .wysija_image.empty,#wysija_footer .wysija_image.empty{background-image:none;height:auto}#wysija_header .wysija_image.active,#wysija_footer .wysija_image.active{border:0 none}.block_placeholder.active,.text_placeholder.active{text-indent:0;border:1px dashed #dfdfdf;background-color:#f5f5f5;display:block;overflow:auto;height:30px}.image_placeholder.empty.active{display:block}.block_placeholder.hover,.text_placeholder.hover,.image_hover .wysija_image{background-color:#0074a2;border-color:#0074a2;color:#fff !important}.image_placeholder.active{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=25)";filter:alpha(opacity=25);-moz-opacity:0.25;opacity:0.25;z-index:9501}.wysija_image.empty.active,.wysija_text.empty.active{display:block;margin:0}#wysija_header .wysija_image.active,#wysija_footer .wysija_image.active{left:0;top:0;right:0}.wysija_header .image_placeholder,.wysija_footer .image_placeholder{border:0 none !important;margin:0 !important}.wysija_header .image_placeholder.active,.wysija_footer .image_placeholder.active{border:0 none !important}.wysija_options{display:none}.wysija_content .wysija_image{margin:0 auto 15px auto;cursor:move}.wysija_header .wysija_content.left .wysija_image,.wysija_header .wysija_content.right .wysija_image,.wysija_footer .wysija_content.left .wysija_image,.wysija_footer .wysija_content.right .wysija_image{margin:0 0 0 0 !important}.wysija_content.center .image_placeholder.active{margin:0 0 -2px 0}.wysija_header .wysija_content.center .wysija_image,.wysija_footer .wysija_content.center .wysija_image{margin:0 auto !important}.wysija_header .wysija_content.center .image_placeholder.active,.wysija_footer .wysija_content.center .image_placeholder.active{margin:0}.wysija_block .wysija_content.center .wysija_image.empty.active{margin-bottom:5px !important}.wysija_content.left{float:none}.wysija_gallery.left{float:left}.wysija_content.left .wysija_image{float:left;margin:0 15px 5px 0}.wysija_content.left .wysija_image.active{margin:0 13px 3px 0}.wysija_content.left .wysija_image.empty.active{margin:0 15px 5px 0 !important}.wysija_gallery.right{float:right}.wysija_content.right .wysija_image{float:right;margin:0 0 5px 15px}.wysija_content.right .wysija_image.active{margin:0 0 3px 13px}.wysija_content.right .wysija_image.empty.active{margin:0 0 5px 15px !important}.wysija_content .wysija_image.alone{margin:0 !important}.wysija_content.center .wysija_image.alone{margin:0 auto !important}.wysija_image{position:relative;z-index:999}.wysija_image .url-info{position:absolute;bottom:0;left:0;font-size:0.7em;padding:2px;color:#000;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80);-moz-opacity:0.8;opacity:0.8}.wysija_content.left .wysija_image .url-info{right:0;left:auto}.wysija_text{position:relative;z-index:998}.wysija_text.editing{border:1px solid #dfdfdf}.wysija_content.left .wysija_text.editing{float:left}.wysija_text .editable:hover{cursor:pointer}#wysija_toolbar{left:657px;position:absolute;top:-1000px;width:295px}#wysija_toolbar .wysija_toolbar_tabs{border-bottom:1px solid #dfdfdf;line-height:0}#wysija_toolbar .wysija_toolbar_tabs li,#wysija_toolbar .wysija_toolbar_tabs a{margin:0;height:30px;line-height:30px;padding:0;display:-moz-inline-box;display:inline-block;*display:inline;*float:left;outline:0 none}#wysija_toolbar .wysija_toolbar_tabs a{outline:0 none;text-decoration:none;color:#a6a6a6}#wysija_toolbar .wysija_toolbar_tabs li{margin:0 0 1px 0}#wysija_toolbar .wysija_toolbar_tabs a{font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#F5F5F5', endColorstr='#F9F9F9');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#f5f5f5));border:1px solid #DFDFDF;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;-khtml-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;box-shadow:0 1px 0 #FFFFFF inset;padding:0 7px}#wysija_toolbar .wysija_toolbar_tabs a:hover{background-color:#eee}#wysija_toolbar .wysija_toolbar_tabs a.selected{color:#000;border-bottom:0 none;background:#fcfcfc;filter:none;padding-bottom:1px}#wysija_toolbar .wysija_toolbar_tabs,#wysija_toolbar .wj_content,#wysija_toolbar .wj_images,#wysija_toolbar .wj_styles,#wysija_toolbar .wj_themes{position:relative;z-index:9998;margin:0}#wysija_toolbar #wysija_notices span{font-size:12px !important;font-weight:normal !important}.wj_content{background-color:#fcfcfc;border:1px solid #dfdfdf;border-top:0 none;padding:0 0 10px 0}.wj_content li{padding:10px 10px 0 10px;position:relative}.wj_content li.notice{font-style:italic;font-size:11px;margin:0 !important;border:0 none !important;background:none !important}.wj_images{z-index:999;background-color:#fcfcfc;border:1px solid #dfdfdf;border-top:0 none;padding:9px}.wj_images ul{height:360px;overflow:auto;margin:0;padding:0}.wj_images li{float:left;width:80px;margin:2px;height:80px;overflow:hidden;position:relative;border:1px solid #dfdfdf}.wj_images li img{max-height:150px;width:80px}.wj_images li a{float:left;display:block;height:80px;width:80px}.wj_button{text-align:center;width:265px;margin:20px 0;height:30px;line-height:30px}.wj_images img{cursor:move;max-width:275px}#wysija-upload-browse,#wysija-themes-browse{float:none}.wj_images #wj_images_preview{border:3px solid #dfdfdf;position:absolute;right:295px;top:0;background-color:#fff}.wj_styles{z-index:999;background-color:#fcfcfc;border:1px solid #dfdfdf;border-top:0 none;padding:9px}.wj_styles p{margin:10px 0}.wj_styles .preview{width:20px;float:none !important;height:20px;vertical-align:middle;display:-moz-inline-box;display:inline-block;*display:inline;*float:left;border:1px solid #333}.wj_styles input,.wj_styles select{height:20px;border:0 none;border:1px solid #CCC;margin:0 3px 0 0 !important;padding:0 !important;vertical-align:middle;line-height:20px;font-size:12px}.wj_styles #aUnderlineInput{margin:0 0 0 10px !important}.wj_styles select{width:75px}.wj_styles input.checkbox,.wj_styles input[type=checkbox]{border:0 none !important}.wj_styles input.color{width:55px;padding:0 0 0 2px !important}.wj_styles input.color.disabled{background-color:#eee !important;color:#eee !important}.wj_styles select.small-size{width:50px}.wj_styles select.type{width:68px}.wj_styles select.size{width:58px}.wj_styles form label{cursor:normal;margin:0 0 0 3px}.wj_themes{z-index:999;background-color:#fcfcfc;border:1px solid #dfdfdf;border-top:0 none;padding:9px}.wj_themes ul{height:360px;overflow:auto;margin:0;padding:0}.wj_themes li{float:left;width:80px;margin:2px;height:80px;overflow:hidden;border:1px solid #dfdfdf;position:relative}.wj_themes li img{max-height:150px;width:80px}.wj_themes li a{display:block}.wj_themes #wj_themes_preview{border:3px solid #dfdfdf;position:absolute;right:295px;top:0;background-color:#fff}.wysija_widget{width:275px;height:25px;line-height:25px;z-index:9999 !important}.wj_content a.wysija_item,.wysija_widget{height:25px;line-height:25px;background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #ececec);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#ececec');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));border:1px solid #DFDFDF;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;box-shadow:0 1px 0 #FFFFFF inset;display:block;font-size:12px;font-weight:bold;padding:0 0 0 7px;cursor:move;color:#222;text-shadow:0 1px 0 #FFFFFF}.wj_content a.wysija_item.disabled{cursor:help;color:#cccccc}.wysija_item_settings{position:absolute;right:15px;top:13px}.wysija_widget.image{z-index:9999 !important;height:auto !important;width:150px !important;background:none !important;border:0 none !important;box-shadow:none !important;border-radius:0 !important;padding:0 !important}#wysija_notices{z-index:20000;position:relative;left:0;top:0;padding:5px;border:1px solid #dfdfdf;border-top:0 none}#wysija_notices.notice{background-color:#FFFFE0;border-color:#E6DB55;z-index:9999}#wysija_notices.error{background-color:#FFEBE8;border-color:#CC0000}#wysija_notice_msg{font-size:14px;font-weight:bold}.align-center{text-align:center}.align-left{text-align:left}.align-right{text-align:right}.align-justify{text-align:justify}.wysija_gallery{position:relative}.wysija_gallery.center{margin:0 auto}.wysija_gallery.right{text-align:right}.wysija_gallery.left{text-align:left}.wysija_row{width:100%}.wysija_cell{float:left;text-align:center}.resize-controls{position:absolute;left:0;right:0;top:0;bottom:0;z-index:99000;border:1px dashed #ccc}.resize-handle{position:absolute;bottom:0;right:0;width:20px;height:20px;border:0 none;z-index:1001;cursor:se-resize;background:transparent url(../img/controls/resize-se.png) no-repeat scroll right bottom}.resize-info{position:absolute;bottom:0;left:4px;font-size:0.8em;padding:0;margin:0;text-shadow:0 1px 0 #F7F5F2;white-space:nowrap}.right .resize-handle{position:absolute;bottom:0;left:0;width:20px;height:20px;border:0 none;z-index:1001;cursor:sw-resize;background:transparent url(../img/controls/resize-sw.png) no-repeat scroll left bottom}.right .resize-info{left:auto !important;right:4px}#adminmenu li .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{z-index:1001 !important}.wysija_divider{margin:0 auto;width:564px}.wysija_block.auto-post.hover .wysija_content *,.wysija_block.auto-post.hover .wysija_divider{z-index:1000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";filter:alpha(opacity=30);-moz-opacity:0.3;opacity:0.3}.wysija_auto-post .wysija_divider{text-align:center;margin:0 !important;width:100% !important}.wysija_auto-post .nopost{height:100px}.wysija_auto-post .nopost p{margin:25px 0 0 0}.wysija_settings{left:10px;position:absolute;top:0;z-index:1000}.wysija_settings a{background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #ececec);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#ececec');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));border:1px solid #DFDFDF;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;box-shadow:0 1px 0 #FFFFFF inset;font-size:12px;font-weight:normal;cursor:pointer;color:#222;text-shadow:0 1px 0 #FFFFFF;text-decoration:none;display:block;padding:5px 5px 3px 27px}.wysija_settings a span{width:20px;height:20px;position:absolute;top:3px;left:5px}#wysija_toggle_images{position:absolute;top:5px;right:5px;z-index:1000;width:73px;height:33px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter:alpha(opacity=50);-moz-opacity:0.5;opacity:0.5;background-color:#fff}#wysija_toggle_images.on{background:url(../img/controls/images-toggle-on.png) no-repeat}#wysija_toggle_images.off{background:url(../img/controls/images-toggle-off.png) no-repeat}#wysija_toggle_images:hover{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1.0;opacity:1.0}.wysija_block.auto-post{padding:0 !important}.wysija_auto-post .wysija_content{padding:10px 17px !important}.wysija_auto-post .wysija_content:after{content:".";display:block;height:0;clear:both;visibility:hidden}.wysija_auto-post .wysija_content{display:inline-table}* html .wysija_auto-post .wysija_content{height:1%}.wysija_auto-post .wysija_content{display:block}.wysija_auto-post .wysija_divider{padding:9px 0 !important}.wysija_block.auto-post.hover .wysija_content{padding:10px 17px !important}.wysija_auto-post .wysija_text{pointer-events:none;cursor:default}.wysija_auto-post .wysija_image{pointer-events:none;cursor:default}.auto-post.hover .wysija_content:last-child{padding:9px 17px 9px 17px !important}.wysija_auto-post .loading{padding:10px 17px;font-size:10px}#wysija_popup_overlay{background-color:#000;height:100%;left:0;position:fixed;top:0;width:100%;z-index:999989;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";filter:alpha(opacity=75);-moz-opacity:0.75;opacity:0.75}#wysija_popup_overlay.loading{background:url(../img/popup/loading.gif) no-repeat 50% 50% #000}#wysija_popup{position:absolute;top:0;left:0;width:600px;height:400px;background-color:#fff;z-index:999999;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;-moz-box-shadow:#000 0 4px 30px;-webkit-box-shadow:#000 0 4px 30px;-khtml-box-shadow:#000 0 4px 30px;box-shadow:#000 0 4px 30px;border:1px solid #555}#wysija_popup_content{padding:0;overflow:hidden;position:relative}#wysija_popup_title{background-color:#222;border:1px solid #333;height:27px;margin:0;padding:0}#wysija_popup_title h3{color:#cfcfcf;font-size:12px;font-weight:normal;margin:6px 0 0 10px;padding:0;float:left;font:12px "Lucida Grande", Verdana, Arial, sans-serif}#wysija_popup_iframe{border:0 none;outline:0 none}#wysija_popup_close{background:url(../img/popup/close.png) no-repeat;height:15px;width:15px;background-color:#333;display:block;float:right;margin:6px 10px 0 0}.mpoet-ui .wysija_item_settings{text-decoration:none}.mpoet-ui .settings span{background:none;color:#999}.mpoet-ui .wysija_item_settings:hover .dashicons-admin-generic:before,.mpoet-ui .settings:hover .dashicons-admin-generic:before{color:#2ea2cc}.wp_themeSkin .mceToolbar{margin:0 !important;padding:0 !important}
|
1 |
+
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.clearfix{display:inline-table}* html .clearfix{height:1%}.clearfix{display:block}.hidden{display:none}strong{font-weight:bold}img{vertical-align:middle}:focus{outline:0 !important}.inline{display:-moz-inline-box;display:inline-block;*display:inline;*float:left}.wysija_controls li,.wysija_tools li,.wysija_tools dd{margin:0 !important}#wysija_items{position:fixed;width:275px;right:20px;top:20px;z-index:999}#wysija_items li{line-height:100px;height:100px;outline:1px solid #ccc;text-align:center}.wysija_items li.disabled{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";filter:alpha(opacity=20);-moz-opacity:0.2;opacity:0.2}.wysija_items li.active a{height:100px;cursor:pointer;display:block}.wysija_header,.wysija_footer{position:relative;display:inline-table;display:block;height:1%;margin:0;padding:0;z-index:999}.wysija_header:after,.wysija_footer:after{content:".";display:block;height:0;clear:both;visibility:hidden}.wysija_block{position:relative;margin:0 10px;padding:10px 18px 10px 18px;display:inline-table;display:block;height:1%;margin:0;z-index:999}.wysija_block.dragging,.wysija_header.dragging,.wysija_footer.dragging{z-index:99000}.wysija_block:after{content:".";display:block;height:0;clear:both;visibility:hidden}.wysija_block.hover{border:1px dashed #bbb;margin:0 0 0 0;padding:9px 17px 9px 17px}.wysija_block.static{padding:0;margin:0}.wysija_block .wysija_controls{background-color:#dfdfdf;background-image:-moz-linear-gradient(center bottom, #bbb, #eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#bbb), to(#eee));-moz-border-radius:2px;-webkit-border-radius:2px;-khtml-border-radius:2px;border-radius:2px;border:1px solid #ccc;position:absolute;margin:0;padding:0;width:598px;height:20px;left:-1px;rigth:0;top:-22px}.wysija_block .wysija_controls .handle{width:598px}.wysija_block .wysija_controls li{float:left;width:20px;height:20px}.wysija_block .wysija_controls a{cursor:pointer;float:left;font-size:120%;font-weight:bold;height:20px;line-height:20px;text-align:center;width:20px;color:#000}.wysija_gallery .wysija_tools,.wysija_image .wysija_tools{position:absolute;height:34px;line-height:34px;margin:0;width:152px;top:-36px;z-index:1010;background-color:#dfdfdf;background-image:-moz-linear-gradient(center bottom, #bbb, #eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#bbb), to(#eee));-moz-border-radius:2px;-webkit-border-radius:2px;-khtml-border-radius:2px;border-radius:2px;border:1px solid #ccc;padding:0 0 0 5px}.wysija_gallery .wysija_tools{width:102px}.left .wysija_image .wysija_tools,.center .wysija_image .wysija_tools,.left.wysija_gallery .wysija_tools,.center.wysija_gallery .wysija_tools{left:0;text-align:left}.right .wysija_image .wysija_tools,.right.wysija_gallery .wysija_tools{right:0;text-align:right}.wysija_text .wysija_tools{position:absolute;height:20px;line-height:20px;top:0;right:0;margin:0;z-index:1000;width:20px}.wysija_text.alone .wysija_tools{display:none}.wysija_gallery .wysija_tools li,.wysija_image .wysija_tools li{float:left;width:25px;height:34px}.wysija_text .wysija_tools li{float:left;width:20px;height:20px}.wysija_gallery .wysija_tools a,.wysija_image .wysija_tools a,.wysija_text .wysija_tools a{background-color:#dfdfdf;background-image:-moz-linear-gradient(center bottom, #bbb, #eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#bbb), to(#eee));float:left;width:20px;height:20px;margin:5px 3px 0 0;-moz-border-radius:2px;-webkit-border-radius:2px;-khtml-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;-moz-box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;box-shadow:0 1px 0 rgba(0,0,0,0.15),inset 0 0 2px 1px #fff;border:1px solid #ccc;z-index:1010;position:relative}.wysija_text .wysija_tools a{margin:0}.wysija_gallery .wysija_tools a:hover,.wysija_image .wysija_tools a:hover,.wysija_text .wysija_tools a:hover{background-color:#ddd;border-color:#909090}.wysija_gallery .wysija_tools a.active,.wysija_image .wysija_tools a.active,.wysija_text .wysija_tools a.active{background-color:#ddd;background-image:-moz-linear-gradient(center bottom, #eee, #bbb);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#eee), to(#bbb));border-color:#909090}.wysija_controls a span,.wysija_gallery .wysija_tools a span,.wysija_image .wysija_tools a span,.wysija_text .wysija_tools a span,.wj_content a span{display:block;height:20px;width:20px}.wysija_controls span input{margin:2px 0 0 0}.alignment-left span{background:url(../img/controls/icons.png) no-repeat 0 0}.alignment-left.active span,.alignment-left:hover span{background:url(../img/controls/icons.png) no-repeat 0 -20px}.alignment-center span{background:url(../img/controls/icons.png) no-repeat -20px 0}.alignment-center.active span,.alignment-center:hover span{background:url(../img/controls/icons.png) no-repeat -20px -20px}.alignment-right span{background:url(../img/controls/icons.png) no-repeat -40px 0}.alignment-right.active span,.alignment-right:hover span{background:url(../img/controls/icons.png) no-repeat -40px -20px}.add-link span{background:url(../img/controls/icons.png) no-repeat -60px 0}.add-link.active span,.add-link:hover span{background:url(../img/controls/icons.png) no-repeat -60px -20px}.remove-link span{background:url(../img/controls/icons.png) no-repeat -80px 0}.remove-link.active span,.remove-link:hover span{background:url(../img/controls/icons.png) no-repeat -80px -20px}.remove span{background:url(../img/controls/icons.png) no-repeat -100px 0}.remove.active span,.remove:hover span{background:url(../img/controls/icons.png) no-repeat -100px -20px}.handle span{background:url(../img/controls/icons.png) no-repeat -120px 0;cursor:move}.handle.active span,.handle:hover span{background:url(../img/controls/icons.png) no-repeat -120px -20px;cursor:move}.duplicate span{background:url(../img/controls/icons.png) no-repeat -140px 0}.duplicate.active span,.duplicate:hover span{background:url(../img/controls/icons.png) no-repeat -140px -20px}.settings span{background:url(../img/controls/icons.png) no-repeat -160px 0}.settings.active span,.settings:hover span{background:url(../img/controls/icons.png) no-repeat -160px -20px}.icon-plus span{background:url(../img/controls/icons.png) no-repeat -200px 0}.icon-plus.active span,.icon-plus:hover span{background:url(../img/controls/icons.png) no-repeat -200px -20px}.icon-minus span{background:url(../img/controls/icons.png) no-repeat -220px 0}.icon-minus.active span,.icon-minus:hover span{background:url(../img/controls/icons.png) no-repeat -220px -20px}.banner{color:#000;background-color:#fff;z-index:999;text-align:center;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";filter:alpha(opacity=70);-moz-opacity:0.7;opacity:0.7;width:600px;position:absolute;top:0;right:0;left:0;bottom:0;white-space:nowrap;font-size:16px !important}.banner .banner-message{margin:20px auto 0 auto}.banner .banner-notice{margin:10px auto 0 auto;font-size:12px;font-style:italic}#wysija_wrapper{padding:20px;width:600px;border:1px solid #ccc;position:relative;background-color:#fff;-webkit-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);-moz-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);box-shadow:0 0 5px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1)}#wysija_wrapper:before,#wysija_wrapper:after{position:absolute;width:40%;height:10px;content:' ';left:12px;bottom:12px;background:transparent;-webkit-transform:skew(-5deg) rotate(-5deg);-moz-transform:skew(-5deg) rotate(-5deg);-ms-transform:skew(-5deg) rotate(-5deg);-o-transform:skew(-5deg) rotate(-5deg);transform:skew(-5deg) rotate(-5deg);-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);-moz-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3);z-index:-1}#wysija_wrapper:after{left:auto;right:12px;-webkit-transform:skew(5deg) rotate(5deg);-moz-transform:skew(5deg) rotate(5deg);-ms-transform:skew(5deg) rotate(5deg);-o-transform:skew(5deg) rotate(5deg);transform:skew(5deg) rotate(5deg)}body.rtl #wysija_wrapper{right:603px !important}#wysija_container{margin:30px 0 0 0;width:600px;border-collapse:collapse;width:600px;margin:0;padding:0}#wysija_header{padding:0}#wysija_body{vertical-align:top;padding:0}#wysija_footer{padding:0}.empty{display:none}.empty.active.wysija_image,.empty.active.wysija_text{display:block}#wysija_block_placeholder{height:0;padding:0;margin:0}#block_placeholder{margin:0;height:0}#block_placeholder.active{margin:18px 18px 0px 18px;display:block;height:30px}.block_placeholder{border:0 none;z-index:9500;margin:0;position:relative;left:0;top:-10px;width:562px}.wysija_block .block_placeholder,.wysija_block .text_placeholder,.wysija_block .image_placeholder{margin:0}.image_placeholder{margin:1px 0 0 1px}.wysija_block .block_placeholder.active,.wysija_block .text_placeholder.active{height:30px}.block_placeholder,.text_placeholder,.image_placeholder.empty{transition:opacity .25s, height .25s linear;-moz-transition:opacity .25s, height .25s linear;-webkit-transition:opacity .25s, height .25s linear;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);-moz-opacity:0;opacity:0;height:0;margin:0}.image_placeholder.active{border:1px dashed #bbb;background-color:#f5f5f5;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter:alpha(opacity=50);-moz-opacity:0.5;opacity:0.5;transition:opacity .25s;-moz-transition:opacity .25s;-webkit-transition:opacity .25s}.block_placeholder.active,.text_placeholder.active,.image_placeholder.empty.active{border:1px dashed #bbb;background-color:#f5f5f5;display:block;transition:opacity .25s, height .25s linear;-moz-transition:opacity .25s, height .25s linear;-webkit-transition:opacity .25s, height .25s linear;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter:alpha(opacity=50);-moz-opacity:0.5;opacity:0.5}.wysija_content .empty.editable{margin:0 !important}.block_placeholder.active,.wysija_content.center .text_placeholder.active{height:30px}.image_placeholder.empty.active{height:80px;width:80px}.wysija_image.empty.active{width:80px}.wysija_content.right .wysija_image.empty.active{margin-right:3px}.auto-post .block_placeholder.active{margin:0 0 0 18px}.block_placeholder.hover,.text_placeholder.hover,.image_placeholder.hover,.image_placeholder.empty.hover{background-color:#e5e5e5;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1.0;opacity:1.0}.text_placeholder.hover{display:block}#wysija_header .wysija_image.active,#wysija_footer .wysija_image.active{left:0;top:0;right:0}.wysija_header .image_placeholder,.wysija_footer .image_placeholder{border:0 none !important;margin:0 !important}.wysija_header .image_placeholder.active,.wysija_footer .image_placeholder.active{border:0 none !important}.wysija_options{display:none}.wysija_content .wysija_image,.wysija_content.center .wysija_image{margin:0 auto 15px auto;cursor:move}.wysija_content.center .image_placeholder.active{margin:0 0 -2px 0}.wysija_header .wysija_content.center .wysija_image,.wysija_footer .wysija_content.center .wysija_image{margin:0 auto}.wysija_header .wysija_content.left .wysija_image,.wysija_header .wysija_content.right .wysija_image,.wysija_footer .wysija_content.left .wysija_image,.wysija_footer .wysija_content.right .wysija_image{margin:0 0 0 0}.wysija_header .wysija_content.center .image_placeholder.active,.wysija_footer .wysija_content.center .image_placeholder.active{margin:0}.wysija_content.left{float:none}.wysija_gallery.left{float:left}.wysija_content.left .wysija_image{float:left;margin:0 15px 5px 0}.wysija_gallery.right{float:right}.wysija_content.right .wysija_image{float:right;margin:0 0 5px 15px}.wysija_content .wysija_image.alone{margin:0 !important}.wysija_content.center .wysija_image.alone{margin:0 auto !important}.wysija_content.left .wysija_image.active{margin:0 13px 3px 0;left:-1px;top:-1px}.wysija_content.center .wysija_image.active{left:-1px;top:-1px}.wysija_content.right .wysija_image.active{margin:0 0 3px 13px;top:-1px;right:-1px}.wysija_image{position:relative;z-index:999}.wysija_image .url-info{position:absolute;bottom:0;left:0;font-size:0.7em;padding:2px;color:#000;background-color:#fff;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80);-moz-opacity:0.8;opacity:0.8}.wysija_content.left .wysija_image .url-info{right:0;left:auto}.wysija_text{position:relative;z-index:998}.wysija_text.editing{border:1px solid #dfdfdf}.wysija_content.left .wysija_text.editing{float:left}.wysija_text .editable:hover{cursor:pointer}#wysija_toolbar{left:657px;position:absolute;top:-1000px;width:295px}#wysija_toolbar .wysija_toolbar_tabs{border-bottom:1px solid #dfdfdf;line-height:0}#wysija_toolbar .wysija_toolbar_tabs li,#wysija_toolbar .wysija_toolbar_tabs a{margin:0;height:30px;line-height:30px;padding:0;display:-moz-inline-box;display:inline-block;*display:inline;*float:left;outline:0 none}#wysija_toolbar .wysija_toolbar_tabs a{outline:0 none;text-decoration:none;color:#a6a6a6}#wysija_toolbar .wysija_toolbar_tabs li{margin:0 0 1px 0}#wysija_toolbar .wysija_toolbar_tabs a{font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#F5F5F5', endColorstr='#F9F9F9');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#f5f5f5));border:1px solid #DFDFDF;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;-khtml-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;box-shadow:0 1px 0 #FFFFFF inset;padding:0 7px}#wysija_toolbar .wysija_toolbar_tabs a:hover{background-color:#eee}#wysija_toolbar .wysija_toolbar_tabs a.selected{color:#000;border-bottom:0 none;background:#fcfcfc;filter:none;padding-bottom:1px}#wysija_toolbar .wysija_toolbar_tabs,#wysija_toolbar .wj_content,#wysija_toolbar .wj_images,#wysija_toolbar .wj_styles,#wysija_toolbar .wj_themes{position:relative;z-index:9998;margin:0}#wysija_toolbar #wysija_notices span{font-size:12px !important;font-weight:normal !important}.wj_content{background-color:#fcfcfc;border:1px solid #dfdfdf;border-top:0 none;padding:0 0 10px 0}.wj_content li{padding:10px 10px 0 10px;position:relative}.wj_content li.notice{font-style:italic;font-size:11px}.wj_images{z-index:999;background-color:#fcfcfc;border:1px solid #dfdfdf;border-top:0 none;padding:9px}.wj_images ul{height:360px;overflow:auto;margin:0;padding:0}.wj_images li{float:left;width:80px;margin:2px;height:80px;overflow:hidden;position:relative;border:1px solid #dfdfdf}.wj_images li img{max-height:150px;width:80px}.wj_images li a{float:left;display:block;height:80px;width:80px}.wj_button{text-align:center;width:265px;margin:20px 0;height:30px;line-height:30px}.wj_images img{cursor:move;max-width:275px}.wj_images #wj_images_preview{border:3px solid #dfdfdf;position:absolute;right:295px;top:0;background-color:#fff}.wj_styles{z-index:999;background-color:#fcfcfc;border:1px solid #dfdfdf;border-top:0 none;padding:9px}.wj_styles p{margin:10px 0}.wj_styles .preview{width:20px;float:none !important;height:20px;vertical-align:middle;display:-moz-inline-box;display:inline-block;*display:inline;*float:left;border:1px solid #333}.wj_styles input,.wj_styles select{height:20px;border:0 none;border:1px solid #CCC;margin:0 3px 0 0 !important;padding:0 !important;vertical-align:middle;line-height:20px;font-size:12px}.wj_styles #aUnderlineInput{margin:0 0 0 10px !important}.wj_styles select{width:75px}.wj_styles input.checkbox,.wj_styles input[type=checkbox]{border:0 none !important}.wj_styles input.color{width:55px;padding:0 0 0 2px !important}.wj_styles input.color.disabled{background-color:#eee !important;color:#eee !important}.wj_styles select.small-size{width:50px}.wj_styles select.type{width:68px}.wj_styles select.size{width:58px}.wj_styles form label{cursor:normal;margin:0 0 0 3px}.wj_themes{z-index:999;background-color:#fcfcfc;border:1px solid #dfdfdf;border-top:0 none;padding:9px}.wj_themes ul{height:360px;overflow:auto;margin:0;padding:0}.wj_themes li{float:left;width:80px;margin:2px;height:80px;overflow:hidden;border:1px solid #dfdfdf;position:relative}.wj_themes li img{max-height:150px;width:80px}.wj_themes li a{display:block}.wj_themes #wj_themes_preview{border:3px solid #dfdfdf;position:absolute;right:295px;top:0;background-color:#fff}.wysija_widget{width:275px;height:25px;line-height:25px;z-index:9999 !important}.wj_content a.wysija_item,.wysija_widget{height:25px;line-height:25px;background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #ececec);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#ececec');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));border:1px solid #DFDFDF;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;box-shadow:0 1px 0 #FFFFFF inset;display:block;font-size:12px;font-weight:bold;padding:0 0 0 7px;cursor:move;color:#222;text-shadow:0 1px 0 #FFFFFF}.wj_content a.wysija_item.disabled{cursor:help;color:#cccccc}.wysija_item_settings{position:absolute;right:15px;top:14px}.wysija_widget.image{z-index:9999 !important;height:auto !important;width:150px !important;background:none !important;border:0 none !important;box-shadow:none !important;border-radius:0 !important;padding:0 !important}#wysija_notices{z-index:20000;position:relative;left:0;top:0;padding:5px;border:1px solid #dfdfdf;border-top:0 none}#wysija_notices.notice{background-color:#FFFFE0;border-color:#E6DB55;z-index:9999}#wysija_notices.error{background-color:#FFEBE8;border-color:#CC0000}#wysija_notice_msg{font-size:14px;font-weight:bold}.align-center{text-align:center}.align-left{text-align:left}.align-right{text-align:right}.align-justify{text-align:justify}.wysija_gallery{position:relative}.wysija_gallery.center{margin:0 auto}.wysija_gallery.right{text-align:right}.wysija_gallery.left{text-align:left}.wysija_row{width:100%}.wysija_cell{float:left;text-align:center}.resize-controls{position:absolute;left:-1px;right:-1px;top:-1px;height:100%;z-index:99000;border:1px dashed #ccc}.resize-handle{position:absolute;bottom:0;right:0;width:20px;height:20px;border:0 none;z-index:1001;cursor:se-resize;background:transparent url(../img/controls/resize-se.png) no-repeat scroll right bottom}.resize-info{position:absolute;bottom:0;left:0;font-size:0.8em;padding:2px;text-shadow:0 1px 0 #F7F5F2}.right .resize-handle{position:absolute;bottom:0;left:0;width:20px;height:20px;border:0 none;z-index:1001;cursor:sw-resize;background:transparent url(../img/controls/resize-sw.png) no-repeat scroll left bottom}.right .resize-info{position:absolute;bottom:0;right:0;text-align:right}#adminmenu li .wp-submenu,.folded #adminmenu .wp-has-current-submenu .wp-submenu{z-index:1001 !important}.wysija_divider{margin:0 auto;width:564px}.wysija_block.auto-post.hover .wysija_content *,.wysija_block.auto-post.hover .wysija_divider{z-index:1000;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";filter:alpha(opacity=30);-moz-opacity:0.3;opacity:0.3}.wysija_auto-post .wysija_divider{text-align:center;margin:0 !important;width:100% !important}.wysija_auto-post .nopost{height:100px}.wysija_auto-post .nopost p{margin:25px 0 0 0}.wysija_settings{left:10px;position:absolute;top:0;z-index:1000}.wysija_settings a{background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #ececec);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#ececec');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));border:1px solid #DFDFDF;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;box-shadow:0 1px 0 #FFFFFF inset;font-size:12px;font-weight:normal;cursor:pointer;color:#222;text-shadow:0 1px 0 #FFFFFF;text-decoration:none;display:block;padding:5px 5px 3px 27px}.wysija_settings a span{width:20px;height:20px;position:absolute;top:3px;left:5px}#wysija_toggle_images{position:absolute;top:5px;right:5px;z-index:1000;width:73px;height:33px;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter:alpha(opacity=50);-moz-opacity:0.5;opacity:0.5;background-color:#fff}#wysija_toggle_images.on{background:url(../img/controls/images-toggle-on.png) no-repeat}#wysija_toggle_images.off{background:url(../img/controls/images-toggle-off.png) no-repeat}#wysija_toggle_images:hover{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);-moz-opacity:1.0;opacity:1.0}.wysija_block.auto-post{padding:0px 1px !important}.wysija_block.auto-post.hover{padding:0 !important}.wysija_auto-post .wysija_content{padding:10px 18px !important}.wysija_auto-post .wysija_divider{padding:10px 0 !important}.wysija_block.auto-post.hover .wysija_content{padding:10px 17px !important}.wysija_block.auto-post.hover .wysija_content.first{padding:9px 17px 10px 17px !important}.wysija_block.auto-post.hover .wysija_content.last{padding:10px 17px 9px 17px !important}.wysija_auto-post .loading{padding:10px 18px;font-size:10px}#wysija_popup_overlay{background-color:#000;height:100%;left:0;position:fixed;top:0;width:100%;z-index:999989;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";filter:alpha(opacity=75);-moz-opacity:0.75;opacity:0.75}#wysija_popup_overlay.loading{background:url(../img/popup/loading.gif) no-repeat 50% 50% #000}#wysija_popup{position:absolute;top:0;left:0;width:600px;height:400px;background-color:#fff;z-index:999999;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;-moz-box-shadow:#000 0 4px 30px;-webkit-box-shadow:#000 0 4px 30px;-khtml-box-shadow:#000 0 4px 30px;box-shadow:#000 0 4px 30px;border:1px solid #555}.rtl #wysija_popup{min-width:700px}#wysija_popup_content{padding:0;overflow:hidden;position:relative}#wysija_popup_title{background-color:#222;border:1px solid #333;height:27px;margin:0;padding:0}#wysija_popup_title h3{color:#cfcfcf;font-size:12px;font-weight:normal;margin:6px 0 0 10px;padding:0;float:left;font:12px "Lucida Grande", Verdana, Arial, sans-serif}#wysija_popup_iframe{border:0 none;outline:0 none}.rtl #wysija_popup_iframe{min-width:700px}#wysija_popup_close{background:url(../img/popup/close.png) no-repeat;height:15px;width:15px;background-color:#333;display:block;float:right;margin:6px 10px 0 0}.debug-line{position:absolute;left:0;top:0;display:block;height:1px;width:100%}.debug-line.red{background-color:#f00}.debug-line.green{background-color:#0f0}.debug-line.blue{background-color:#00f}
|
css/wysija-form-editor.css
CHANGED
@@ -1 +1 @@
|
|
1 |
-
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.clearfix{display:inline-table}* html .clearfix{height:1%}.clearfix{display:block}.hidden{display:none}strong{font-weight:bold}img{vertical-align:middle}:focus{outline:0 !important}.inline{display:-moz-inline-box;display:inline-block;*display:inline;*float:left}#form-error{padding:10px;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;color:#000;font-weight:normal;background-color:#ffebe8;border:1px solid #c00}#form-notice{padding:10px;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;color:#555555;font-weight:normal;background-color:#FFFBCC;border:1px solid #E6DB55}#wysija_form_editor{padding:20px;width:600px;border:1px solid #ccc;position:relative;background-color:#fff;-webkit-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);-moz-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);box-shadow:0 0 5px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1)}#wysija_form_editor:before,#wysija_form_editor:after{position:absolute;width:40%;height:10px;content:' ';left:12px;bottom:12px;background:transparent;-webkit-transform:skew(-5deg) rotate(-5deg);-moz-transform:skew(-5deg) rotate(-5deg);-ms-transform:skew(-5deg) rotate(-5deg);-o-transform:skew(-5deg) rotate(-5deg);transform:skew(-5deg) rotate(-5deg);-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);-moz-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3);z-index:-1}#wysija_form_editor:after{left:auto;right:12px;-webkit-transform:skew(5deg) rotate(5deg);-moz-transform:skew(5deg) rotate(5deg);-ms-transform:skew(5deg) rotate(5deg);-o-transform:skew(5deg) rotate(5deg);transform:skew(5deg) rotate(5deg)}.wysija_form_block .wysija_warning{font-weight:bold;color:#900}.block_placeholder{margin:0;border:0 none}.block_placeholder.active{border:1px dashed #b4b4b4;margin:10px;display:block}.block_placeholder.hover{margin:10px;border:1px dashed #b4b4b4;background-color:#f5f5f5}.wysija_form_block{background-color:#fff;height:20px;border:0 none}.wysija_form_block.highlighted{border:1px solid #5897FB;padding:9px 17px}.wysija_form_block img{max-width:100%}.wysija_form_block p{margin:5px 0;word-wrap:break-word}.wysija_form_block p input.radio,.wysija_form_block p input.checkbox{margin:0 5px 0 0}#wysija_form_container{width:640px;margin:0}#wysija-add-field{float:none}#wysija_form_toolbar{position:absolute;width:295px}#wysija_form_toolbar .wysija_form_toolbar_tabs{border-bottom:1px solid #dfdfdf;line-height:0}#wysija_form_toolbar .add_custom_field{text-align:center;padding:15px 0 5px 0}#wysija_form_toolbar .wysija_form_toolbar_tabs li,#wysija_form_toolbar .wysija_form_toolbar_tabs a{margin:0;height:30px;line-height:30px;padding:0;display:-moz-inline-box;display:inline-block;*display:inline;*float:left;outline:0 none}#wysija_form_toolbar .wysija_form_toolbar_tabs a{outline:0 none;text-decoration:none;color:#a6a6a6}#wysija_form_toolbar .wysija_form_toolbar_tabs li{margin:0 0 1px 0}#wysija_form_toolbar .wysija_form_toolbar_tabs a{font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#F5F5F5', endColorstr='#F9F9F9');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#f5f5f5));border:1px solid #DFDFDF;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;-khtml-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;box-shadow:0 1px 0 #FFFFFF inset;padding:0 7px}#wysija_form_toolbar .wysija_form_toolbar_tabs a:hover{background-color:#eee}#wysija_form_toolbar .wysija_form_toolbar_tabs a.selected{color:#000;border-bottom:0 none;background:#fcfcfc;filter:none;padding-bottom:1px}#wysija_form_toolbar .wysija_form_toolbar_tabs,#wysija_form_toolbar .wj_content,#wysija_form_toolbar .wj_images,#wysija_form_toolbar .wj_styles,#wysija_form_toolbar .wj_themes{position:relative;z-index:9998;margin:0}.wysija_form_widget{width:275px;height:25px;line-height:25px;z-index:9999 !important}#wysija_form_toolbar a.wysija_form_item,.wysija_form_widget{height:25px;line-height:25px;background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #ececec);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#ececec');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));border:1px solid #DFDFDF;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;box-shadow:0 1px 0 #FFFFFF inset;display:block;font-size:12px;font-weight:bold;padding:0 0 0 7px;cursor:move;color:#222;text-shadow:0 1px 0 #FFFFFF}#wysija_form_toolbar a.wysija_form_item.disabled{cursor:pointer;color:#cccccc;pointer-events:none}.wysija_form_item_settings{position:absolute;right:35px;top:13px}.wysija_form_item_delete{position:absolute;right:15px;top:13px}.wj_content{background-color:#fcfcfc;border:1px solid #dfdfdf;padding:0 0 10px 0}.wj_content li{padding:10px 10px 0 10px;position:relative}.wj_content li.notice{font-style:italic;font-size:11px;margin:0 !important;border:0 none !important;background:none !important}.wysija_form_block{position:relative;margin:0;padding:10px 18px 10px 18px;display:inline-table;display:block;height:1%;margin:0;z-index:98}.wysija_form_block.dragging{z-index:99000;pointer-events:none}.wysija_form_block:after{content:".";display:block;height:0;clear:both;visibility:hidden}.wysija_form_block.hover{border:1px dashed #bbb;margin:0 0 0 0;padding:9px 17px 9px 17px}.wysija_form_block.static{background-color:#999}.wysija_form_block .wysija_controls{background-color:#dfdfdf;background-image:-moz-linear-gradient(center bottom, #bbb, #eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#bbb), to(#eee));-moz-border-radius:2px;-webkit-border-radius:2px;-khtml-border-radius:2px;border-radius:2px;border:1px solid #ccc;position:absolute;margin:0;padding:0;width:598px;height:20px;left:-1px;right:0;top:-22px}.wysija_form_block .wysija_controls li{float:left;width:20px;height:20px}.wysija_form_block .wysija_controls a{cursor:pointer;float:left;font-size:120%;font-weight:bold;height:20px;line-height:20px;text-align:center;width:20px;color:#000}.wysija_form_block .wysija_controls a.remove{margin:0 0 0 1px}.wysija_form_block .handle_container,.wysija_form_block .handle_container a{float:none;width:40px !important}.wysija_form_block .handle_container{left:280px;top:0;position:absolute}.wysija_controls a span,.wysija_gallery .wysija_tools a span,.wysija_image .wysija_tools a span,.wysija_text .wysija_tools a span,.wj_content a span{display:block;height:20px;width:20px}.wysija_controls span input{margin:2px 0 0 0;padding:0;color:transparent}.alignment-left span{background:url(../img/controls/icons.png) no-repeat 0 0}.alignment-left.active span,.alignment-left:hover span{background:url(../img/controls/icons.png) no-repeat 0 -20px}.alignment-center span{background:url(../img/controls/icons.png) no-repeat -20px 0}.alignment-center.active span,.alignment-center:hover span{background:url(../img/controls/icons.png) no-repeat -20px -20px}.alignment-right span{background:url(../img/controls/icons.png) no-repeat -40px 0}.alignment-right.active span,.alignment-right:hover span{background:url(../img/controls/icons.png) no-repeat -40px -20px}.add-link span{background:url(../img/controls/icons.png) no-repeat -60px 0}.add-link.active span,.add-link:hover span{background:url(../img/controls/icons.png) no-repeat -60px -20px}.remove-link span{background:url(../img/controls/icons.png) no-repeat -80px 0}.remove-link.active span,.remove-link:hover span{background:url(../img/controls/icons.png) no-repeat -80px -20px}.remove span,.delete span{background:url(../img/controls/icons.png) no-repeat -100px 0}.remove.active span,.remove:hover span,.delete.active span,.delete:hover span{background:url(../img/controls/icons.png) no-repeat -100px -20px}.handle span{background:url(../img/controls/grip-handle.png) no-repeat;cursor:move;width:40px !important}.duplicate span{background:url(../img/controls/icons.png) no-repeat -140px 0}.duplicate.active span,.duplicate:hover span{background:url(../img/controls/icons.png) no-repeat -140px -20px}.settings span{background:url(../img/controls/icons.png) no-repeat -160px 0}.settings.active span,.settings:hover span{background:url(../img/controls/icons.png) no-repeat -160px -20px}.icon-plus span{background:url(../img/controls/icons.png) no-repeat -200px 0}.icon-plus.active span,.icon-plus:hover span{background:url(../img/controls/icons.png) no-repeat -200px -20px}.icon-minus span{background:url(../img/controls/icons.png) no-repeat -220px 0}.icon-minus.active span,.icon-minus:hover span{background:url(../img/controls/icons.png) no-repeat -220px -20px}.wysija_options{display:none}.wysija_settings{left:10px;position:absolute;top:0;z-index:1000}.wysija_settings a{background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #ececec);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#ececec');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));border:1px solid #DFDFDF;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;box-shadow:0 1px 0 #FFFFFF inset;font-size:12px;font-weight:normal;cursor:pointer;color:#222;text-shadow:0 1px 0 #FFFFFF;text-decoration:none;display:block;padding:5px 5px 3px 27px}.wysija_settings a span{width:20px;height:20px;position:absolute;top:3px;left:5px}.wysija_form_block label{margin:0 5px 0 0;display:block}#wysija_widget_templates{display:none}#wysija_popup_overlay{background-color:#000;height:100%;left:0;position:fixed;top:0;width:100%;z-index:999998;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";filter:alpha(opacity=75);-moz-opacity:0.75;opacity:0.75}#wysija_popup_overlay.loading{background:url(../img/popup/loading.gif) no-repeat 50% 50% #000}#wysija_popup{position:absolute;top:0;left:0;width:600px;height:400px;background-color:#fff;z-index:999999;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;-moz-box-shadow:#000 0 4px 30px;-webkit-box-shadow:#000 0 4px 30px;-khtml-box-shadow:#000 0 4px 30px;box-shadow:#000 0 4px 30px;border:1px solid #555}#wysija_popup_content{padding:0;overflow:hidden;clear:both}#wysija_popup_title{background-color:#222;border:1px solid #333;height:27px;margin:0;padding:0}#wysija_popup_title h3{color:#cfcfcf;font-size:12px;font-weight:normal;margin:6px 0 0 10px;padding:0;float:left;font:12px "Lucida Grande", Verdana, Arial, sans-serif}#wysija_popup_title.empty{background-color:transparent;height:0;border:0 none}#wysija_popup_iframe{border:0 none;outline:0 none}#wysija_popup_close{background:url(../img/popup/close.png) no-repeat;height:15px;width:15px;background-color:#333;display:block;float:right;margin:6px 10px 0 0}h2.title{height:40px;line-height:40px;margin:0 0 15px 0}h2.title span,h2.title form{float:left;margin:0 5px 0 0;vertical-align:middle}h2.title span#form-name{padding:0 3px;margin:0 10px 0 0;font-style:italic}h2.title span#form-name-default{display:none}h2.title #edit-form-name{float:left;margin:10px 5px 0 0}h2.title input{margin:0 10px 0 0}#list-selection{margin:30px 0 0 0}#list-selection label{display:block}#after-submit{margin:30px 0 0 0}#after-submit textarea{width:300px;height:50px}#form-export-links{margin:20px 0 0 0}#form-export textarea{width:100%;height:100px}#wysija_notices{z-index:20000;position:relative;left:0;top:0;padding:5px;border:1px solid #dfdfdf;border-top:0 none}#wysija_notices.notice{background-color:#FFFFE0;border-color:#E6DB55;z-index:9999}#wysija_notices.error{background-color:#FFEBE8;border-color:#CC0000}#wysija_notice_msg{font-size:14px;font-weight:bold}.expand-code{cursor:pointer}.wysija_form_block textarea{resize:none}.mpoet-ui .wysija_form_item_settings,.mpoet-ui .wysija_form_item_delete{text-decoration:none}.mpoet-ui .wysija_form_item_settings:hover .dashicons-admin-generic:before,.mpoet-ui .wysija_form_item_delete:hover .dashicons-dismiss:before,.mpoet-ui .settings:hover .dashicons-admin-generic:before{color:#2ea2cc}.mpoet-ui .settings span,.mpoet-ui .delete span{background:none;color:#999}.mpoet-ui .delete span:before{font-size:21px}
|
1 |
+
.clearfix:after{content:".";display:block;height:0;clear:both;visibility:hidden}.clearfix{display:inline-table}* html .clearfix{height:1%}.clearfix{display:block}.hidden{display:none}strong{font-weight:bold}img{vertical-align:middle}:focus{outline:0 !important}.inline{display:-moz-inline-box;display:inline-block;*display:inline;*float:left}#form-error{padding:10px;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;color:#000;font-weight:normal;background-color:#ffebe8;border:1px solid #c00}#form-notice{padding:10px;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;color:#555555;font-weight:normal;background-color:#FFFBCC;border:1px solid #E6DB55}#wysija_form_editor{padding:20px;width:600px;border:1px solid #ccc;position:relative;background-color:#fff;-webkit-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);-moz-box-shadow:0 0 4px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1);box-shadow:0 0 5px rgba(0,0,0,0.2),inset 0 0 20px rgba(0,0,0,0.1)}#wysija_form_editor:before,#wysija_form_editor:after{position:absolute;width:40%;height:10px;content:' ';left:12px;bottom:12px;background:transparent;-webkit-transform:skew(-5deg) rotate(-5deg);-moz-transform:skew(-5deg) rotate(-5deg);-ms-transform:skew(-5deg) rotate(-5deg);-o-transform:skew(-5deg) rotate(-5deg);transform:skew(-5deg) rotate(-5deg);-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.3);-moz-box-shadow:0 6px 12px rgba(0,0,0,0.3);box-shadow:0 6px 12px rgba(0,0,0,0.3);z-index:-1}#wysija_form_editor:after{left:auto;right:12px;-webkit-transform:skew(5deg) rotate(5deg);-moz-transform:skew(5deg) rotate(5deg);-ms-transform:skew(5deg) rotate(5deg);-o-transform:skew(5deg) rotate(5deg);transform:skew(5deg) rotate(5deg)}.wysija_form_block .wysija_warning{font-weight:bold;color:#900}.block_placeholder{margin:0;border:0 none}.block_placeholder.active{border:1px dashed #b4b4b4;margin:10px;display:block}.block_placeholder.hover{margin:10px;border:1px dashed #b4b4b4;background-color:#f5f5f5}.wysija_form_block{background-color:#fff;height:20px}.wysija_form_block img{max-width:100%}.wysija_form_block p{margin:5px 0}.wysija_form_block p input.radio,.wysija_form_block p input.checkbox{margin:0 5px 0 10px}#wysija_form_container{width:640px;margin:0}#wysija_form_toolbar{position:absolute;width:295px}#wysija_form_toolbar .wysija_form_toolbar_tabs{border-bottom:1px solid #dfdfdf;line-height:0}#wysija_form_toolbar .add_custom_field{text-align:center;padding:15px 0 5px 0}#wysija_form_toolbar .wysija_form_toolbar_tabs li,#wysija_form_toolbar .wysija_form_toolbar_tabs a{margin:0;height:30px;line-height:30px;padding:0;display:-moz-inline-box;display:inline-block;*display:inline;*float:left;outline:0 none}#wysija_form_toolbar .wysija_form_toolbar_tabs a{outline:0 none;text-decoration:none;color:#a6a6a6}#wysija_form_toolbar .wysija_form_toolbar_tabs li{margin:0 0 1px 0}#wysija_form_toolbar .wysija_form_toolbar_tabs a{font-family:Georgia,"Times New Roman","Bitstream Charter",Times,serif;background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#F5F5F5', endColorstr='#F9F9F9');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#f5f5f5));border:1px solid #DFDFDF;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;-khtml-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;box-shadow:0 1px 0 #FFFFFF inset;padding:0 7px}#wysija_form_toolbar .wysija_form_toolbar_tabs a:hover{background-color:#eee}#wysija_form_toolbar .wysija_form_toolbar_tabs a.selected{color:#000;border-bottom:0 none;background:#fcfcfc;filter:none;padding-bottom:1px}#wysija_form_toolbar .wysija_form_toolbar_tabs,#wysija_form_toolbar .wj_content,#wysija_form_toolbar .wj_images,#wysija_form_toolbar .wj_styles,#wysija_form_toolbar .wj_themes{position:relative;z-index:9998;margin:0}.wysija_form_widget{width:275px;height:25px;line-height:25px;z-index:9999 !important}#wysija_form_toolbar a.wysija_form_item,.wysija_form_widget{height:25px;line-height:25px;background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #ececec);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#ececec');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));border:1px solid #DFDFDF;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;box-shadow:0 1px 0 #FFFFFF inset;display:block;font-size:12px;font-weight:bold;padding:0 0 0 7px;cursor:move;color:#222;text-shadow:0 1px 0 #FFFFFF}#wysija_form_toolbar a.wysija_form_item.disabled{cursor:pointer;color:#cccccc}.wysija_form_item_settings{position:absolute;right:15px;top:14px}.wj_content{background-color:#fcfcfc;border:1px solid #dfdfdf;border-top:0 none;padding:0 0 10px 0}.wj_content li{padding:10px 10px 0 10px;position:relative}.wj_content li.notice{font-style:italic;font-size:11px}.wysija_form_block{position:relative;margin:0;padding:10px 18px 10px 18px;display:inline-table;display:block;height:1%;margin:0;z-index:990}.wysija_form_block.dragging{z-index:99000}.wysija_form_block:after{content:".";display:block;height:0;clear:both;visibility:hidden}.wysija_form_block.hover{border:1px dashed #bbb;margin:0 0 0 0;padding:9px 17px 9px 17px}.wysija_form_block.static{background-color:#999}.wysija_form_block .wysija_controls{background-color:#dfdfdf;background-image:-moz-linear-gradient(center bottom, #bbb, #eee);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#bbbbbb');background:-webkit-gradient(linear, left bottom, left top, from(#bbb), to(#eee));-moz-border-radius:2px;-webkit-border-radius:2px;-khtml-border-radius:2px;border-radius:2px;border:1px solid #ccc;position:absolute;margin:0;padding:0;width:598px;height:20px;left:-1px;rigth:0;top:-22px}.wysija_form_block .wysija_controls li{float:left;width:20px;height:20px}.wysija_form_block .wysija_controls a{cursor:pointer;float:left;font-size:120%;font-weight:bold;height:20px;line-height:20px;text-align:center;width:20px;color:#000}.wysija_controls a span,.wysija_gallery .wysija_tools a span,.wysija_image .wysija_tools a span,.wysija_text .wysija_tools a span,.wj_content a span{display:block;height:20px;width:20px}.wysija_controls span input{margin:2px 0 0 0}.alignment-left span{background:url(../img/controls/icons.png) no-repeat 0 0}.alignment-left.active span,.alignment-left:hover span{background:url(../img/controls/icons.png) no-repeat 0 -20px}.alignment-center span{background:url(../img/controls/icons.png) no-repeat -20px 0}.alignment-center.active span,.alignment-center:hover span{background:url(../img/controls/icons.png) no-repeat -20px -20px}.alignment-right span{background:url(../img/controls/icons.png) no-repeat -40px 0}.alignment-right.active span,.alignment-right:hover span{background:url(../img/controls/icons.png) no-repeat -40px -20px}.add-link span{background:url(../img/controls/icons.png) no-repeat -60px 0}.add-link.active span,.add-link:hover span{background:url(../img/controls/icons.png) no-repeat -60px -20px}.remove-link span{background:url(../img/controls/icons.png) no-repeat -80px 0}.remove-link.active span,.remove-link:hover span{background:url(../img/controls/icons.png) no-repeat -80px -20px}.remove span{background:url(../img/controls/icons.png) no-repeat -100px 0}.remove.active span,.remove:hover span{background:url(../img/controls/icons.png) no-repeat -100px -20px}.handle span{background:url(../img/controls/icons.png) no-repeat -120px 0;cursor:move}.handle.active span,.handle:hover span{background:url(../img/controls/icons.png) no-repeat -120px -20px;cursor:move}.duplicate span{background:url(../img/controls/icons.png) no-repeat -140px 0}.duplicate.active span,.duplicate:hover span{background:url(../img/controls/icons.png) no-repeat -140px -20px}.settings span{background:url(../img/controls/icons.png) no-repeat -160px 0}.settings.active span,.settings:hover span{background:url(../img/controls/icons.png) no-repeat -160px -20px}.icon-plus span{background:url(../img/controls/icons.png) no-repeat -200px 0}.icon-plus.active span,.icon-plus:hover span{background:url(../img/controls/icons.png) no-repeat -200px -20px}.icon-minus span{background:url(../img/controls/icons.png) no-repeat -220px 0}.icon-minus.active span,.icon-minus:hover span{background:url(../img/controls/icons.png) no-repeat -220px -20px}.wysija_options{display:none}.wysija_settings{left:10px;position:absolute;top:0;z-index:1000}.wysija_settings a{background-color:#F5F5F5;background-image:-moz-linear-gradient(center top, #f9f9f9, #ececec);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#ececec');background:-webkit-gradient(linear, left top, left bottom, from(#f9f9f9), to(#ececec));border:1px solid #DFDFDF;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;box-shadow:0 1px 0 #FFFFFF inset;font-size:12px;font-weight:normal;cursor:pointer;color:#222;text-shadow:0 1px 0 #FFFFFF;text-decoration:none;display:block;padding:5px 5px 3px 27px}.wysija_settings a span{width:20px;height:20px;position:absolute;top:3px;left:5px}.wysija_form_block label{margin:0 5px 0 0;display:block}#wysija_widget_templates{display:none}#wysija_popup_overlay{background-color:#000;height:100%;left:0;position:fixed;top:0;width:100%;z-index:999998;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";filter:alpha(opacity=75);-moz-opacity:0.75;opacity:0.75}#wysija_popup_overlay.loading{background:url(../img/popup/loading.gif) no-repeat 50% 50% #000}#wysija_popup{position:absolute;top:0;left:0;width:600px;height:400px;background-color:#fff;z-index:999999;-moz-border-radius:3px;-webkit-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;-moz-box-shadow:#000 0 4px 30px;-webkit-box-shadow:#000 0 4px 30px;-khtml-box-shadow:#000 0 4px 30px;box-shadow:#000 0 4px 30px;border:1px solid #555}.rtl #wysija_popup{min-width:700px}#wysija_popup_content{padding:0;overflow:hidden;clear:both}#wysija_popup_title{background-color:#222;border:1px solid #333;height:27px;margin:0;padding:0}#wysija_popup_title h3{color:#cfcfcf;font-size:12px;font-weight:normal;margin:6px 0 0 10px;padding:0;float:left;font:12px "Lucida Grande", Verdana, Arial, sans-serif}#wysija_popup_title.empty{background-color:transparent;height:0;border:0 none}#wysija_popup_iframe{border:0 none;outline:0 none}.rtl #wysija_popup_iframe{min-width:700px}#wysija_popup_close{background:url(../img/popup/close.png) no-repeat;height:15px;width:15px;background-color:#333;display:block;float:right;margin:6px 10px 0 0}h2.title{height:40px;line-height:40px;margin:0 0 15px 0}h2.title span,h2.title form{float:left;margin:0 5px 0 0;vertical-align:middle}h2.title span#form-name{padding:0 3px;margin:0 10px 0 0;font-style:italic}h2.title span#form-name-default{display:none}h2.title #edit-form-name{float:left;margin:10px 5px 0 0}h2.title input{margin:0 10px 0 0}#after-submit textarea{width:300px;height:50px}#form-export textarea{width:100%;height:100px}#list-selection{width:600px}#list-selection label{display:block}#wysija_notices{z-index:20000;position:relative;left:0;top:0;padding:5px;border:1px solid #dfdfdf;border-top:0 none}#wysija_notices.notice{background-color:#FFFFE0;border-color:#E6DB55;z-index:9999}#wysija_notices.error{background-color:#FFEBE8;border-color:#CC0000}#wysija_notice_msg{font-size:14px;font-weight:bold}.expand-code{cursor:pointer}
|
data/bookmarks/medium/03/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/medium/04/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/medium/06/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/medium/07/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/medium/08/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/medium/09/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/medium/11/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/medium/12/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/medium/13/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/small/03/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
data/bookmarks/small/04/credit.txt
CHANGED
@@ -2,4 +2,4 @@ Credit for icons:
|
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
-
Note: these icons are from a
|
2 |
|
3 |
http://blog.artcore-illustrations.de/
|
4 |
|
5 |
+
Note: these icons are from a Wysija theme's Photoshop file.
|
docs/german-disclaimer.md
DELETED
@@ -1,4 +0,0 @@
|
|
1 |
-
### WICHTIG - HAFTUNGSAUSSCHLUSS
|
2 |
-
|
3 |
-
Dieses Plugin trägt wesentlich dazu bei, Ihren Newsletter rechtssicher betreiben zu können.
|
4 |
-
Es ist durch einen Rechtsanwalt geprüft worden, der ebenfalls die rechtlichen Hinweise & Muster erstellt hat. Sie entsprechen den rechtlichen Anforderungen eines typischen Newsletters. Jedoch kann die rechtliche Sicherheit eines Newsletters nur im Einzelfall geprüft und bestätigt werden, so dass insoweit keine Haftung übernommen werden kann. Daher sind auch die rechtliche Text- & Hinweismuster nur als Vorlagen zu verstehen, deren abschließende rechtliche Prüfung und ggf. Anpassung Ihnen obliegt. Falls Sie eine Prüfung Ihres Newsletters wünschen, können Sie sich an Rechtsanwalt Thomas Schwenke, LL.M. [http://rechtsanwalt-schwenke.de/kontakt](http://rechtsanwalt-schwenke.de/kontakt) wenden.
|
|
|
|
|
|
|
|
font/icon-email.eot
DELETED
Binary file
|
font/icon-email.svg
DELETED
@@ -1,11 +0,0 @@
|
|
1 |
-
<?xml version="1.0" standalone="no"?>
|
2 |
-
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
3 |
-
<svg xmlns="http://www.w3.org/2000/svg">
|
4 |
-
<metadata></metadata>
|
5 |
-
<defs>
|
6 |
-
<font id="icon-email" horiz-adv-x="1024">
|
7 |
-
<font-face units-per-em="1024" ascent="960" descent="-64" />
|
8 |
-
<missing-glyph horiz-adv-x="1024" />
|
9 |
-
<glyph unicode=" " d="" horiz-adv-x="512" />
|
10 |
-
<glyph unicode="" d="M972.8 217.6v460.8q0 31.744-22.528 54.272t-54.272 22.528h-717.312q-31.744 0-54.272-22.528t-22.528-54.272v-460.8q0-31.744 22.528-54.272t54.272-22.528h717.312q31.744 0 54.272 22.528t22.528 54.272zM905.728 684.032q7.68-7.68 8.96-16.64t-2.048-15.104-8.448-11.264l-207.872-190.464 199.68-207.872q13.312-15.36 3.072-26.112-4.608-5.632-14.336-6.144t-14.336 3.584l-223.744 190.976-109.568-99.84-109.056 99.84-223.744-190.976q-4.608-4.096-14.336-3.584t-14.336 6.144q-10.24 10.752 3.072 26.112l199.68 207.872-207.872 190.464q-5.12 5.12-8.448 11.264t-2.048 15.104 8.96 16.64q20.48 20.48 48.64-3.584l319.488-258.048 320 258.048q28.16 24.064 48.64 3.584z" />
|
11 |
-
</font></defs></svg>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
font/icon-email.ttf
DELETED
Binary file
|
font/icon-email.woff
DELETED
Binary file
|
helpers/articles.php
CHANGED
@@ -6,17 +6,64 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
6 |
|
7 |
}
|
8 |
|
9 |
-
function
|
10 |
-
if(
|
11 |
-
|
|
|
|
|
12 |
}
|
13 |
-
// remove captions
|
14 |
-
$content = preg_replace("/\[caption.*?\](.*<\/a>)(.*?)\[\/caption\]/", '$1', $content);
|
15 |
|
16 |
-
|
17 |
-
|
|
|
|
|
|
|
18 |
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
}
|
21 |
|
22 |
function convertPostToBlock($post, $params = array()) {
|
@@ -25,15 +72,9 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
25 |
$defaults = array(
|
26 |
'title_tag' => 'h1',
|
27 |
'title_alignment' => 'left',
|
28 |
-
'title_position' => 'inside',
|
29 |
'image_alignment' => 'left',
|
30 |
-
'image_width' => 325,
|
31 |
'readmore' => __('Read online.', WYSIJA),
|
32 |
-
'post_content' => 'full'
|
33 |
-
'author_show' => 'no',
|
34 |
-
'author_label' => '',
|
35 |
-
'category_show' => 'no',
|
36 |
-
'category_label' => ''
|
37 |
);
|
38 |
|
39 |
// merge params with default params
|
@@ -41,15 +82,13 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
41 |
|
42 |
if($params['post_content'] === 'full') {
|
43 |
$content = $post['post_content'];
|
44 |
-
} else if($params['post_content'] === 'title') {
|
45 |
-
$content = $this->getPostTitle($post, $params);
|
46 |
} else {
|
47 |
// get excerpt
|
48 |
if(!empty($post['post_excerpt'])) {
|
49 |
$content = $post['post_excerpt'];
|
50 |
} else {
|
51 |
-
//
|
52 |
-
$post['post_content'] =
|
53 |
|
54 |
// if excerpt is empty then try to find the "more" tag
|
55 |
$excerpts = explode('<!--more-->', $post['post_content']);
|
@@ -57,8 +96,8 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
57 |
$content = $excerpts[0];
|
58 |
}else{
|
59 |
// finally get a made up excerpt if there is no other choice
|
60 |
-
$
|
61 |
-
$content = $
|
62 |
}
|
63 |
}
|
64 |
// strip title tags from excerpt
|
@@ -71,8 +110,8 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
71 |
// remove images
|
72 |
$content = preg_replace('/<img[^>]+./','', $content);
|
73 |
|
74 |
-
//
|
75 |
-
$content =
|
76 |
|
77 |
// remove wysija nl shortcode
|
78 |
$content= preg_replace('/\<div class="wysija-register">(.*?)\<\/div>/','',$content);
|
@@ -86,93 +125,27 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
86 |
// convert ol to ul
|
87 |
$content = preg_replace('/<([\/])?ol(.*?)>/', '<$1ul$2>', $content);
|
88 |
|
89 |
-
// convert
|
90 |
-
$content = str_replace(array('$', '
|
91 |
|
92 |
// strip useless tags
|
93 |
-
|
94 |
-
$tags_not_being_stripped = array('<p>','<em>','<span>','<b>','<strong>','<i>','<h1>','<h2>','<h3>','<a>','<ul>','<ol>','<li>','<br>');
|
95 |
-
|
96 |
-
// filter to modify that list
|
97 |
-
$tags_not_being_stripped = apply_filters('mpoet_strip_tags_ignored',$tags_not_being_stripped);
|
98 |
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
$post_meta_above .= '<p>';
|
106 |
-
}
|
107 |
-
|
108 |
-
// author above
|
109 |
-
if($params['author_show'] === 'above') {
|
110 |
-
$post_meta_above .= $this->getPostAuthor($post, $params);
|
111 |
-
}
|
112 |
-
// categories above
|
113 |
-
if($params['category_show'] === 'above') {
|
114 |
-
// if there is an author already, we need to add an extra break
|
115 |
-
if($params['author_show'] === 'above') {
|
116 |
-
$post_meta_above .= '<br />';
|
117 |
-
}
|
118 |
-
// display post categories
|
119 |
-
$post_meta_above .= $this->getPostCategories($post, $params);
|
120 |
-
}
|
121 |
-
|
122 |
-
// close the paragraph around author and categories
|
123 |
-
if($params['author_show'] === 'above' || $params['category_show'] === 'above') {
|
124 |
-
$post_meta_above .= '</p>';
|
125 |
-
}
|
126 |
-
|
127 |
-
if($params['post_content'] !== 'title') {
|
128 |
-
if($params['title_position'] === 'inside') {
|
129 |
-
// add title
|
130 |
-
$content = $this->getPostTitle($post, $params).$post_meta_above.$content;
|
131 |
-
} else {
|
132 |
-
$content = $post_meta_above.$content;
|
133 |
-
}
|
134 |
-
} else {
|
135 |
-
$content = $post_meta_above.$content;
|
136 |
-
}
|
137 |
-
|
138 |
-
if($params['post_content'] !== 'title') {
|
139 |
-
// add read online link
|
140 |
-
$content .= '<p><a href="'.get_permalink($post['ID']).'" target="_blank">'.stripslashes($params['readmore']).'</a></p>';
|
141 |
-
}
|
142 |
-
|
143 |
-
// post meta (author, categories) below
|
144 |
-
$post_meta_below = '';
|
145 |
-
|
146 |
-
// if the author or categories are displayed, open a new paragraph
|
147 |
-
if($params['author_show'] === 'below' || $params['category_show'] === 'below') {
|
148 |
-
$post_meta_below .= '<p>';
|
149 |
-
}
|
150 |
-
|
151 |
-
// author below
|
152 |
-
if($params['author_show'] === 'below') {
|
153 |
-
$post_meta_below .= $this->getPostAuthor($post, $params);
|
154 |
-
}
|
155 |
-
|
156 |
-
// categories below
|
157 |
-
if($params['category_show'] === 'below') {
|
158 |
-
// if there is an author already, we need to add an extra break
|
159 |
-
if($params['author_show'] === 'below') {
|
160 |
-
$post_meta_below .= '<br />';
|
161 |
-
}
|
162 |
-
$post_meta_below .= $this->getPostCategories($post, $params);
|
163 |
-
}
|
164 |
-
|
165 |
-
// close the paragraph around author and categories
|
166 |
-
if($params['author_show'] === 'below' || $params['category_show'] === 'below') {
|
167 |
-
$post_meta_below .= '</p>';
|
168 |
}
|
169 |
|
170 |
-
|
|
|
171 |
|
172 |
// set image/text alignment based on present data
|
173 |
$post_image = null;
|
174 |
|
175 |
-
if(
|
176 |
$post_image = $post['post_image'];
|
177 |
|
178 |
// set image alignment to match block's
|
@@ -188,11 +161,11 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
188 |
case 'left':
|
189 |
case 'right':
|
190 |
// constrain width to 325px max
|
191 |
-
$post_image['width'] = min($
|
192 |
break;
|
193 |
case 'center':
|
194 |
// constrain width to 564px max
|
195 |
-
$post_image['width'] = min($
|
196 |
break;
|
197 |
}
|
198 |
|
@@ -206,87 +179,19 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
206 |
}
|
207 |
}
|
208 |
|
209 |
-
$position = 0;
|
210 |
-
if(isset($params['position']) && (int)$params['position'] > 0) {
|
211 |
-
$position = (int)$params['position'];
|
212 |
-
}
|
213 |
-
|
214 |
$block = array(
|
215 |
-
|
216 |
-
|
217 |
-
|
218 |
-
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
);
|
223 |
|
224 |
return $block;
|
225 |
}
|
226 |
|
227 |
-
public function getPostAuthor($post = array(), $params = array()) {
|
228 |
-
$content = '';
|
229 |
-
|
230 |
-
if(isset($post['post_author'])) {
|
231 |
-
$author_name = get_the_author_meta('display_name', (int)$post['post_author']);
|
232 |
-
|
233 |
-
// check if the user specified a label to be displayed before the author's name
|
234 |
-
if(strlen(trim($params['author_label'])) > 0) {
|
235 |
-
$author_name = stripslashes(trim($params['author_label'])).' '.$author_name;
|
236 |
-
}
|
237 |
-
$content .= $author_name;
|
238 |
-
}
|
239 |
-
|
240 |
-
return $content;
|
241 |
-
}
|
242 |
-
|
243 |
-
public function getPostCategories($post = array(), $params = array()) {
|
244 |
-
$content = '';
|
245 |
-
|
246 |
-
// get categories
|
247 |
-
//$categories = get_the_category($post['ID']);
|
248 |
-
$helper_wp_tools = WYSIJA::get('wp_tools', 'helper');
|
249 |
-
$categories = $helper_wp_tools->get_post_categories($post);
|
250 |
-
|
251 |
-
if(empty($categories) === false) {
|
252 |
-
// check if the user specified a label to be displayed before the author's name
|
253 |
-
if(strlen(trim($params['category_label'])) > 0) {
|
254 |
-
$content = stripslashes($params['category_label']).' ';
|
255 |
-
}
|
256 |
-
|
257 |
-
$content .= join(', ', $categories);
|
258 |
-
}
|
259 |
-
|
260 |
-
return $content;
|
261 |
-
}
|
262 |
-
|
263 |
-
public function getPostTitle($post = array(), $params = array()) {
|
264 |
-
$content = '';
|
265 |
-
|
266 |
-
if(strlen(trim($post['post_title'])) > 0) {
|
267 |
-
// cleanup post title and convert currency signs
|
268 |
-
$post_title = trim(str_replace(array('$', '€', '£', '¥'), array('$', '€', '£', '¥'), strip_tags($post['post_title'])));
|
269 |
-
|
270 |
-
// open title tag
|
271 |
-
if($params['title_tag'] === 'list') {
|
272 |
-
$params['title_tag'] = 'li';
|
273 |
-
}
|
274 |
-
|
275 |
-
$content .= '<'.$params['title_tag'].' class="align-'.$params['title_alignment'].'">';
|
276 |
-
// set title link
|
277 |
-
$content .= '<a href="'.get_permalink($post['ID']).'" target="_blank">';
|
278 |
-
// set title
|
279 |
-
$content .= $post_title;
|
280 |
-
// close title link
|
281 |
-
$content .= '</a>';
|
282 |
-
// close title tag
|
283 |
-
$content .= '</'.$params['title_tag'].'>';
|
284 |
-
|
285 |
-
}
|
286 |
-
|
287 |
-
return $content;
|
288 |
-
}
|
289 |
-
|
290 |
function getImage($post) {
|
291 |
$image_info = null;
|
292 |
$post_image = null;
|
@@ -351,8 +256,6 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
351 |
return array_merge($post_image, array('url' => get_permalink($post['ID'])));
|
352 |
}
|
353 |
|
354 |
-
|
355 |
-
|
356 |
function convertEmbeddedContent($content = '') {
|
357 |
// remove embedded video and replace with links
|
358 |
$content = preg_replace('#<iframe.*?src=\"(.+?)\".*><\/iframe>#', '<a href="$1">'.__('Click here to view media.', WYSIJA).'</a>', $content);
|
@@ -363,70 +266,4 @@ class WYSIJA_help_articles extends WYSIJA_object {
|
|
363 |
return $content;
|
364 |
}
|
365 |
|
366 |
-
|
367 |
-
if(array_key_exists('value', $params)) {
|
368 |
-
$value = $params['value'];
|
369 |
-
} else {
|
370 |
-
return;
|
371 |
-
}
|
372 |
-
|
373 |
-
// make sure value is null if it's an empty string
|
374 |
-
if($value !== null and strlen(trim($value)) === 0) $value = null;
|
375 |
-
|
376 |
-
// get all post types
|
377 |
-
$helper_wp_tools = WYSIJA::get('wp_tools', 'helper');
|
378 |
-
$post_types = $helper_wp_tools->get_post_types();
|
379 |
-
|
380 |
-
// build post type selection
|
381 |
-
$output = '<select name="post_type" id="post_type">';
|
382 |
-
|
383 |
-
if(isset($params['label'])) {
|
384 |
-
$output .= '<option value=""'.(($value === null) ? ' selected="selected"' : '').'>'.$params['label'].'</option>';
|
385 |
-
}
|
386 |
-
$output .= '<option value="post"'.(($value === 'post') ? ' selected="selected"' : '').'>'.__('Posts',WYSIJA).'</option>';
|
387 |
-
$output .= '<option value="page"'.(($value === 'page') ? ' selected="selected"' : '').'>'.__('Pages',WYSIJA).'</option>';
|
388 |
-
|
389 |
-
foreach($post_types as $key=> $object_post_type) {
|
390 |
-
$selected = ($value === $key) ? ' selected="selected"' : '';
|
391 |
-
$output .= '<option value="'.$key.'"'.$selected.'>'.$object_post_type->labels->name.'</option>';
|
392 |
-
}
|
393 |
-
$output .= '</select>';
|
394 |
-
return $output;
|
395 |
-
}
|
396 |
-
|
397 |
-
function getFilterByCategory($value = null, $post_type = 'post') {
|
398 |
-
// make sure value is null if it's an empty string
|
399 |
-
if($value !== null and strlen(trim($value)) === 0) $value = null;
|
400 |
-
|
401 |
-
$helper_wp_tools = WYSIJA::get('wp_tools','helper');
|
402 |
-
$categories = $helper_wp_tools->get_categories();
|
403 |
-
|
404 |
-
$output = '';
|
405 |
-
foreach($categories as $cpt => $categories_of_cpt){
|
406 |
-
$output .= '<select id="post_category_'.$cpt.'" name="category_ids" class="post_category">';
|
407 |
-
$output .= '<option value="">'.__('Filter by category', WYSIJA).'</option>';
|
408 |
-
foreach($categories_of_cpt as $category) {
|
409 |
-
$output .= '<option value="'.$category['id'].'">'.$category['name'].'</option>';
|
410 |
-
}
|
411 |
-
$output .= '</select>';
|
412 |
-
}
|
413 |
-
return $output;
|
414 |
-
}
|
415 |
-
|
416 |
-
|
417 |
-
function getFilterByStatus($current_status = 'publish') {
|
418 |
-
$output = '';
|
419 |
-
|
420 |
-
$helper_wp_tools = WYSIJA::get('wp_tools', 'helper');
|
421 |
-
$statuses = $helper_wp_tools->get_post_statuses();
|
422 |
-
|
423 |
-
$output .= '<select id="post_status" name="post_status" class="post_status">';
|
424 |
-
$output .= '<option value="">'.__('Filter by status', WYSIJA).'</option>';
|
425 |
-
foreach($statuses as $key => $label) {
|
426 |
-
$is_selected = ($current_status === $key) ? 'selected="selected"' : '';
|
427 |
-
$output .= '<option value="'.$key.'" '.$is_selected.'>'.$label.'</option>';
|
428 |
-
}
|
429 |
-
$output .= '</select>';
|
430 |
-
return $output;
|
431 |
-
}
|
432 |
-
}
|
6 |
|
7 |
}
|
8 |
|
9 |
+
function getPosts($params = array()) {
|
10 |
+
if(!empty($params['exclude'])) {
|
11 |
+
$exclude = $params['exclude'];
|
12 |
+
} else {
|
13 |
+
$exclude = NULL;
|
14 |
}
|
|
|
|
|
15 |
|
16 |
+
if(!empty($params['include'])) {
|
17 |
+
$include = $params['include'];
|
18 |
+
} else {
|
19 |
+
$include = NULL;
|
20 |
+
}
|
21 |
|
22 |
+
if(!empty($params['includeonly'])) {
|
23 |
+
$includeonly = $params['includeonly'];
|
24 |
+
} else {
|
25 |
+
$includeonly = NULL;
|
26 |
+
}
|
27 |
+
|
28 |
+
// transform category_ids to array
|
29 |
+
if(strlen($params['category_ids']) === 0) {
|
30 |
+
$categories = NULL;
|
31 |
+
} else {
|
32 |
+
$categories = explode(',', $params['category_ids']);
|
33 |
+
}
|
34 |
+
if(!isset($params['cpt'])) $params['cpt']='post';
|
35 |
+
$args = array(
|
36 |
+
'numberposts' => (int)$params['post_limit'],
|
37 |
+
'offset' => 0,
|
38 |
+
'category' => $categories,
|
39 |
+
'orderby' => 'post_date',
|
40 |
+
'order' => 'DESC',
|
41 |
+
'include' => $include,
|
42 |
+
'includeonly' => $includeonly,
|
43 |
+
'exclude' => $exclude,
|
44 |
+
'meta_key' => NULL,
|
45 |
+
'meta_value' => NULL,
|
46 |
+
'post_type' => $params['cpt'],
|
47 |
+
'post_mime_type' => NULL,
|
48 |
+
'post_parent' => NULL,
|
49 |
+
'post_status' => 'publish'
|
50 |
+
);
|
51 |
+
|
52 |
+
if(isset($params['post_date'])) {
|
53 |
+
$args['post_date'] = $params['post_date'];
|
54 |
+
}
|
55 |
+
|
56 |
+
$modelPosts=WYSIJA::get('wp_posts','model');
|
57 |
+
|
58 |
+
$posts=$modelPosts->get_posts($args);
|
59 |
+
|
60 |
+
if(empty($posts)) return array();
|
61 |
+
$mConfig=WYSIJA::get('config','model');
|
62 |
+
foreach($posts as $key => $post) {
|
63 |
+
if($mConfig->getValue('interp_shortcode')) $post['post_content']=apply_filters('the_content',$post['post_content']);
|
64 |
+
$posts[$key] = (array)$post;
|
65 |
+
}
|
66 |
+
return $posts;
|
67 |
}
|
68 |
|
69 |
function convertPostToBlock($post, $params = array()) {
|
72 |
$defaults = array(
|
73 |
'title_tag' => 'h1',
|
74 |
'title_alignment' => 'left',
|
|
|
75 |
'image_alignment' => 'left',
|
|
|
76 |
'readmore' => __('Read online.', WYSIJA),
|
77 |
+
'post_content' => 'full'
|
|
|
|
|
|
|
|
|
78 |
);
|
79 |
|
80 |
// merge params with default params
|
82 |
|
83 |
if($params['post_content'] === 'full') {
|
84 |
$content = $post['post_content'];
|
|
|
|
|
85 |
} else {
|
86 |
// get excerpt
|
87 |
if(!empty($post['post_excerpt'])) {
|
88 |
$content = $post['post_excerpt'];
|
89 |
} else {
|
90 |
+
// remove shortcodes before getting the excerpt
|
91 |
+
$post['post_content'] = preg_replace('/\[[^\[\]]*\]/', '', $post['post_content']);
|
92 |
|
93 |
// if excerpt is empty then try to find the "more" tag
|
94 |
$excerpts = explode('<!--more-->', $post['post_content']);
|
96 |
$content = $excerpts[0];
|
97 |
}else{
|
98 |
// finally get a made up excerpt if there is no other choice
|
99 |
+
$helperToolbox = WYSIJA::get('toolbox', 'helper');
|
100 |
+
$content = $helperToolbox->excerpt($post['post_content'], 60);
|
101 |
}
|
102 |
}
|
103 |
// strip title tags from excerpt
|
110 |
// remove images
|
111 |
$content = preg_replace('/<img[^>]+./','', $content);
|
112 |
|
113 |
+
// remove shortcodes
|
114 |
+
$content = preg_replace('/\[[^\[\]]*\]/', '', $content);
|
115 |
|
116 |
// remove wysija nl shortcode
|
117 |
$content= preg_replace('/\<div class="wysija-register">(.*?)\<\/div>/','',$content);
|
125 |
// convert ol to ul
|
126 |
$content = preg_replace('/<([\/])?ol(.*?)>/', '<$1ul$2>', $content);
|
127 |
|
128 |
+
// convert dollar signs
|
129 |
+
$content = str_replace(array('$', '€', '£', 'Â¥'), array('$', '€', '£', '¥'), $content);
|
130 |
|
131 |
// strip useless tags
|
132 |
+
$content = strip_tags($content, '<p><em><span><b><strong><i><h1><h2><h3><a><ul><ol><li><br>');
|
|
|
|
|
|
|
|
|
133 |
|
134 |
+
// set post title if present
|
135 |
+
if(strlen(trim($post['post_title'])) > 0) {
|
136 |
+
// cleanup post title
|
137 |
+
$post['post_title'] = trim(str_replace(array('$', '€', '£', 'Â¥'), array('$', '€', '£', '¥'), strip_tags($post['post_title'])));
|
138 |
+
// build content starting with title
|
139 |
+
$content = '<'.$params['title_tag'].' class="align-'.$params['title_alignment'].'">'. $post['post_title'].'</'.$params['title_tag'].'>'.$content;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
140 |
}
|
141 |
|
142 |
+
// add read online link
|
143 |
+
$content .= '<p><a href="'.get_permalink($post['ID']).'" target="_blank">'.esc_attr($params['readmore']).'</a></p>';
|
144 |
|
145 |
// set image/text alignment based on present data
|
146 |
$post_image = null;
|
147 |
|
148 |
+
if(isset($post['post_image'])) {
|
149 |
$post_image = $post['post_image'];
|
150 |
|
151 |
// set image alignment to match block's
|
161 |
case 'left':
|
162 |
case 'right':
|
163 |
// constrain width to 325px max
|
164 |
+
$post_image['width'] = min($post_image['width'], 325);
|
165 |
break;
|
166 |
case 'center':
|
167 |
// constrain width to 564px max
|
168 |
+
$post_image['width'] = min($post_image['width'], 564);
|
169 |
break;
|
170 |
}
|
171 |
|
179 |
}
|
180 |
}
|
181 |
|
|
|
|
|
|
|
|
|
|
|
182 |
$block = array(
|
183 |
+
'position' => 0,
|
184 |
+
'type' => 'content',
|
185 |
+
'text' => array(
|
186 |
+
'value' => base64_encode($content)
|
187 |
+
),
|
188 |
+
'image' => $post_image,
|
189 |
+
'alignment' => $params['image_alignment']
|
190 |
);
|
191 |
|
192 |
return $block;
|
193 |
}
|
194 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
195 |
function getImage($post) {
|
196 |
$image_info = null;
|
197 |
$post_image = null;
|
256 |
return array_merge($post_image, array('url' => get_permalink($post['ID'])));
|
257 |
}
|
258 |
|
|
|
|
|
259 |
function convertEmbeddedContent($content = '') {
|
260 |
// remove embedded video and replace with links
|
261 |
$content = preg_replace('#<iframe.*?src=\"(.+?)\".*><\/iframe>#', '<a href="$1">'.__('Click here to view media.', WYSIJA).'</a>', $content);
|
266 |
return $content;
|
267 |
}
|
268 |
|
269 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
helpers/autonews.php
CHANGED
@@ -292,7 +292,7 @@ class WYSIJA_help_autonews extends WYSIJA_object {
|
|
292 |
$model_email->reset();
|
293 |
|
294 |
// select the scheduled emails
|
295 |
-
$all_emails
|
296 |
|
297 |
if($all_emails){
|
298 |
|
@@ -301,8 +301,8 @@ class WYSIJA_help_autonews extends WYSIJA_object {
|
|
301 |
// check if the email is scheduled
|
302 |
if(isset($email['params']['schedule']['isscheduled'])){
|
303 |
|
304 |
-
$schedule_date
|
305 |
-
$unix_scheduled_time
|
306 |
|
307 |
// if the scheduled time is passed let's send the email
|
308 |
// we don't compare to the time recorded but to the offset time which is the time set by the user in his time
|
@@ -313,6 +313,7 @@ class WYSIJA_help_autonews extends WYSIJA_object {
|
|
313 |
}
|
314 |
}
|
315 |
}
|
|
|
316 |
}
|
317 |
|
318 |
function refresh_automatic_content($email_ids = array()) {
|
@@ -332,8 +333,8 @@ class WYSIJA_help_autonews extends WYSIJA_object {
|
|
332 |
|
333 |
$wj_data = unserialize(base64_decode($email['wj_data']));
|
334 |
$reload_auto_content = false;
|
335 |
-
foreach($wj_data['body'] as $block)
|
336 |
-
if(isset($block['type']) && $block['type']
|
337 |
$reload_auto_content = true;
|
338 |
}
|
339 |
}
|
@@ -359,32 +360,4 @@ class WYSIJA_help_autonews extends WYSIJA_object {
|
|
359 |
}
|
360 |
}
|
361 |
}
|
362 |
-
|
363 |
-
// removes any auto-post block
|
364 |
-
function remove_autopost_blocks($data = array()) {
|
365 |
-
if(empty($data)) {
|
366 |
-
return false;
|
367 |
-
}
|
368 |
-
|
369 |
-
// decode data
|
370 |
-
$wj_data = unserialize(base64_decode($data));
|
371 |
-
|
372 |
-
// init updated_wj_data variable with initial wj_data
|
373 |
-
$updated_wj_data = $wj_data;
|
374 |
-
|
375 |
-
foreach($wj_data['body'] as $key => $block) {
|
376 |
-
// if we detect an auto-post block, we need to remove it
|
377 |
-
if(isset($block['type']) && $block['type'] === 'auto-post') {
|
378 |
-
// remove block from updated data
|
379 |
-
unset($updated_wj_data['body'][$key]);
|
380 |
-
}
|
381 |
-
}
|
382 |
-
// if the wj_data has not changed, return false
|
383 |
-
if($updated_wj_data === $wj_data) {
|
384 |
-
return false;
|
385 |
-
} else {
|
386 |
-
// otherwise return encoded version of updated_wj_data
|
387 |
-
return base64_encode(serialize($updated_wj_data));
|
388 |
-
}
|
389 |
-
}
|
390 |
}
|
292 |
$model_email->reset();
|
293 |
|
294 |
// select the scheduled emails
|
295 |
+
$all_emails=$model_email->get(false,array('type'=>'1','status'=>'4'));
|
296 |
|
297 |
if($all_emails){
|
298 |
|
301 |
// check if the email is scheduled
|
302 |
if(isset($email['params']['schedule']['isscheduled'])){
|
303 |
|
304 |
+
$schedule_date=$email['params']['schedule']['day'].' '.$email['params']['schedule']['time'];
|
305 |
+
$unix_scheduled_time=strtotime($schedule_date);
|
306 |
|
307 |
// if the scheduled time is passed let's send the email
|
308 |
// we don't compare to the time recorded but to the offset time which is the time set by the user in his time
|
313 |
}
|
314 |
}
|
315 |
}
|
316 |
+
|
317 |
}
|
318 |
|
319 |
function refresh_automatic_content($email_ids = array()) {
|
333 |
|
334 |
$wj_data = unserialize(base64_decode($email['wj_data']));
|
335 |
$reload_auto_content = false;
|
336 |
+
foreach($wj_data['body'] as $block){
|
337 |
+
if(isset($block['type']) && $block['type']=='auto-post'){
|
338 |
$reload_auto_content = true;
|
339 |
}
|
340 |
}
|
360 |
}
|
361 |
}
|
362 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
363 |
}
|
helpers/back.php
CHANGED
@@ -19,8 +19,7 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
19 |
ini_set('display_errors', '0');
|
20 |
}
|
21 |
|
22 |
-
|
23 |
-
add_filter('update_footer', array(&$this, 'update_footer'), 15);
|
24 |
|
25 |
//the controller is backend is it from our pages or from wordpress?
|
26 |
//are we pluging-in to wordpress interfaces or doing entirely our own page?
|
@@ -48,6 +47,10 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
48 |
if(WYSIJA_ITF) {
|
49 |
add_action('admin_init', array( $this , 'verify_capability'),1);
|
50 |
add_action('admin_init', array($this->controller, 'main'));
|
|
|
|
|
|
|
|
|
51 |
add_action('after_setup_theme',array($this,'resolveConflicts'));
|
52 |
}
|
53 |
//this is a fix for qtranslate as we were loading translatable string quite early
|
@@ -68,50 +71,72 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
68 |
$wptools = WYSIJA::get('wp_tools', 'helper');
|
69 |
$wptools->set_default_rolecaps();
|
70 |
|
71 |
-
|
72 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
73 |
}
|
74 |
|
75 |
//if the comment form option is activated then we add an approval action
|
76 |
if($config->getValue('commentform')){
|
77 |
-
add_action('wp_set_comment_status',
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
}
|
79 |
-
}
|
80 |
|
81 |
|
|
|
|
|
|
|
82 |
/**
|
83 |
-
*
|
84 |
-
*
|
85 |
-
*
|
86 |
-
*
|
87 |
-
* @return null
|
88 |
*/
|
89 |
-
|
90 |
-
$
|
91 |
-
|
92 |
-
if($mdl_config->getValue('premium_key') && !WYSIJA::is_plugin_active(WJ_Upgrade::$plugins[1])){
|
93 |
-
if( file_exists( WPMU_PLUGIN_DIR . DIRECTORY_SEPARATOR . WJ_Upgrade::$plugins[1] ) || file_exists( WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . WJ_Upgrade::$plugins[1] ) ){
|
94 |
-
//send a message to the user so that he activates the premium plugin or try to fetch it directly.
|
95 |
-
$this->notice('<p>'.__('You need to activate the MailPoet Premium plugin.', WYSIJA).' <a data-warn="' . esc_attr__( "Confirm activating the MailPoet Premium Plugin?", WYSIJA ) . '" class="button-primary" title="' . esc_attr__( "Activate MailPoet Premium Version", WYSIJA ) . '" href="' . wp_nonce_url('plugins.php?action=activate&plugin=' . urlencode(WJ_Upgrade::$plugins[1]) . '&plugin_status=all', 'activate-plugin_' . WJ_Upgrade::$plugins[1]) . '">'.__('Activate now',WYSIJA).'</a></p>');
|
96 |
-
} else {
|
97 |
-
|
98 |
-
$args = array(
|
99 |
-
'page' => 'wysija_config',
|
100 |
-
'action' => 'packager-switch',
|
101 |
-
'_mp_action' => 'install',
|
102 |
-
'_wpnonce' => wp_create_nonce('packager-switch'),
|
103 |
-
);
|
104 |
-
if (WYSIJA::is_beta())
|
105 |
-
$args["stable"] = 1;
|
106 |
|
107 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
108 |
|
109 |
-
|
110 |
-
|
|
|
|
|
111 |
}
|
112 |
-
}
|
113 |
|
114 |
-
|
|
|
|
|
|
|
115 |
}
|
116 |
|
117 |
function comment_approved($cid,$comment_status){
|
@@ -172,68 +197,31 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
172 |
}
|
173 |
}
|
174 |
|
175 |
-
/**
|
176 |
-
* this function will check the role of the user executing the action, if it's called from another
|
177 |
-
* WordPress admin page than page.php for instance admin-post.php
|
178 |
-
* @return boolean
|
179 |
-
*/
|
180 |
-
function verify_capability(){
|
181 |
-
if( isset( $_GET['page'] ) && substr( $_GET['page'] ,0 ,7 ) == 'wysija_' ){
|
182 |
-
|
183 |
-
switch( $_GET['page'] ){
|
184 |
-
case 'wysija_campaigns':
|
185 |
-
$role_needed = 'wysija_newsletters';
|
186 |
-
break;
|
187 |
-
case 'wysija_subscribers':
|
188 |
-
$role_needed = 'wysija_subscribers';
|
189 |
-
break;
|
190 |
-
case 'wysija_config':
|
191 |
-
$role_needed = 'wysija_config';
|
192 |
-
break;
|
193 |
-
case 'wysija_statistics':
|
194 |
-
$role_needed = 'wysija_stats_dashboard';
|
195 |
-
break;
|
196 |
-
default:
|
197 |
-
$role_needed = 'switch_themes';
|
198 |
-
}
|
199 |
-
|
200 |
-
if( current_user_can( $role_needed ) ){
|
201 |
-
return true;
|
202 |
-
} else{
|
203 |
-
die( 'You are not allowed here.' );
|
204 |
-
}
|
205 |
-
|
206 |
-
}else{
|
207 |
-
// this is not a wysija interface/action we can let it pass
|
208 |
-
return true;
|
209 |
-
}
|
210 |
-
}
|
211 |
-
|
212 |
/**
|
213 |
* translatable strings need to be not loaded to early, this is why we put them ina separate function
|
214 |
* @global type $wysija_installing
|
215 |
*/
|
216 |
function define_translated_strings(){
|
217 |
-
$config
|
218 |
-
$linkcontent
|
219 |
-
$finds
|
220 |
-
$replace
|
221 |
-
$truelinkhelp
|
222 |
|
223 |
-
$extra
|
224 |
|
225 |
-
$truelinkhelp
|
226 |
|
227 |
-
$truelinkhelp
|
228 |
|
229 |
$this->menus=array(
|
230 |
-
'campaigns'=>array('title'=>'
|
231 |
-
'subscribers'=>array('title'=>__('Subscribers',WYSIJA)),
|
232 |
'config'=>array('title'=>__('Settings',WYSIJA)),
|
233 |
-
|
234 |
);
|
235 |
-
$this->
|
236 |
-
|
237 |
if($config->getValue('queue_sends_slow')){
|
238 |
$msg=$config->getValue('ignore_msgs');
|
239 |
if(!isset($msg['queuesendsslow'])){
|
@@ -243,6 +231,19 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
243 |
}
|
244 |
}
|
245 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
246 |
if(WYSIJA_ITF){
|
247 |
global $wysija_installing;
|
248 |
if( !$config->getValue('sending_emails_ok')){
|
@@ -259,9 +260,15 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
259 |
|
260 |
|
261 |
function add_menus(){
|
262 |
-
|
|
|
263 |
$count=0;
|
264 |
|
|
|
|
|
|
|
|
|
|
|
265 |
//anti conflicting menus code to make sure that another plugin is not at the same level as us
|
266 |
$position=50;
|
267 |
$positionplus1=$position+1;
|
@@ -278,34 +285,20 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
278 |
global $wysija_installing;
|
279 |
foreach($this->menus as $action=> $menutemp){
|
280 |
$actionFull='wysija_'.$action;
|
281 |
-
if
|
282 |
-
|
283 |
-
|
284 |
-
|
285 |
-
elseif ($action == 'subscribers')
|
286 |
-
$roleformenu = 'wysija_subscribers';
|
287 |
-
elseif ($action == 'statistics')
|
288 |
-
$roleformenu = 'wysija_stats_dashboard';
|
289 |
-
else
|
290 |
-
$roleformenu = 'wysija_config';
|
291 |
|
292 |
if($wysija_installing===true){
|
293 |
if($count==0){
|
294 |
$parentmenu=$actionFull;
|
295 |
-
$hookname=add_menu_page($menutemp['title'], $menutemp['subtitle'], $roleformenu, $actionFull , array($this->controller, 'errorInstall'), '
|
296 |
}
|
297 |
}else{
|
298 |
if($count==0){
|
299 |
-
$parentmenu
|
300 |
-
$hookname
|
301 |
-
$menutemp['title'],
|
302 |
-
$menutemp['subtitle'],
|
303 |
-
$roleformenu,
|
304 |
-
$actionFull ,
|
305 |
-
array($this->controller, 'render'),
|
306 |
-
'div',
|
307 |
-
$position
|
308 |
-
);
|
309 |
}else{
|
310 |
$hookname=add_submenu_page($parentmenu,$menutemp['title'], $menutemp['subtitle'], $roleformenu, $actionFull , array($this->controller, 'render'));
|
311 |
}
|
@@ -324,28 +317,12 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
324 |
$count++;
|
325 |
}
|
326 |
|
327 |
-
|
328 |
-
|
329 |
-
|
330 |
-
case 'wysija_subscribers':
|
331 |
-
$textmenu=__('Subscribers',WYSIJA);
|
332 |
-
break;
|
333 |
-
|
334 |
-
case 'wysija_statistics':
|
335 |
-
$textmenu=__('Statistics',WYSIJA);
|
336 |
-
break;
|
337 |
-
|
338 |
-
case 'wysija_config':
|
339 |
-
$textmenu=__('Settings',WYSIJA);
|
340 |
-
break;
|
341 |
-
|
342 |
-
case 'wysija_campaigns':
|
343 |
-
default:
|
344 |
-
$textmenu=__('Newsletters',WYSIJA);
|
345 |
-
break;
|
346 |
-
}
|
347 |
$submenu[$parentmenu][0][0]=$submenu[$parentmenu][0][3]=$textmenu;
|
348 |
}
|
|
|
349 |
}
|
350 |
|
351 |
function add_help_tab($params){
|
@@ -371,7 +348,7 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
371 |
|
372 |
wp_enqueue_style('wysija-admin-css-widget', WYSIJA_URL.'css/admin-widget.css',array(),WYSIJA::get_version());
|
373 |
|
374 |
-
|
375 |
$model_config = WYSIJA::get('config', 'model');
|
376 |
if ($model_config->getValue('send_analytics_now') == 1) {
|
377 |
$analytics = new WJ_Analytics();
|
@@ -388,7 +365,7 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
388 |
wp_enqueue_script('wysija-admin-js-global', WYSIJA_URL.'js/admin-wysija-global.js',array(),WYSIJA::get_version());
|
389 |
$pagename=str_replace('wysija_','',$_REQUEST['page']);
|
390 |
$backloader=WYSIJA::get('backloader','helper');
|
391 |
-
$backloader->
|
392 |
|
393 |
//$this->controller->jsTrans["ignoremsg"]=__('Are you sure you want to ignore this message?.',WYSIJA);
|
394 |
$jstrans=$this->controller->jsTrans;
|
@@ -397,13 +374,13 @@ class WYSIJA_help_back extends WYSIJA_help{
|
|
397 |
$jstrans['gopremium']=__('Go Premium!',WYSIJA);
|
398 |
|
399 |
//enqueue all the scripts that have been declared in the controller
|
400 |
-
|
19 |
ini_set('display_errors', '0');
|
20 |
}
|
21 |
|
22 |
+
|
|
|
23 |
|
24 |
//the controller is backend is it from our pages or from wordpress?
|
25 |
//are we pluging-in to wordpress interfaces or doing entirely our own page?
|
47 |
if(WYSIJA_ITF) {
|
48 |
add_action('admin_init', array( $this , 'verify_capability'),1);
|
49 |
add_action('admin_init', array($this->controller, 'main'));
|
50 |
+
if(!isset($_REQUEST['action']) || (isset($_REQUEST['action']) && $_REQUEST['action'] !== 'editTemplate')) {
|
51 |
+
add_action('admin_footer',array($this,'version'),9);
|
52 |
+
}
|
53 |
+
|
54 |
add_action('after_setup_theme',array($this,'resolveConflicts'));
|
55 |
}
|
56 |
//this is a fix for qtranslate as we were loading translatable string quite early
|
71 |
$wptools = WYSIJA::get('wp_tools', 'helper');
|
72 |
$wptools->set_default_rolecaps();
|
73 |
|
74 |
+
//code disabling updates for premium users who dont have WJP activated
|
75 |
+
if($config->getValue('premium_key') && !WYSIJA::is_plugin_active('wysija-newsletters-premium/index.php')){
|
76 |
+
|
77 |
+
if(file_exists(WYSIJA_PLG_DIR.'wysija-newsletters-premium'.DS.'index.php')){
|
78 |
+
//send a message to the user so that he activates the premium plugin or try to fetch it directly.
|
79 |
+
$this->notice('<p>'.__('You need to activate the Wysija Premium plugin.',WYSIJA).' <a id="install-wjp" class="button-primary" href="admin.php?page=wysija_campaigns&action=install_wjp">'.__('Activate now',WYSIJA).'</a></p>');
|
80 |
+
}else{
|
81 |
+
//send a message to the user so that he gets the premium plugin or try to fetch it directly.
|
82 |
+
$this->notice('<p>'.__('Congrats, your Premium license is active. One last step...',WYSIJA).' <a id="install-wjp" class="button-primary" href="admin.php?page=wysija_campaigns&action=install_wjp">'.__('Install the Premium plugin.',WYSIJA).'</a></p>');
|
83 |
+
}
|
84 |
+
|
85 |
+
$this->controller->jsTrans['instalwjp']='Installing Wysija Newsletter Premium plugin';
|
86 |
+
|
87 |
+
}
|
88 |
}
|
89 |
|
90 |
//if the comment form option is activated then we add an approval action
|
91 |
if($config->getValue('commentform')){
|
92 |
+
add_action('wp_set_comment_status', array($this,'comment_approved'), 60,2);
|
93 |
+
}
|
94 |
+
|
95 |
+
// if the beta mode is on we look for the updates on a different server
|
96 |
+
if($config->getValue('beta_mode')){
|
97 |
+
$package_helper = WYSIJA::get('package', 'helper');
|
98 |
+
$package_helper->set_package('wysija-newsletters');
|
99 |
}
|
|
|
100 |
|
101 |
|
102 |
+
|
103 |
+
}
|
104 |
+
|
105 |
/**
|
106 |
+
* this function will check the role of the user executing the action, if it's called from another
|
107 |
+
* WordPress admin page than page.php for instance admin-post.php
|
108 |
+
* @return boolean
|
|
|
|
|
109 |
*/
|
110 |
+
function verify_capability(){
|
111 |
+
if( isset( $_GET['page'] ) && substr( $_GET['page'] ,0 ,7 ) == 'wysija_' ){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
|
113 |
+
switch( $_GET['page'] ){
|
114 |
+
case 'wysija_campaigns':
|
115 |
+
$role_needed = 'wysija_newsletters';
|
116 |
+
break;
|
117 |
+
case 'wysija_subscribers':
|
118 |
+
$role_needed = 'wysija_subscribers';
|
119 |
+
break;
|
120 |
+
case 'wysija_config':
|
121 |
+
$role_needed = 'wysija_config';
|
122 |
+
break;
|
123 |
+
case 'wysija_statistics':
|
124 |
+
$role_needed = 'wysija_stats_dashboard';
|
125 |
+
break;
|
126 |
+
default:
|
127 |
+
$role_needed = 'switch_themes';
|
128 |
+
}
|
129 |
|
130 |
+
if( current_user_can( $role_needed ) ){
|
131 |
+
return true;
|
132 |
+
} else{
|
133 |
+
die( 'You are not allowed here.' );
|
134 |
}
|
|
|
135 |
|
136 |
+
}else{
|
137 |
+
// this is not a wysija interface/action we can let it pass
|
138 |
+
return true;
|
139 |
+
}
|
140 |
}
|
141 |
|
142 |
function comment_approved($cid,$comment_status){
|
197 |
}
|
198 |
}
|
199 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
200 |
/**
|
201 |
* translatable strings need to be not loaded to early, this is why we put them ina separate function
|
202 |
* @global type $wysija_installing
|
203 |
*/
|
204 |
function define_translated_strings(){
|
205 |
+
$config=WYSIJA::get('config','model');
|
206 |
+
$linkcontent=__("It doesn't always work the way we want it to, doesn't it? We have a [link]dedicated support website[/link] with documentation and a ticketing system.",WYSIJA);
|
207 |
+
$finds=array('[link]','[/link]');
|
208 |
+
$replace=array('<a target="_blank" href="http://support.mailpoet.com" title="support.mailpoet.com">','</a>');
|
209 |
+
$truelinkhelp='<p>'.str_replace($finds,$replace,$linkcontent).'</p>';
|
210 |
|
211 |
+
$extra='<a href="admin.php?page=wysija_config&scroll_to=beta_mode_setting#tab-advanced" title="'.__('Switch to beta',WYSIJA).'">'.__('Switch to beta',WYSIJA).'</a>';
|
212 |
|
213 |
+
$truelinkhelp.='<p>'.str_replace($finds,$replace,$extra).'</p>';
|
214 |
|
215 |
+
$truelinkhelp.='<p>'.__('Wysija Version: ',WYSIJA).'<strong>'.WYSIJA::get_version().'</strong></p>';
|
216 |
|
217 |
$this->menus=array(
|
218 |
+
'campaigns'=>array('title'=>'Wysija'),
|
219 |
+
'subscribers'=>array('title'=>__('Subscribers',WYSIJA)),
|
220 |
'config'=>array('title'=>__('Settings',WYSIJA)),
|
221 |
+
//"support"=>array("title"=>__("Support",WYSIJA))
|
222 |
);
|
223 |
+
$this->menuHelp=$truelinkhelp;
|
224 |
+
|
225 |
if($config->getValue('queue_sends_slow')){
|
226 |
$msg=$config->getValue('ignore_msgs');
|
227 |
if(!isset($msg['queuesendsslow'])){
|
231 |
}
|
232 |
}
|
233 |
|
234 |
+
|
235 |
+
if(defined('DISABLE_WP_CRON') && DISABLE_WP_CRON && !WYSIJA::is_plugin_active('wp-cron-control/wp-cron-control.php')) {
|
236 |
+
$msg=$config->getValue('ignore_msgs');
|
237 |
+
if(!isset($msg['crondisabled'])){
|
238 |
+
$this->notice(
|
239 |
+
__("Oops! Looks like your site's event scheduler (wp-cron) is turned off.",WYSIJA).' '.
|
240 |
+
str_replace(
|
241 |
+
array('[link]','[/link]'),
|
242 |
+
array('<a href="http://support.mailpoet.com/knowledgebase/your-cron-is-disabled/?utm_source=wpadmin&utm_campaign=notice_message" target="_blank">','</a>'), __('[link]Read more.[/link]',WYSIJA)
|
243 |
+
).' <a class="linkignore crondisabled" href="javascript:;">'.__('Hide!',WYSIJA).'</a>');
|
244 |
+
}
|
245 |
+
}
|
246 |
+
|
247 |
if(WYSIJA_ITF){
|
248 |
global $wysija_installing;
|
249 |
if( !$config->getValue('sending_emails_ok')){
|
260 |
|
261 |
|
262 |
function add_menus(){
|
263 |
+
|
264 |
+
$modelC=WYSIJA::get('config','model');
|
265 |
$count=0;
|
266 |
|
267 |
+
//WordPress globals be careful there
|
268 |
+
global $menu,$submenu;
|
269 |
+
|
270 |
+
|
271 |
+
|
272 |
//anti conflicting menus code to make sure that another plugin is not at the same level as us
|
273 |
$position=50;
|
274 |
$positionplus1=$position+1;
|
285 |
global $wysija_installing;
|
286 |
foreach($this->menus as $action=> $menutemp){
|
287 |
$actionFull='wysija_'.$action;
|
288 |
+
if(!isset($menutemp['subtitle'])) $menutemp['subtitle']=$menutemp['title'];
|
289 |
+
if($action=='campaigns') $roleformenu='wysija_newsletters';
|
290 |
+
elseif($action=='subscribers') $roleformenu='wysija_subscribers';
|
291 |
+
else $roleformenu='wysija_config';
|
|
|
|
|
|
|
|
|
|
|
|
|
292 |
|
293 |
if($wysija_installing===true){
|
294 |
if($count==0){
|
295 |
$parentmenu=$actionFull;
|
296 |
+
$hookname=add_menu_page($menutemp['title'], $menutemp['subtitle'], $roleformenu, $actionFull , array($this->controller, 'errorInstall'), WYSIJA_EDITOR_IMG.'mail.png', $position);
|
297 |
}
|
298 |
}else{
|
299 |
if($count==0){
|
300 |
+
$parentmenu=$actionFull;
|
301 |
+
$hookname=add_menu_page($menutemp['title'], $menutemp['subtitle'], $roleformenu, $actionFull , array($this->controller, 'render'), WYSIJA_EDITOR_IMG.'mail.png', $position);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
302 |
}else{
|
303 |
$hookname=add_submenu_page($parentmenu,$menutemp['title'], $menutemp['subtitle'], $roleformenu, $actionFull , array($this->controller, 'render'));
|
304 |
}
|
317 |
$count++;
|
318 |
}
|
319 |
|
320 |
+
if(isset($submenu[$parentmenu])){
|
321 |
+
if($submenu[$parentmenu][0][2]=="wysija_subscribers") $textmenu=__('Subscribers',WYSIJA);
|
322 |
+
else $textmenu=__('Newsletters',WYSIJA);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
323 |
$submenu[$parentmenu][0][0]=$submenu[$parentmenu][0][3]=$textmenu;
|
324 |
}
|
325 |
+
|
326 |
}
|
327 |
|
328 |
function add_help_tab($params){
|
348 |
|
349 |
wp_enqueue_style('wysija-admin-css-widget', WYSIJA_URL.'css/admin-widget.css',array(),WYSIJA::get_version());
|
350 |
|
351 |
+
// If Cron enabled sending, send Mixpanel data and reset flag.
|
352 |
$model_config = WYSIJA::get('config', 'model');
|
353 |
if ($model_config->getValue('send_analytics_now') == 1) {
|
354 |
$analytics = new WJ_Analytics();
|
365 |
wp_enqueue_script('wysija-admin-js-global', WYSIJA_URL.'js/admin-wysija-global.js',array(),WYSIJA::get_version());
|
366 |
$pagename=str_replace('wysija_','',$_REQUEST['page']);
|
367 |
$backloader=WYSIJA::get('backloader','helper');
|
368 |
+
$backloader->initLoad($this->controller);
|
369 |
|
370 |
//$this->controller->jsTrans["ignoremsg"]=__('Are you sure you want to ignore this message?.',WYSIJA);
|
371 |
$jstrans=$this->controller->jsTrans;
|
374 |
$jstrans['gopremium']=__('Go Premium!',WYSIJA);
|
375 |
|
376 |
//enqueue all the scripts that have been declared in the controller
|
|