forked from mepp/autochimp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathautochimp-plugins.php
421 lines (382 loc) · 10.3 KB
/
autochimp-plugins.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
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
<?php
//
// ACPlugin - base class for all AutoChimp plugin classes. You will not derive
// directly from this class, but from one of the subclasses below. However, you
// will implement some of the functions in this class.
//
class ACPlugin
{
//
// Usually, detecting if a plugin exists is as easy as detecting the presence
// of a class or function belonging to the plugin.
//
public static function GetInstalled()
{
return FALSE;
}
//
// Returns true if the user wants to use this plugin integration. In other words,
// if the user has checked the option to integrate this plugin with AutoChimp,
// this function will return TRUE.
//
public static function GetUsePlugin()
{
return FALSE;
}
//
// Function for registering hooks (like actions or filters). If you don't need
// any, then just don't implement your own version.
//
public function RegisterHooks()
{}
//
// Functions for registering and enqueuing JS scripts. If you use one, use
// both.
//
public function RegisterScripts( $pluginFolder )
{}
public function EnqueueScripts()
{}
//
// Function for displaying the UI for your integration. This UI will appear
// on the "Plugins" tab.
//
public function ShowPluginSettings()
{}
//
// Function called when plugin saving settings. You can access $_POST variables
// based on variables that you created in the ShowPluginSettings() method and write
// them to the database.
//
public function SavePluginSettings()
{}
}
//
// ACSyncPlugin - All Sync plugins must derive from this class. This is the most
// popular type of plugin to support. It syncs signup data with MailChimp.
//
class ACSyncPlugin extends ACPlugin
{
//
// Returns the name of the HTML sync control. Make sure it's unique. You'll
// read this variable and write the value to the DB when a user saves his or
// her settings.
//
public static function GetSyncVarName()
{}
//
// Returns the name of the option in the options table that holds whether the
// user wants to sync this plugin. Must be unique.
//
public static function GetSyncDBVarName()
{}
//
// By implementing GetSyncVarName() and GetSyncDBVarName() AND you have standard
// simple settings, you get saving for free. Only implement if you have special
// settings, but strive hard not to.
//
public function SavePluginSettings()
{
AC_SetBooleanOption( $this::GetSyncVarName(), $this::GetSyncDBVarName() );
}
//
// This method displays a table of plugin field names to select boxes of
// MailChimp fields.
//
public function GenerateMappingsUI( $tableWidth, $mergeVars )
{}
//
// This method saves the user's choices of mappings to the database. It
// uses the global $_POST variable to read the mappings.
//
public function SaveMappings()
{}
//
// This is the most challenging method. It looks up data for the user ID
// passed in, collects the data that the plugin has set, and formats an array
// to be sent to sync MailChimp.
//
public function FetchMappedData( $userID )
{}
}
//
// ACPublishPlugin - All Publish plugins must derive from this class.
//
class ACPublishPlugin extends ACPlugin
{
//
// Returns the name of the HTML publish control. Make sure it's unique. You'll
// read this variable and write the value to the DB when a user saves his or
// her settings.
//
public static function GetPublishVarName()
{}
//
// This is a prefix string used to name your controls so that you can easily
// identify them when the user wants to save settings. Make sure this is unique
// of course.
//
public static function GetPostTypeVarPrefix()
{}
//
// Returns the same thing as get_the_terms(). The calling function will check to
// see if any posts have been created with any of these terms.
//
public static function GetTerms( $postID )
{}
//
// Given an array of mailing lists, interest groups, and templates, as well as
// some Javascript to aid in select box handling, this method generates row-
// by-row UI of term (category) to list to group to template mappings. This
// method should generate all of the UI inline with print statements.
//
public function GenerateMappingsUI( $lists, $groups, $templates, $javaScript )
{}
//
// This method saves the user's choices of mappings to the database. It
// uses the global $_POST variable to read the mappings.
//
public function SaveMappings()
{}
}
//
// ACContentPlugin - All Content plugins must derive from this class. Content
// plugins are fairly simple. They just detect shortcode for the WordPress plugin
// that they represent then, when a post is created, runs the shortcode through
// the plugin to generate the final text that will go to the campaign.
//
class ACContentPlugin extends ACPlugin
{
//
// This straightforward method just takes content and converts any supported
// shortcode and returns the updated content.
//
public function ConvertShortcode( $content )
{
return $content;
}
}
//
// Collection Classes
//
//
// This class is used only by AutoChimp. Third party plugins for AutoChimp do not
// need this class or any of the others below.
//
class ACPlugins
{
// The constructor is used to load up all plugin files and include them. See
// this post (problem number two):
// http://www.wandererllc.com/company/2013/07/problems-with-autochimp-2-10/
// Loading the classes may not be happening properly for functions that call
// static members, so this constructor attempts to include each of the plugin
// files.
function __construct()
{
$plugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $plugins as $plugin )
{
include_once( plugin_dir_path( __FILE__ ) . 'plugins/' . $plugin . '.php' );
}
}
public function ShowPluginSettings()
{
$plugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $plugins as $plugin )
{
if ( $plugin::GetInstalled() )
{
$p = new $plugin;
$p->ShowPluginSettings();
}
}
}
public function SavePluginSettings()
{
//AC_Log( 'Running ACPlugins::SavePluginSettings()' );
$plugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $plugins as $plugin )
{
if ( $plugin::GetInstalled() )
{
$p = new $plugin;
$p->SavePluginSettings();
}
}
}
public function RegisterHooks()
{
$plugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $plugins as $plugin )
{
if ( $plugin::GetInstalled() && $plugin::GetUsePlugin() )
{
$p = new $plugin;
$p->RegisterHooks();
}
}
}
public function RegisterScripts( $pluginFolder )
{
$plugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $plugins as $plugin )
{
if ( $plugin::GetInstalled() && $plugin::GetUsePlugin() )
{
$p = new $plugin;
$p->RegisterScripts( $pluginFolder );
}
}
}
public function EnqueueScripts()
{
$plugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $plugins as $plugin )
{
if ( $plugin::GetInstalled() && $plugin::GetUsePlugin() )
{
$p = new $plugin;
$p->EnqueueScripts();
}
}
}
public function GetPluginClasses( $classType )
{
// array to build the list in
$classlist = array();
// Attempt to open the folder
$path = WP_PLUGIN_DIR . '/autochimp/plugins';
if ( ( $p = opendir( $path ) ) !== FALSE )
{
// Read the directory for items inside it.
while ( ( $item = readdir( $p ) ) !== FALSE )
{
// First check if the filter succeeds for the class type
$filter = TRUE;
// For a blank classType, get everything. Otherwise, only get matches.
if ( 0 !== strlen( $classType ) )
$filter = ( 0 === strpos( $item, $classType ) );
// Make sure the file is a PHP file as well passes the filter test
if ( $filter && 0 < strpos( $item, '.php') )
{
$class = basename( $item, '.php' );
array_push( $classlist, $class );
}
}
closeDir($p);
}
return $classlist;
}
public function GetType()
{
// This is the same as asking for all plugins
return '';
}
}
//
// ACSyncPlugins
//
class ACSyncPlugins extends ACPlugins
{
public function GetType()
{
return 'Sync';
}
public function GenerateMappingsUI( $tableWidth, $mergeVars )
{
$syncPlugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $syncPlugins as $plugin )
{
if ( $plugin::GetInstalled() && $plugin::GetUsePlugin() )
{
$mapper = new $plugin;
$mapper->GenerateMappingsUI( $tableWidth, $mergeVars );
}
}
}
public function SaveMappings()
{
$publishPlugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $publishPlugins as $plugin )
{
if ( $plugin::GetInstalled() && $plugin::GetUsePlugin() )
{
$mapper = new $plugin;
$mapper->SaveMappings();
}
}
}
public function SyncData( &$merge_vars, $userID )
{
$syncPlugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $syncPlugins as $plugin )
{
if ( $plugin::GetInstalled() && $plugin::GetUsePlugin() )
{
$sync = new $plugin;
AC_Log( "About to sync data for the $plugin plugin." );
$data = $sync->FetchMappedData( $userID );
AC_AddUserFieldsToMergeArray( $merge_vars, $data );
}
}
}
}
//
// ACPublishPlugins
//
class ACPublishPlugins extends ACPlugins
{
public function GetType()
{
return 'Publish';
}
public function GenerateMappingsUI( $lists, $groups, $templates, $javaScript )
{
$publishPlugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $publishPlugins as $plugin )
{
if ( $plugin::GetInstalled() && $plugin::GetUsePlugin() )
{
$mapper = new $plugin;
$mapper->GenerateMappingsUI( $lists, $groups, $templates, $javaScript );
}
}
}
public function SaveMappings()
{
$publishPlugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $publishPlugins as $plugin )
{
if ( $plugin::GetInstalled() && $plugin::GetUsePlugin() )
{
$mapper = new $plugin;
$mapper->SaveMappings();
}
}
}
}
//
// ACContentPlugins
//
class ACContentPlugins extends ACPlugins
{
public function GetType()
{
return 'Content';
}
public function ConvertShortcode( $content )
{
$plugins = $this->GetPluginClasses( $this->GetType() );
foreach ( $plugins as $plugin )
{
if ( $plugin::GetInstalled() && $plugin::GetUsePlugin() )
{
$p = new $plugin;
$content = $p->ConvertShortcode( $content );
}
}
$content = apply_filters( 'the_content', $content );
return $content;
}
}
?>