Ninja Forms – The Easy and Powerful Forms Builder - Version 3.3.19.1

Version Description

(29 November 2018) =

Security:

  • Patched an open redirect vulnerability using a url parameter in our submission download page. Thank you to Muhammad Talha Khan for practicing responsible disclosure.

=

Download this release

Release Info

Developer krmoorhouse
Plugin Icon 128x128 Ninja Forms – The Easy and Powerful Forms Builder
Version 3.3.19.1
Comparing to
See all releases

Code changes from version 3.3.19 to 3.3.19.1

.github/CONTRIBUTING.md DELETED
@@ -1,34 +0,0 @@
1
- #Contribute To Ninja Forms
2
- (adapted from Easy Digital Downloads)
3
-
4
- ## Getting Started
5
-
6
- * Submit a ticket for your issue, assuming one does not already exist.
7
- * Raise it on our [Issue Tracker](https://github.com/wpninjas/ninja-forms/issues)
8
- * Clearly describe the issue, including steps to reproduce the bug (if applicable).
9
- * If it's a bug, make sure you fill in the earliest version that you know has the issue as well as the version of WordPress you're using.
10
-
11
- ## Making Changes
12
-
13
- * Fork the Ninja Forms repository on GitHub
14
- * From the `master` branch on your forked repository, create a new branch and make your changes
15
- * Your new branch should use the naming convention `issue/{issue#}` e.g. `issue/190`
16
- * Ensure you stick to the [WordPress Coding Standards](http://codex.wordpress.org/WordPress_Coding_Standards)
17
- * When committing, use a [well-formed](http://robots.thoughtbot.com/5-useful-tips-for-a-better-commit-message) [commit](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) [message](http://who-t.blogspot.com/2009/12/on-commit-messages.html)
18
- * Push the changes to your fork and submit a pull request to the `master` branch of the Ninja Forms repository
19
-
20
- ## Code Documentation
21
-
22
- * We're working on making sure that every function is documented well and follows the WordPress inline documentation standards based on phpDoc
23
- * The WordPress Inline Documentation Standards (with examples) can be found [here](http://make.wordpress.org/core/handbook/inline-documentation-standards/php-documentation-standards/)
24
- * Please make sure that every function is documented so that our API Documentation will be complete
25
- * If you're adding/editing a function in a class, make sure to add `@access {private|public|protected}`
26
- * Finally, please use tabs and not spaces. The tab indent size should be 4 for all Ninja Forms code.
27
-
28
- At this point you're waiting on us to merge your pull request. We'll review all pull requests, and make suggestions and changes if necessary.
29
-
30
- # Additional Resources
31
- * [Ninja Forms Developer API](http://ninjaforms.com/documentation/developer-api/)
32
- * [GitHub Help — Forking](https://help.github.com/articles/fork-a-repo)
33
- * [GitHub Help — Syncing a Fork](https://help.github.com/articles/syncing-a-fork)
34
- * [GitHub Help — Pull Requests](https://help.github.com/articles/using-pull-requests#before-you-begin)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
.github/ISSUE_TEMPLATE.md DELETED
@@ -1,6 +0,0 @@
1
- - **What actions are you taking?**
2
- - What had happened was...
3
- - **What are you expecting to occur?**
4
- - What I was expecting to happen was...
5
- - **What is occurring instead?**
6
- - What *actually* happened was...
 
 
 
 
 
 
.github/PULL_REQUEST_TEMPLATE.md DELETED
@@ -1,8 +0,0 @@
1
- Fixes #
2
-
3
- Changes proposed in this pull request:
4
- -
5
- -
6
- -
7
-
8
- @wpninjas/developers
 
 
 
 
 
 
 
 
DATA_STRUCTURE.md DELETED
@@ -1,644 +0,0 @@
1
- ## Description
2
-
3
- This document describes the architecture of the Ninja Forms database layer.
4
-
5
- ## Current Structure (1.1)
6
-
7
- This section contains the current structure of the Ninja Forms data layer and is updated each time that structure changes. For legacy data, please see the individual version notes.
8
-
9
- ### Forms
10
-
11
- _**nf3_forms**_ (Table of individual Forms)
12
- * id (The unique ID of the Form)
13
- * int(11)
14
- * NOT NULL
15
- * AUTO_INCREMENT
16
- * Primary Key
17
- * title (The displayable title of the Form)
18
- * longtext
19
- * COLLATE DATABASE_DEFAULT
20
- * key (The administrative key of the Form)
21
- * longtext
22
- * COLLATE DATABASE_DEFAULT
23
- * created_at (The date/time the Form was created)
24
- * timestamp
25
- * NOT NULL
26
- * DEFAULT CURRENT_TIMESTAMP
27
- * ON UPDATE CURRENT_TIMESTAMP
28
- * updated_at (The date/time the Form was last updated)
29
- * datetime
30
- * views (The number of times the Form has been viewed)
31
- * int(11)
32
- * subs (The Form's number of lifetime Submissions)
33
- * int(11)
34
- * form_title (The displayable title of the Form)
35
- * longtext
36
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
37
- * default_label_pos (The default label position of fields on the Form)
38
- * varchar(15)
39
- * show_title (Whether or not to show the Form title)
40
- * bit(1)
41
- * clear_complete (Whether or not to clear the Form after submission)
42
- * bit(1)
43
- * hide_complete (Whether or not to hide the Form after submission)
44
- * bit(1)
45
- * logged_in (Whether or not the user must be logged in to view the Form)
46
- * bit(1)
47
- * seq_num (The number of the next submission to the Form)
48
- * int(11)
49
-
50
-
51
- _**nf3_form_meta**_ (Table of Settings assoicated with each Form)
52
- * id (The unique ID of the Setting)
53
- * int(11)
54
- * NOT NULL
55
- * AUTO_INCREMENT
56
- * Primary Key
57
- * parent_id (The Form ID this Setting is associated with)
58
- * int(11)
59
- * NOT NULL
60
- * Foreign Key ON *nf3_forms* id
61
- * key (The administrative key of the Setting)
62
- * longtext
63
- * COLLATE DATABASE_DEFAULT
64
- * NOT NULL
65
- * value (The value of the Setting)
66
- * longtext
67
- * COLLATE DATABASE_DEFAULT
68
- * meta_key (The administrative key of the Setting)
69
- * longtext
70
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
71
- * meta_value (The value of the Setting)
72
- * longtext
73
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
74
-
75
- ### Fields
76
-
77
- _**nf3_fields**_ (Table of individual Fields)
78
- * id (The unique ID of the Field)
79
- * int(11)
80
- * NOT NULL
81
- * AUTO_INCREMENT
82
- * Primary Key
83
- * label (The displayable label of the Field)
84
- * longtext
85
- * COLLATE DATABASE_DEFAULT
86
- * key (The administrative key of the Field)
87
- * longtext
88
- * COLLATE DATABASE_DEFAULT
89
- * type (The type of Field this record represents)
90
- * longtext
91
- * COLLATE DATABASE_DEFAULT
92
- * parent_id (The Form ID this Field is associated with)
93
- * int(11)
94
- * NOT NULL
95
- * Foreign Key ON *nf3_forms* id
96
- * created_at (The date/time the Field was created)
97
- * timestamp
98
- * NOT NULL
99
- * DEFAULT CURRENT_TIMESTAMP
100
- * ON UPDATE CURRENT_TIMESTAMP
101
- * updated_at (The date/time the Field was last updated)
102
- * datetime
103
-
104
-
105
- _**nf3_field_meta**_ (Table of Settings associated with each Field)
106
- * id (The unique ID of the Setting)
107
- * int(11)
108
- * NOT NULL
109
- * AUTO_INCREMENT
110
- * Primary Key
111
- * parent_id (The Field ID this Setting is associated with)
112
- * int(11)
113
- * NOT NULL
114
- * Foreign Key ON *nf3_fields* id
115
- * key (The administrative key of the Setting)
116
- * longtext
117
- * COLLATE DATABASE_DEFAULT
118
- * NOT NULL
119
- * value (The value of the Setting)
120
- * longtext
121
- * COLLATE DATABASE_DEFAULT
122
-
123
- ### Actions
124
-
125
- _**nf3_actions**_ (Table of individual Actions)
126
- * id (The unique ID of the Action)
127
- * int(11)
128
- * NOT NULL
129
- * AUTO_INCREMENT
130
- * Primrary Key
131
- * title (The displayable title of the Action)
132
- * longtext
133
- * COLLATE DATABASE_DEFAULT
134
- * key (The administrative key of the Action)
135
- * longtext
136
- * COLLATE DATABASE_DEFAULT
137
- * type (The type of Action this record represents)
138
- * longtext
139
- * COLLATE DATABASE_DEFAULT
140
- * active (Whether or not the Action is active)
141
- * tinyint(1)
142
- * DEFAULT 1
143
- * parent_id (The Form ID this Action is associated with)
144
- * int(11)
145
- * NOT NULL
146
- * Foreign Key ON *nf3_forms* id
147
- * created_at (The date/time the Action was created)
148
- * timestamp
149
- * NOT NULL
150
- * DEFAULT CURRENT_TIMESTAMP
151
- * ON UPDATE CURRENT_TIMESTAMP
152
- * updated_at (The date/time the Action was last updated)
153
- * datetime
154
-
155
-
156
- _**nf3_action_meta**_ (Table of Settings associated with each Action)
157
- * id (The unique ID of the Setting)
158
- * int(11)
159
- * NOT NULL
160
- * AUTO_INCREMENT
161
- * Primary KEY
162
- * parent_id (The Action ID this Setting is associated with)
163
- * int(11)
164
- * NOT_NULL
165
- * Foreign Key ON *nf3_actions* id
166
- * key (The administrative key of the Setting)
167
- * longtext
168
- * COLLATE DATABASE_DEFAULT
169
- * NOT NULL
170
- * value (The value of the Setting)
171
- * longtext
172
- * COLLATE DATABASE_DEFAULT
173
-
174
- ### Objects
175
-
176
- _**nf3_objects**_ (Table of non-structured Objects)
177
- * id (The unique ID of the Object)
178
- * int(11)
179
- * NOT NULL
180
- * AUTO_INCREMENT
181
- * Primrary Key
182
- * type (The type of Object this record represents)
183
- * longtext
184
- * COLLATE DATABASE_DEFAULT
185
- * title (The displayable title of the Object)
186
- * longtext
187
- * COLLATE DATABASE_DEFAULT
188
- * created_at (The date/time the Object was created)
189
- * timestamp
190
- * NOT NULL
191
- * DEFAULT CURRENT_TIMESTAMP
192
- * ON UPDATE CURRENT_TIMESTAMP
193
- * updated_at (The date/time the Object was last updated)
194
- * datetime
195
-
196
-
197
- _**nf3_object_meta**_ (Table of Settings associated with each Object)
198
- * id (The unique ID of the Setting)
199
- * int(11)
200
- * NOT NULL
201
- * AUTO_INCREMENT
202
- * Primary KEY
203
- * parent_id (The Object ID this Setting is associated with)
204
- * int(11)
205
- * NOT_NULL
206
- * Foreign Key ON *nf3_objects* id
207
- * key (The administrative key of the Setting)
208
- * longtext
209
- * COLLATE DATABASE_DEFAULT
210
- * NOT NULL
211
- * value (The value of the Setting)
212
- * longtext
213
- * COLLATE DATABASE_DEFAULT
214
-
215
-
216
- _**nf3_relationships**_ (Table of Relationships between Objects)
217
- * id (The unique ID of the Relationship)
218
- * int(11)
219
- * NOT NULL
220
- * AUTO_INCREMENT
221
- * Primary KEY
222
- * child_id (The child Object ID this record is associated with)
223
- * int(11)
224
- * NOT_NULL
225
- * Foreign Key ON *nf3_objects* id
226
- * child_type (The type of Object represented by child_id)
227
- * longtext
228
- * COLLATE DATABASE_DEFAULT
229
- * NOT NULL
230
- * parent_id (The parent Object ID this record is associated with)
231
- * int(11)
232
- * NOT_NULL
233
- * Foreign Key ON *nf3_objects* id
234
- * parent_type (The type of Object represented by parent_id)
235
- * longtext
236
- * COLLATE DATABASE_DEFAULT
237
- * NOT NULL
238
- * created_at (The date/time the Relationship was created)
239
- * timestamp
240
- * NOT NULL
241
- * DEFAULT CURRENT_TIMESTAMP
242
- * ON UPDATE CURRENT_TIMESTAMP
243
- * updated_at (The date/time the Relationship was last updated)
244
- * datetime
245
-
246
-
247
- _**options**_ (The default WordPress options table)
248
- * option_name = 'nf_form_%' WHERE % = *nf3_forms* id
249
- * option_value = Serialized JSON Object (The Ninja Forms Cache)
250
-
251
- ### Submissions
252
-
253
- _**posts**_ (The default WordPress posts table)
254
- * id (The unique ID of the Post)
255
- * bigint(20)
256
- * NOT NULL
257
- * AUTO_INCREMENT
258
- * Primary Key
259
- * post_type = 'nf_sub'
260
-
261
-
262
- _**postmeta**_ (The default WordPress postmeta table)
263
- * meta_id (The unique ID of the Metadata)
264
- * bigint(20)
265
- * NOT NULL
266
- * AUTO_INCREMENT
267
- * Primary Key
268
- * post_id (The Post ID this Metadata is associated with)
269
- * bigint(20)
270
- * NOT NULL
271
- * DEFAULT 0
272
- * Foreign Key ON *posts* id
273
- * meta_key (The identifiable key by which this record is referenced)
274
- * varchar(255)
275
- * COLLATE DATABASE_DEFAULT
276
- * meta_value (The value of this record)
277
- * longtext
278
- * COLLATE DATABASE_DEFAULT
279
-
280
- ### Upgrades
281
-
282
- _**nf3_upgrades**_ (Table of Forms as they exist in the current structure and the stage of upgrade currently applied to each Form)
283
- * id (The unique ID of the Form)
284
- * int(11)
285
- * NOT NULL
286
- * Primary Key
287
- * cache (The Ninja Forms cache as it was retrieved from the *options* table)
288
- * longtext
289
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
290
- * stage (The current upgrade stage of the Form)
291
- * int(11)
292
- * NOT NULL
293
- * DEFAULT 0
294
-
295
- ### Chunks
296
-
297
- _**nf3_chunks**_ (Table of Chunks created on publish to be reconstructed into a Ninja Forms cache)
298
- * id (The unique ID of the Chunk)
299
- * int(11)
300
- * NOT NULL
301
- * AUTO_INCREMENT
302
- * Primary Key
303
- * name (The name of the Chunk)
304
- * varchar(200)
305
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
306
- * value (The value of the Chunk)
307
- * longtext
308
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
309
-
310
- ### Chunks
311
-
312
- _**nf3_chunks**_ (Table of Chunks created on publish to be reconstructed into a Ninja Forms cache)
313
- * id (The unique ID of the Chunk)
314
- * int(11)
315
- * NOT NULL
316
- * AUTO_INCREMENT
317
- * Primary Key
318
- * name (The name of the Chunk)
319
- * varchar(200)
320
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
321
- * value (The value of the Chunk)
322
- * longtext
323
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
324
-
325
- ## Version 1.0
326
-
327
- Defined initial structure for Ninja Forms data layer.
328
-
329
- ### Forms
330
-
331
- _**nf3_forms**_ (Table of individual Forms)
332
- * id (The unique ID of the Form)
333
- * int(11)
334
- * NOT NULL
335
- * AUTO_INCREMENT
336
- * Primary Key
337
- * title (The displayable title of the Form)
338
- * longtext
339
- * COLLATE DATABASE_DEFAULT
340
- * key (The administrative key of the Form)
341
- * longtext
342
- * COLLATE DATABASE_DEFAULT
343
- * created_at (The date/time the Form was created)
344
- * timestamp
345
- * NOT NULL
346
- * DEFAULT CURRENT_TIMESTAMP
347
- * ON UPDATE CURRENT_TIMESTAMP
348
- * updated_at (The date/time the Form was last updated)
349
- * datetime
350
- * views (The number of times the Form has been viewed)
351
- * int(11)
352
- * subs (The Form's number of lifetime Submissions)
353
- * int(11)
354
-
355
-
356
- _**nf3_form_meta**_ (Table of Settings assoicated with each Form)
357
- * id (The unique ID of the Setting)
358
- * int(11)
359
- * NOT NULL
360
- * AUTO_INCREMENT
361
- * Primary Key
362
- * parent_id (The Form ID this Setting is associated with)
363
- * int(11)
364
- * NOT NULL
365
- * Foreign Key ON *nf3_forms* id
366
- * key (The administrative key of the Setting)
367
- * longtext
368
- * COLLATE DATABASE_DEFAULT
369
- * NOT NULL
370
- * value (The value of the Setting)
371
- * longtext
372
- * COLLATE DATABASE_DEFAULT
373
-
374
- ### Fields
375
-
376
- _**nf3_fields**_ (Table of individual Fields)
377
- * id (The unique ID of the Field)
378
- * int(11)
379
- * NOT NULL
380
- * AUTO_INCREMENT
381
- * Primary Key
382
- * label (The displayable label of the Field)
383
- * longtext
384
- * COLLATE DATABASE_DEFAULT
385
- * key (The administrative key of the Field)
386
- * longtext
387
- * COLLATE DATABASE_DEFAULT
388
- * type (The type of Field this record represents)
389
- * longtext
390
- * COLLATE DATABASE_DEFAULT
391
- * parent_id (The Form ID this Field is associated with)
392
- * int(11)
393
- * NOT NULL
394
- * Foreign Key ON *nf3_forms* id
395
- * created_at (The date/time the Field was created)
396
- * timestamp
397
- * NOT NULL
398
- * DEFAULT CURRENT_TIMESTAMP
399
- * ON UPDATE CURRENT_TIMESTAMP
400
- * updated_at (The date/time the Field was last updated)
401
- * datetime
402
-
403
-
404
- _**nf3_field_meta**_ (Table of Settings associated with each Field)
405
- * id (The unique ID of the Setting)
406
- * int(11)
407
- * NOT NULL
408
- * AUTO_INCREMENT
409
- * Primary Key
410
- * parent_id (The Field ID this Setting is associated with)
411
- * int(11)
412
- * NOT NULL
413
- * Foreign Key ON *nf3_fields* id
414
- * key (The administrative key of the Setting)
415
- * longtext
416
- * COLLATE DATABASE_DEFAULT
417
- * NOT NULL
418
- * value (The value of the Setting)
419
- * longtext
420
- * COLLATE DATABASE_DEFAULT
421
-
422
- ### Actions
423
-
424
- _**nf3_actions**_ (Table of individual Actions)
425
- * id (The unique ID of the Action)
426
- * int(11)
427
- * NOT NULL
428
- * AUTO_INCREMENT
429
- * Primrary Key
430
- * title (The displayable title of the Action)
431
- * longtext
432
- * COLLATE DATABASE_DEFAULT
433
- * key (The administrative key of the Action)
434
- * longtext
435
- * COLLATE DATABASE_DEFAULT
436
- * type (The type of Action this record represents)
437
- * longtext
438
- * COLLATE DATABASE_DEFAULT
439
- * active (Whether or not the Action is active)
440
- * tinyint(1)
441
- * DEFAULT 1
442
- * parent_id (The Form ID this Action is associated with)
443
- * int(11)
444
- * NOT NULL
445
- * Foreign Key ON *nf3_forms* id
446
- * created_at (The date/time the Action was created)
447
- * timestamp
448
- * NOT NULL
449
- * DEFAULT CURRENT_TIMESTAMP
450
- * ON UPDATE CURRENT_TIMESTAMP
451
- * updated_at (The date/time the Action was last updated)
452
- * datetime
453
-
454
-
455
- _**nf3_action_meta**_ (Table of Settings associated with each Action)
456
- * id (The unique ID of the Setting)
457
- * int(11)
458
- * NOT NULL
459
- * AUTO_INCREMENT
460
- * Primary KEY
461
- * parent_id (The Action ID this Setting is associated with)
462
- * int(11)
463
- * NOT_NULL
464
- * Foreign Key ON *nf3_actions* id
465
- * key (The administrative key of the Setting)
466
- * longtext
467
- * COLLATE DATABASE_DEFAULT
468
- * NOT NULL
469
- * value (The value of the Setting)
470
- * longtext
471
- * COLLATE DATABASE_DEFAULT
472
-
473
- ### Objects
474
-
475
- _**nf3_objects**_ (Table of non-structured Objects)
476
- * id (The unique ID of the Object)
477
- * int(11)
478
- * NOT NULL
479
- * AUTO_INCREMENT
480
- * Primrary Key
481
- * type (The type of Object this record represents)
482
- * longtext
483
- * COLLATE DATABASE_DEFAULT
484
- * title (The displayable title of the Object)
485
- * longtext
486
- * COLLATE DATABASE_DEFAULT
487
- * created_at (The date/time the Object was created)
488
- * timestamp
489
- * NOT NULL
490
- * DEFAULT CURRENT_TIMESTAMP
491
- * ON UPDATE CURRENT_TIMESTAMP
492
- * updated_at (The date/time the Object was last updated)
493
- * datetime
494
-
495
-
496
- _**nf3_object_meta**_ (Table of Settings associated with each Object)
497
- * id (The unique ID of the Setting)
498
- * int(11)
499
- * NOT NULL
500
- * AUTO_INCREMENT
501
- * Primary KEY
502
- * parent_id (The Object ID this Setting is associated with)
503
- * int(11)
504
- * NOT_NULL
505
- * Foreign Key ON *nf3_objects* id
506
- * key (The administrative key of the Setting)
507
- * longtext
508
- * COLLATE DATABASE_DEFAULT
509
- * NOT NULL
510
- * value (The value of the Setting)
511
- * longtext
512
- * COLLATE DATABASE_DEFAULT
513
-
514
-
515
- _**nf3_relationships**_ (Table of Relationships between Objects)
516
- * id (The unique ID of the Relationship)
517
- * int(11)
518
- * NOT NULL
519
- * AUTO_INCREMENT
520
- * Primary KEY
521
- * child_id (The child Object ID this record is associated with)
522
- * int(11)
523
- * NOT_NULL
524
- * Foreign Key ON *nf3_objects* id
525
- * child_type (The type of Object represented by child_id)
526
- * longtext
527
- * COLLATE DATABASE_DEFAULT
528
- * NOT NULL
529
- * parent_id (The parent Object ID this record is associated with)
530
- * int(11)
531
- * NOT_NULL
532
- * Foreign Key ON *nf3_objects* id
533
- * parent_type (The type of Object represented by parent_id)
534
- * longtext
535
- * COLLATE DATABASE_DEFAULT
536
- * NOT NULL
537
- * created_at (The date/time the Relationship was created)
538
- * timestamp
539
- * NOT NULL
540
- * DEFAULT CURRENT_TIMESTAMP
541
- * ON UPDATE CURRENT_TIMESTAMP
542
- * updated_at (The date/time the Relationship was last updated)
543
- * datetime
544
-
545
-
546
- _**options**_ (The default WordPress options table)
547
- * option_name = 'nf_form_%' WHERE % = *nf3_forms* id
548
- * option_value = Serialized JSON Object (The Ninja Forms Cache)
549
-
550
- ### Submissions
551
-
552
- _**posts**_ (The default WordPress posts table)
553
- * id (The unique ID of the Post)
554
- * bigint(20)
555
- * NOT NULL
556
- * AUTO_INCREMENT
557
- * Primary Key
558
- * post_type = 'nf_sub'
559
-
560
-
561
- _**postmeta**_ (The default WordPress postmeta table)
562
- * meta_id (The unique ID of the Metadata)
563
- * bigint(20)
564
- * NOT NULL
565
- * AUTO_INCREMENT
566
- * Primary Key
567
- * post_id (The Post ID this Metadata is associated with)
568
- * bigint(20)
569
- * NOT NULL
570
- * DEFAULT 0
571
- * Foreign Key ON *posts* id
572
- * meta_key (The identifiable key by which this record is referenced)
573
- * varchar(255)
574
- * COLLATE DATABASE_DEFAULT
575
- * meta_value (The value of this record)
576
- * longtext
577
- * COLLATE DATABASE_DEFAULT
578
-
579
- ## Version 1.1
580
-
581
- Defined tracker table for data structure updates.
582
-
583
- ### Upgrades
584
-
585
- _**nf3_upgrades**_ (Table of Forms as they exist in the current structure and the stage of upgrade currently applied to each Form)
586
- * id (The unique ID of the Form)
587
- * int(11)
588
- * NOT NULL
589
- * Primary Key
590
- * cache (The Ninja Forms cache as it was retrieved from the *options* table)
591
- * longtext
592
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
593
- * stage (The current upgrade stage of the Form)
594
- * int(11)
595
- * NOT NULL
596
- * DEFAULT 0
597
-
598
- Defined chunks table for ensuring collate of chunked publish.
599
-
600
- ### Chunks
601
-
602
- _**nf3_chunks**_ (Table of Chunks created on publish to be reconstructed into a Ninja Forms cache)
603
- * id (The unique ID of the Chunk)
604
- * int(11)
605
- * NOT NULL
606
- * AUTO_INCREMENT
607
- * Primary Key
608
- * name (The name of the Chunk)
609
- * varchar(200)
610
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
611
- * value (The value of the Chunk)
612
- * longtext
613
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
614
-
615
- Updated forms tables
616
-
617
- ### Forms
618
-
619
- _**nf3_forms**_ (Table of individual Forms)
620
- ADDED:
621
- * form_title (The displayable title of the Form)
622
- * longtext
623
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
624
- * default_label_pos (The default label position of fields on the Form)
625
- * varchar(15)
626
- * show_title (Whether or not to show the Form title)
627
- * bit(1)
628
- * clear_complete (Whether or not to clear the Form after submission)
629
- * bit(1)
630
- * hide_complete (Whether or not to hide the Form after submission)
631
- * bit(1)
632
- * logged_in (Whether or not the user must be logged in to view the Form)
633
- * bit(1)
634
- * seq_num (The number of the next submission to the Form)
635
- * int(11)
636
-
637
- _**nf3_form_meta**_ (Table of Settings assoicated with each Form)
638
- ADDED:
639
- * meta_key (The administrative key of the Setting)
640
- * longtext
641
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
642
- * meta_value (The value of the Setting)
643
- * longtext
644
- * COLLATE utf8mb4_general_ci (fallback to utf8_general_ci)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
assets/img/add-ons/mail-chimp.png CHANGED
File without changes
assets/js/min/front-end-deps.js CHANGED
File without changes
deprecated/includes/admin/edit-field/post-meta-values.php CHANGED
@@ -1,96 +1,96 @@
1
- <?php if ( ! defined( 'ABSPATH' ) ) exit;
2
- /*
3
- function ninja_forms_post_meta_value_box( $field_id ){
4
- global $wpdb, $ninja_forms_fields;
5
-
6
- $add_field = apply_filters( 'ninja_forms_use_post_fields', false );
7
- if ( !$add_field )
8
- return false;
9
-
10
-
11
- $field_row = ninja_forms_get_field_by_id($field_id);
12
- $field_type = $field_row['type'];
13
- $field_data = $field_row['data'];
14
- $reg_field = $ninja_forms_fields[$field_type];
15
- $field_process = $reg_field['process_field'];
16
-
17
- $form_row = ninja_forms_get_form_by_field_id( $field_id );
18
- if ( isset ( $form_row['data']['create_post'] ) AND $form_row['data']['create_post'] == 1 ) {
19
- if( isset( $field_data['post_meta_value'] ) ){
20
- $post_meta_value = $field_data['post_meta_value'];
21
- }else{
22
- $post_meta_value = '';
23
- }
24
-
25
- if( $field_process ){
26
- $meta_keys = $wpdb->get_results( "SELECT meta_key FROM $wpdb->postmeta", ARRAY_A );
27
- $meta_array = array();
28
- foreach( $meta_keys as $key ){
29
- $first_char = substr( $key['meta_key'], 0, 1 );
30
- if( $first_char != '_' ){
31
- array_push( $meta_array, $key['meta_key'] );
32
- }
33
- }
34
- $meta_array = array_unique( $meta_array );
35
-
36
- ?>
37
- <div class=" description description-wide" id="ninja_forms_post_meta_values">
38
- <label class="label">
39
- <?php _e( 'Attach this value to custom post meta', 'ninja-forms' );?>:
40
- </label><br />
41
- <?php
42
- if( is_array( $meta_array ) AND !empty( $meta_array ) ){
43
- $custom = true;
44
- if( $post_meta_value != '' ){
45
- foreach( $meta_array as $meta ){
46
- if( $post_meta_value == $meta ){
47
- $custom = false;
48
- }
49
- }
50
- }
51
- if( $post_meta_value == '' ){
52
- $custom = false;
53
- }
54
- }
55
- ?>
56
- <select name="" id="ninja_forms_field_<?php echo $field_id;?>_post_meta_value" class="ninja-forms-post-meta-value">
57
- <option value="">- None</option>
58
- <option value="custom" <?php selected($custom, true);?>>- Custom -></option>
59
- <?php
60
- if( is_array( $meta_array ) AND !empty( $meta_array ) ){
61
- $custom = true;
62
- if( $post_meta_value != '' ){
63
- foreach( $meta_array as $meta ){
64
- if( $post_meta_value == $meta ){
65
- $custom = false;
66
- }
67
- }
68
- }
69
- if( $post_meta_value == '' ){
70
- $custom = false;
71
- }
72
-
73
- foreach( $meta_array as $meta ){
74
- ?>
75
- <option value="<?php echo $meta;?>" <?php selected( $post_meta_value, $meta );?>><?php echo $meta;?></option>
76
- <?php
77
- }
78
- }
79
- ?>
80
- </select>
81
- <?php
82
- if( $custom ){
83
- $display_input = '';
84
- }else{
85
- $display_input = 'display:none;';
86
- }
87
- ?>
88
- <input type="text" name="ninja_forms_field_<?php echo $field_id;?>[post_meta_value]" id="ninja_forms_field_<?php echo $field_id;?>_custom_post_meta_value" value="<?php echo $post_meta_value;?>" style="<?php echo $display_input;?> width:350px">
89
- </div>
90
- <?php
91
- }
92
- }
93
- }
94
-
95
- add_action( 'ninja_forms_edit_field_after_registered', 'ninja_forms_post_meta_value_box' );
96
  */
1
+ <?php if ( ! defined( 'ABSPATH' ) ) exit;
2
+ /*
3
+ function ninja_forms_post_meta_value_box( $field_id ){
4
+ global $wpdb, $ninja_forms_fields;
5
+
6
+ $add_field = apply_filters( 'ninja_forms_use_post_fields', false );
7
+ if ( !$add_field )
8
+ return false;
9
+
10
+
11
+ $field_row = ninja_forms_get_field_by_id($field_id);
12
+ $field_type = $field_row['type'];
13
+ $field_data = $field_row['data'];
14
+ $reg_field = $ninja_forms_fields[$field_type];
15
+ $field_process = $reg_field['process_field'];
16
+
17
+ $form_row = ninja_forms_get_form_by_field_id( $field_id );
18
+ if ( isset ( $form_row['data']['create_post'] ) AND $form_row['data']['create_post'] == 1 ) {
19
+ if( isset( $field_data['post_meta_value'] ) ){
20
+ $post_meta_value = $field_data['post_meta_value'];
21
+ }else{
22
+ $post_meta_value = '';
23
+ }
24
+
25
+ if( $field_process ){
26
+ $meta_keys = $wpdb->get_results( "SELECT meta_key FROM $wpdb->postmeta", ARRAY_A );
27
+ $meta_array = array();
28
+ foreach( $meta_keys as $key ){
29
+ $first_char = substr( $key['meta_key'], 0, 1 );
30
+ if( $first_char != '_' ){
31
+ array_push( $meta_array, $key['meta_key'] );
32
+ }
33
+ }
34
+ $meta_array = array_unique( $meta_array );
35
+
36
+ ?>
37
+ <div class=" description description-wide" id="ninja_forms_post_meta_values">
38
+ <label class="label">
39
+ <?php _e( 'Attach this value to custom post meta', 'ninja-forms' );?>:
40
+ </label><br />
41
+ <?php
42
+ if( is_array( $meta_array ) AND !empty( $meta_array ) ){
43
+ $custom = true;
44
+ if( $post_meta_value != '' ){
45
+ foreach( $meta_array as $meta ){
46
+ if( $post_meta_value == $meta ){
47
+ $custom = false;
48
+ }
49
+ }
50
+ }
51
+ if( $post_meta_value == '' ){
52
+ $custom = false;
53
+ }
54
+ }
55
+ ?>
56
+ <select name="" id="ninja_forms_field_<?php echo $field_id;?>_post_meta_value" class="ninja-forms-post-meta-value">
57
+ <option value="">- None</option>
58
+ <option value="custom" <?php selected($custom, true);?>>- Custom -></option>
59
+ <?php
60
+ if( is_array( $meta_array ) AND !empty( $meta_array ) ){
61
+ $custom = true;
62
+ if( $post_meta_value != '' ){
63
+ foreach( $meta_array as $meta ){
64
+ if( $post_meta_value == $meta ){
65
+ $custom = false;
66
+ }
67
+ }
68
+ }
69
+ if( $post_meta_value == '' ){
70
+ $custom = false;
71
+ }
72
+
73
+ foreach( $meta_array as $meta ){
74
+ ?>
75
+ <option value="<?php echo $meta;?>" <?php selected( $post_meta_value, $meta );?>><?php echo $meta;?></option>
76
+ <?php
77
+ }
78
+ }
79
+ ?>
80
+ </select>
81
+ <?php
82
+ if( $custom ){
83
+ $display_input = '';
84
+ }else{
85
+ $display_input = 'display:none;';
86
+ }
87
+ ?>
88
+ <input type="text" name="ninja_forms_field_<?php echo $field_id;?>[post_meta_value]" id="ninja_forms_field_<?php echo $field_id;?>_custom_post_meta_value" value="<?php echo $post_meta_value;?>" style="<?php echo $display_input;?> width:350px">
89
+ </div>
90
+ <?php
91
+ }
92
+ }
93
+ }
94
+
95
+ add_action( 'ninja_forms_edit_field_after_registered', 'ninja_forms_post_meta_value_box' );
96
  */
deprecated/includes/admin/pages/ninja-forms/tabs/field-settings/sidebars/post-fields.php CHANGED
@@ -1,48 +1,48 @@
1
- <?php if ( ! defined( 'ABSPATH' ) ) exit;
2
-
3
- // For backwards compatibilty, make sure that this function doesn't already exist.
4
- if ( !function_exists ( 'ninja_forms_register_field_post_tags' ) ) {
5
- function ninja_forms_register_sidebar_post_fields(){
6
- $add_field = apply_filters( 'ninja_forms_use_post_fields', false );
7
- if ( !$add_field )
8
- return false;
9
-
10
- if(isset($_REQUEST['form_id'])){
11
- $form_id = absint( $_REQUEST['form_id'] );
12
- }else{
13
- $form_id = '';
14
- }
15
- if( function_exists( 'ninja_forms_get_current_tab' ) ){
16
- $current_tab = ninja_forms_get_current_tab();
17
- }
18
- if($form_id != '' AND $current_tab == 'fields'){
19
- $form_row = ninja_forms_get_form_by_id($form_id);
20
- if(is_array($form_row) AND !empty($form_row)){
21
- $form_data = $form_row['data'];
22
- if( isset( $form_data['create_post'] ) ){
23
- $create_post = $form_data['create_post'];
24
- }else{
25
- $create_post = '';
26
- }
27
-
28
- }else{
29
- $create_post = '';
30
- }
31
- }else{
32
- $create_post = '';
33
- }
34
- $args = array(
35
- 'name' => 'Post Creation Fields',
36
- 'page' => 'ninja-forms',
37
- 'tab' => 'builder',
38
- 'display_function' => 'ninja_forms_sidebar_display_fields'
39
- );
40
- if($create_post == 1){
41
- if( function_exists( 'ninja_forms_register_sidebar' ) ){
42
- ninja_forms_register_sidebar('post_fields', $args);
43
- }
44
- }
45
- }
46
-
47
- add_action( 'admin_init', 'ninja_forms_register_sidebar_post_fields' );
48
  }
1
+ <?php if ( ! defined( 'ABSPATH' ) ) exit;
2
+
3
+ // For backwards compatibilty, make sure that this function doesn't already exist.
4
+ if ( !function_exists ( 'ninja_forms_register_field_post_tags' ) ) {
5
+ function ninja_forms_register_sidebar_post_fields(){
6
+ $add_field = apply_filters( 'ninja_forms_use_post_fields', false );
7
+ if ( !$add_field )
8
+ return false;
9
+
10
+ if(isset($_REQUEST['form_id'])){
11
+ $form_id = absint( $_REQUEST['form_id'] );
12
+ }else{
13
+ $form_id = '';
14
+ }
15
+ if( function_exists( 'ninja_forms_get_current_tab' ) ){
16
+ $current_tab = ninja_forms_get_current_tab();
17
+ }
18
+ if($form_id != '' AND $current_tab == 'fields'){
19
+ $form_row = ninja_forms_get_form_by_id($form_id);
20
+ if(is_array($form_row) AND !empty($form_row)){
21
+ $form_data = $form_row['data'];
22
+ if( isset( $form_data['create_post'] ) ){
23
+ $create_post = $form_data['create_post'];
24
+ }else{
25
+ $create_post = '';
26
+ }
27
+
28
+ }else{
29
+ $create_post = '';
30
+ }
31
+ }else{
32
+ $create_post = '';
33
+ }
34
+ $args = array(
35
+ 'name' => 'Post Creation Fields',
36
+ 'page' => 'ninja-forms',
37
+ 'tab' => 'builder',
38
+ 'display_function' => 'ninja_forms_sidebar_display_fields'
39
+ );
40
+ if($create_post == 1){
41
+ if( function_exists( 'ninja_forms_register_sidebar' ) ){
42
+ ninja_forms_register_sidebar('post_fields', $args);
43
+ }
44
+ }
45
+ }
46
+
47
+ add_action( 'admin_init', 'ninja_forms_register_sidebar_post_fields' );
48
  }
deprecated/js/dev/jquery.rating.js CHANGED
@@ -1,376 +1,376 @@
1
- /*
2
- ### jQuery Star Rating Plugin v4.11 - 2013-03-14 ###
3
- * Home: http://www.fyneworks.com/jquery/star-rating/
4
- * Code: http://code.google.com/p/jquery-star-rating-plugin/
5
- *
6
- * Licensed under http://en.wikipedia.org/wiki/MIT_License
7
- ###
8
- */
9
-
10
- /*# AVOID COLLISIONS #*/
11
- ;if(window.jQuery) (function($){
12
- /*# AVOID COLLISIONS #*/
13
-
14
- // IE6 Background Image Fix
15
- if ((!$.support.opacity && !$.support.style)) try { document.execCommand("BackgroundImageCache", false, true)} catch(e) { };
16
- // Thanks to http://www.visualjquery.com/rating/rating_redux.html
17
-
18
- // plugin initialization
19
- $.fn.rating = function(options){
20
- if(this.length==0) return this; // quick fail
21
-
22
- // Handle API methods
23
- if(typeof arguments[0]=='string'){
24
- // Perform API methods on individual elements
25
- if(this.length>1){
26
- var args = arguments;
27
- return this.each(function(){
28
- $.fn.rating.apply($(this), args);
29
- });
30
- };
31
- // Invoke API method handler
32
- $.fn.rating[arguments[0]].apply(this, $.makeArray(arguments).slice(1) || []);
33
- // Quick exit...
34
- return this;
35
- };
36
-
37
- // Initialize options for this call
38
- var options = $.extend(
39
- {}/* new object */,
40
- $.fn.rating.options/* default options */,
41
- options || {} /* just-in-time options */
42
- );
43
-
44
- // Allow multiple controls with the same name by making each call unique
45
- $.fn.rating.calls++;
46
-
47
- // loop through each matched element
48
- this
49
- .not('.ninja-forms-star-rating-applied')
50
- .addClass('ninja-forms-star-rating-applied')
51
- .each(function(){
52
-
53
- // Load control parameters / find context / etc
54
- var control, input = $(this);
55
- var eid = (this.name || 'unnamed-rating').replace(/\[|\]/g, '_').replace(/^\_+|\_+$/g,'');
56
- var context = $(this.form || document.body);
57
-
58
- // FIX: http://code.google.com/p/jquery-star-rating-plugin/issues/detail?id=23
59
- var raters = context.data('rating');
60
- if(!raters || raters.call!=$.fn.rating.calls) raters = { count:0, call:$.fn.rating.calls };
61
- var rater = raters[eid] || context.data('rating'+eid);
62
-
63
- // if rater is available, verify that the control still exists
64
- if(rater) control = rater.data('rating');
65
-
66
- if(rater && control)//{// save a byte!
67
- // add star to control if rater is available and the same control still exists
68
- control.count++;
69
-
70
- //}// save a byte!
71
- else{
72
- // create new control if first star or control element was removed/replaced
73
-
74
- // Initialize options for this rater
75
- control = $.extend(
76
- {}/* new object */,
77
- options || {} /* current call options */,
78
- ($.metadata? input.metadata(): ($.meta?input.data():null)) || {}, /* metadata options */
79
- { count:0, stars: [], inputs: [] }
80
- );
81
-
82
- // increment number of rating controls
83
- control.serial = raters.count++;
84
-
85
- // create rating element
86
- rater = $('<span class="ninja-forms-star-rating-control"/>');
87
- input.before(rater);
88
-
89
- // Mark element for initialization (once all stars are ready)
90
- rater.addClass('rating-to-be-drawn');
91
-
92
- // Accept readOnly setting from 'disabled' property
93
- if(input.attr('disabled') || input.hasClass('disabled')) control.readOnly = true;
94
-
95
- // Accept required setting from class property (class='required')
96
- if(input.hasClass('required')) control.required = true;
97
-
98
- // Create 'cancel' button
99
- rater.append(
100
- control.cancel = $('<div class="rating-cancel"><a title="' + control.cancel + '">' + control.cancelValue + '</a></div>')
101
- .on('mouseover',function(){
102
- $(this).rating('drain');
103
- $(this).addClass('ninja-forms-star-rating-hover');
104
- //$(this).rating('focus');
105
- })
106
- .on('mouseout',function(){
107
- $(this).rating('draw');
108
- $(this).removeClass('ninja-forms-star-rating-hover');
109
- //$(this).rating('blur');
110
- })
111
- .on('click',function(){
112
- $(this).rating('select');
113
- })
114
- .data('rating', control)
115
- );
116
-
117
- }; // first element of group
118
-
119
- // insert rating star (thanks Jan Fanslau rev125 for blind support https://code.google.com/p/jquery-star-rating-plugin/issues/detail?id=125)
120
- var star = $('<div role="text" aria-label="'+ this.title +'" class="ninja-forms-star-rating rater-'+ control.serial +'"><a title="' + (this.title || this.value) + '">' + this.value + '</a></div>');
121
- rater.append(star);
122
-
123
- // inherit attributes from input element
124
- if(this.id) star.attr('id', this.id);
125
- if(this.className) star.addClass(this.className);
126
-
127
- // Half-stars?
128
- if(control.half) control.split = 2;
129
-
130
- // Prepare division control
131
- if(typeof control.split=='number' && control.split>0){
132
- var stw = ($.fn.width ? star.width() : 0) || control.starWidth;
133
- var spi = (control.count % control.split), spw = Math.floor(stw/control.split);
134
- star
135
- // restrict star's width and hide overflow (already in CSS)
136
- .width(spw)
137
- // move the star left by using a negative margin
138
- // this is work-around to IE's stupid box model (position:relative doesn't work)
139
- .find('a').css({ 'margin-left':'-'+ (spi*spw) +'px' })
140
- };
141
-
142
- // readOnly?
143
- if(control.readOnly)//{ //save a byte!
144
- // Mark star as readOnly so user can customize display
145
- star.addClass('ninja-forms-star-rating-readonly');
146
- //} //save a byte!
147
- else//{ //save a byte!
148
- // Enable hover css effects
149
- star.addClass('ninja-forms-star-rating-live')
150
- // Attach mouse events
151
- .on('mouseover',function(){
152
- $(this).rating('fill');
153
- $(this).rating('focus');
154
- })
155
- .on('mouseout',function(){
156
- $(this).rating('draw');
157
- $(this).rating('blur');
158
- })
159
- .on('click',function(){
160
- $(this).rating('select');
161
- })
162
- ;
163
- //}; //save a byte!
164
-
165
- // set current selection
166
- if(this.checked) control.current = star;
167
-
168
- // set current select for links
169
- if(this.nodeName=="A"){
170
- if($(this).hasClass('selected'))
171
- control.current = star;
172
- };
173
-
174
- // hide input element
175
- input.hide();
176
-
177
- // backward compatibility, form element to plugin
178
- input.on('change.rating',function(event){
179
- if(event.selfTriggered) return false;
180
- $(this).rating('select');
181
- });
182
-
183
- // attach reference to star to input element and vice-versa
184
- star.data('rating.input', input.data('rating.star', star));
185
-
186
- // store control information in form (or body when form not available)
187
- control.stars[control.stars.length] = star[0];
188
- control.inputs[control.inputs.length] = input[0];
189
- control.rater = raters[eid] = rater;
190
- control.context = context;
191
-
192
- input.data('rating', control);
193
- rater.data('rating', control);
194
- star.data('rating', control);
195
- context.data('rating', raters);
196
- context.data('rating'+eid, rater); // required for ajax forms
197
- }); // each element
198
-
199
- // Initialize ratings (first draw)
200
- $('.rating-to-be-drawn').rating('draw').removeClass('rating-to-be-drawn');
201
-
202
- return this; // don't break the chain...
203
- };
204
-
205
- /*--------------------------------------------------------*/
206
-
207
- /*
208
- ### Core functionality and API ###
209
- */
210
- $.extend($.fn.rating, {
211
- // Used to append a unique serial number to internal control ID
212
- // each time the plugin is invoked so same name controls can co-exist
213
- calls: 0,
214
-
215
- focus: function(){
216
- var control = this.data('rating'); if(!control) return this;
217
- if(!control.focus) return this; // quick fail if not required
218
- // find data for event
219
- var input = $(this).data('rating.input') || $( this.tagName=='INPUT' ? this : null );
220
- // focus handler, as requested by focusdigital.co.uk
221
- if(control.focus) control.focus.apply(input[0], [input.val(), $('a', input.data('rating.star'))[0]]);
222
- }, // $.fn.rating.focus
223
-
224
- blur: function(){
225
- var control = this.data('rating'); if(!control) return this;
226
- if(!control.blur) return this; // quick fail if not required
227
- // find data for event
228
- var input = $(this).data('rating.input') || $( this.tagName=='INPUT' ? this : null );
229
- // blur handler, as requested by focusdigital.co.uk
230
- if(control.blur) control.blur.apply(input[0], [input.val(), $('a', input.data('rating.star'))[0]]);
231
- }, // $.fn.rating.blur
232
-
233
- fill: function(){ // fill to the current mouse position.
234
- var control = this.data('rating'); if(!control) return this;
235
- // do not execute when control is in read-only mode
236
- if(control.readOnly) return;
237
- // Reset all stars and highlight them up to this element
238
- this.rating('drain');
239
- this.prevAll().addBack().filter('.rater-'+ control.serial).addClass('ninja-forms-star-rating-hover');
240
- },// $.fn.rating.fill
241
-
242
- drain: function() { // drain all the stars.
243
- var control = this.data('rating'); if(!control) return this;
244
- // do not execute when control is in read-only mode
245
- if(control.readOnly) return;
246
- // Reset all stars
247
- control.rater.children().filter('.rater-'+ control.serial).removeClass('ninja-forms-star-rating-on').removeClass('ninja-forms-star-rating-hover');
248
- },// $.fn.rating.drain
249
-
250
- draw: function(){ // set value and stars to reflect current selection
251
- var control = this.data('rating'); if(!control) return this;
252
- // Clear all stars
253
- this.rating('drain');
254
- // Set control value
255
- var current = $( control.current );//? control.current.data('rating.input') : null );
256
- var starson = current.length ? current.prevAll().addBack().filter('.rater-'+ control.serial) : null;
257
- if(starson) starson.addClass('ninja-forms-star-rating-on');
258
- // Show/hide 'cancel' button
259
- control.cancel[control.readOnly || control.required?'hide':'show']();
260
- // Add/remove read-only classes to remove hand pointer
261
- this.siblings()[control.readOnly?'addClass':'removeClass']('ninja-forms-star-rating-readonly');
262
- },// $.fn.rating.draw
263
-
264
-
265
-
266
-
267
-
268
- select: function(value,wantCallBack){ // select a value
269
- var control = this.data('rating'); if(!control) return this;
270
- // do not execute when control is in read-only mode
271
- if(control.readOnly) return;
272
- // clear selection
273
- control.current = null;
274
- // programmatically (based on user input)
275
- if(typeof value!='undefined' || this.length>1){
276
- // select by index (0 based)
277
- if(typeof value=='number')
278
- return $(control.stars[value]).rating('select',undefined,wantCallBack);
279
- // select by literal value (must be passed as a string
280
- if(typeof value=='string'){
281
- //return
282
- $.each(control.stars, function(){
283
- //console.log($(this).data('rating.input'), $(this).data('rating.input').val(), value, $(this).data('rating.input').val()==value?'BINGO!':'');
284
- if($(this).data('rating.input').val()==value) $(this).rating('select',undefined,wantCallBack);
285
- });
286
- // don't break the chain
287
- return this;
288
- };
289
- }
290
- else{
291
- control.current = this[0].tagName=='INPUT' ?
292
- this.data('rating.star') :
293
- (this.is('.rater-'+ control.serial) ? this : null);
294
- };
295
- // Update rating control state
296
- this.data('rating', control);
297
- // Update display
298
- this.rating('draw');
299
- // find current input and its sibblings
300
- var current = $( control.current ? control.current.data('rating.input') : null );
301
- var lastipt = $( control.inputs ).filter(':checked');
302
- var deadipt = $( control.inputs ).not(current);
303
- // check and uncheck elements as required
304
- deadipt.prop('checked',false);//.removeAttr('checked');
305
- current.prop('checked',true);//.attr('checked','checked');
306
- // trigger change on current or last selected input
307
- $(current.length? current : lastipt ).trigger({ type:'change', selfTriggered:true });
308
- // click callback, as requested here: http://plugins.jquery.com/node/1655
309
- if((wantCallBack || wantCallBack == undefined) && control.callback) control.callback.apply(current[0], [current.val(), $('a', control.current)[0]]);// callback event
310
- // don't break the chain
311
- return this;
312
- },// $.fn.rating.select
313
-
314
-
315
-
316
-
317
-
318
- readOnly: function(toggle, disable){ // make the control read-only (still submits value)
319
- var control = this.data('rating'); if(!control) return this;
320
- // setread-only status
321
- control.readOnly = toggle || toggle==undefined ? true : false;
322
- // enable/disable control value submission
323
- if(disable) $(control.inputs).attr("disabled", "disabled");
324
- else $(control.inputs).removeAttr("disabled");
325
- // Update rating control state
326
- this.data('rating', control);
327
- // Update display
328
- this.rating('draw');
329
- },// $.fn.rating.readOnly
330
-
331
- disable: function(){ // make read-only and never submit value
332
- this.rating('readOnly', true, true);
333
- },// $.fn.rating.disable
334
-
335
- enable: function(){ // make read/write and submit value
336
- this.rating('readOnly', false, false);
337
- }// $.fn.rating.select
338
-
339
- });
340
-
341
- /*--------------------------------------------------------*/
342
-
343
- /*
344
- ### Default Settings ###
345
- eg.: You can override default control like this:
346
- $.fn.rating.options.cancel = 'Clear';
347
- */
348
- $.fn.rating.options = { //$.extend($.fn.rating, { options: {
349
- cancel: 'Cancel Rating', // advisory title for the 'cancel' link
350
- cancelValue: '', // value to submit when user click the 'cancel' link
351
- split: 0, // split the star into how many parts?
352
-
353
- // Width of star image in case the plugin can't work it out. This can happen if
354
- // the jQuery.dimensions plugin is not available OR the image is hidden at installation
355
- starWidth: 16//,
356
-
357
- //NB.: These don't need to be pre-defined (can be undefined/null) so let's save some code!
358
- //half: false, // just a shortcut to control.split = 2
359
- //required: false, // disables the 'cancel' button so user can only select one of the specified values
360
- //readOnly: false, // disable rating plugin interaction/ values cannot be.one('change', //focus: function(){}, // executed when stars are focused
361
- //blur: function(){}, // executed when stars are focused
362
- //callback: function(){}, // executed when a star is clicked
363
- }; //} });
364
-
365
- /*--------------------------------------------------------*/
366
-
367
-
368
- // auto-initialize plugin
369
- $(function(){
370
- $('input[type=radio].ninja-forms-star').rating();
371
- });
372
-
373
-
374
- /*# AVOID COLLISIONS #*/
375
- })(jQuery);
376
- /*# AVOID COLLISIONS #*/
1
+ /*
2
+ ### jQuery Star Rating Plugin v4.11 - 2013-03-14 ###
3
+ * Home: http://www.fyneworks.com/jquery/star-rating/
4
+ * Code: http://code.google.com/p/jquery-star-rating-plugin/
5
+ *
6
+ * Licensed under http://en.wikipedia.org/wiki/MIT_License
7
+ ###
8
+ */
9
+
10
+ /*# AVOID COLLISIONS #*/
11
+ ;if(window.jQuery) (function($){
12
+ /*# AVOID COLLISIONS #*/
13
+
14
+ // IE6 Background Image Fix
15
+ if ((!$.support.opacity && !$.support.style)) try { document.execCommand("BackgroundImageCache", false, true)} catch(e) { };
16
+ // Thanks to http://www.visualjquery.com/rating/rating_redux.html
17
+
18
+ // plugin initialization
19
+ $.fn.rating = function(options){
20
+ if(this.length==0) return this; // quick fail
21
+
22
+ // Handle API methods
23
+ if(typeof arguments[0]=='string'){
24
+ // Perform API methods on individual elements
25
+ if(this.length>1){
26
+ var args = arguments;
27
+ return this.each(function(){
28
+ $.fn.rating.apply($(this), args);
29
+ });
30
+ };
31
+ // Invoke API method handler
32
+ $.fn.rating[arguments[0]].apply(this, $.makeArray(arguments).slice(1) || []);
33
+ // Quick exit...
34
+ return this;
35
+ };
36
+
37
+ // Initialize options for this call
38
+ var options = $.extend(
39
+ {}/* new object */,
40
+ $.fn.rating.options/* default options */,
41
+ options || {} /* just-in-time options */
42
+ );
43
+
44
+ // Allow multiple controls with the same name by making each call unique
45
+ $.fn.rating.calls++;
46
+
47
+ // loop through each matched element
48
+ this
49
+ .not('.ninja-forms-star-rating-applied')
50
+ .addClass('ninja-forms-star-rating-applied')
51
+ .each(function(){
52
+
53
+ // Load control parameters / find context / etc
54
+ var control, input = $(this);
55
+ var eid = (this.name || 'unnamed-rating').replace(/\[|\]/g, '_').replace(/^\_+|\_+$/g,'');
56
+ var context = $(this.form || document.body);
57
+
58
+ // FIX: http://code.google.com/p/jquery-star-rating-plugin/issues/detail?id=23
59
+ var raters = context.data('rating');
60
+ if(!raters || raters.call!=$.fn.rating.calls) raters = { count:0, call:$.fn.rating.calls };
61
+ var rater = raters[eid] || context.data('rating'+eid);
62
+
63
+ // if rater is available, verify that the control still exists
64
+ if(rater) control = rater.data('rating');
65
+
66
+ if(rater && control)//{// save a byte!
67
+ // add star to control if rater is available and the same control still exists
68
+ control.count++;
69
+
70
+ //}// save a byte!
71
+ else{
72
+ // create new control if first star or control element was removed/replaced
73
+
74
+ // Initialize options for this rater
75
+ control = $.extend(
76
+ {}/* new object */,
77
+ options || {} /* current call options */,
78
+ ($.metadata? input.metadata(): ($.meta?input.data():null)) || {}, /* metadata options */
79
+ { count:0, stars: [], inputs: [] }
80
+ );
81
+
82
+ // increment number of rating controls
83
+ control.serial = raters.count++;
84
+
85
+ // create rating element
86
+ rater = $('<span class="ninja-forms-star-rating-control"/>');
87
+ input.before(rater);
88
+
89
+ // Mark element for initialization (once all stars are ready)
90
+ rater.addClass('rating-to-be-drawn');
91
+
92
+ // Accept readOnly setting from 'disabled' property
93
+ if(input.attr('disabled') || input.hasClass('disabled')) control.readOnly = true;
94
+
95
+ // Accept required setting from class property (class='required')
96
+ if(input.hasClass('required')) control.required = true;
97
+
98
+ // Create 'cancel' button
99
+ rater.append(
100
+ control.cancel = $('<div class="rating-cancel"><a title="' + control.cancel + '">' + control.cancelValue + '</a></div>')
101
+ .on('mouseover',function(){
102
+ $(this).rating('drain');
103
+ $(this).addClass('ninja-forms-star-rating-hover');
104
+ //$(this).rating('focus');
105
+ })
106
+ .on('mouseout',function(){
107
+ $(this).rating('draw');
108
+ $(this).removeClass('ninja-forms-star-rating-hover');
109
+ //$(this).rating('blur');
110
+ })
111
+ .on('click',function(){
112
+ $(this).rating('select');
113
+ })
114
+ .data('rating', control)
115
+ );
116
+
117
+ }; // first element of group
118
+
119
+ // insert rating star (thanks Jan Fanslau rev125 for blind support https://code.google.com/p/jquery-star-rating-plugin/issues/detail?id=125)
120
+ var star = $('<div role="text" aria-label="'+ this.title +'" class="ninja-forms-star-rating rater-'+ control.serial +'"><a title="' + (this.title || this.value) + '">' + this.value + '</a></div>');
121
+ rater.append(star);
122
+
123
+ // inherit attributes from input element
124
+ if(this.id) star.attr('id', this.id);
125
+ if(this.className) star.addClass(this.className);
126
+
127
+ // Half-stars?
128
+ if(control.half) control.split = 2;
129
+
130
+ // Prepare division control
131
+ if(typeof control.split=='number' && control.split>0){
132
+ var stw = ($.fn.width ? star.width() : 0) || control.starWidth;
133
+ var spi = (control.count % control.split), spw = Math.floor(stw/control.split);
134
+ star
135
+ // restrict star's width and hide overflow (already in CSS)
136
+ .width(spw)
137
+ // move the star left by using a negative margin
138
+ // this is work-around to IE's stupid box model (position:relative doesn't work)
139
+ .find('a').css({ 'margin-left':'-'+ (spi*spw) +'px' })
140
+ };
141
+
142
+ // readOnly?
143
+ if(control.readOnly)//{ //save a byte!
144
+ // Mark star as readOnly so user can customize display
145
+ star.addClass('ninja-forms-star-rating-readonly');
146
+ //} //save a byte!
147
+ else//{ //save a byte!
148
+ // Enable hover css effects
149
+ star.addClass('ninja-forms-star-rating-live')
150
+ // Attach mouse events
151
+ .on('mouseover',function(){
152
+ $(this).rating('fill');
153
+ $(this).rating('focus');
154
+ })
155
+ .on('mouseout',function(){
156
+ $(this).rating('draw');
157
+ $(this).rating('blur');
158
+ })
159
+ .on('click',function(){
160
+ $(this).rating('select');
161
+ })
162
+ ;
163
+ //}; //save a byte!
164
+
165
+ // set current selection
166
+ if(this.checked) control.current = star;
167
+
168
+ // set current select for links
169
+ if(this.nodeName=="A"){
170
+ if($(this).hasClass('selected'))
171
+ control.current = star;
172
+ };
173
+
174
+ // hide input element
175
+ input.hide();
176
+
177
+ // backward compatibility, form element to plugin
178
+ input.on('change.rating',function(event){
179
+ if(event.selfTriggered) return false;
180
+ $(this).rating('select');
181
+ });
182
+
183
+ // attach reference to star to input element and vice-versa
184
+ star.data('rating.input', input.data('rating.star', star));
185
+
186
+ // store control information in form (or body when form not available)
187
+ control.stars[control.stars.length] = star[0];
188
+ control.inputs[control.inputs.length] = input[0];
189
+ control.rater = raters[eid] = rater;
190
+ control.context = context;
191
+
192
+ input.data('rating', control);
193
+ rater.data('rating', control);
194
+ star.data('rating', control);
195
+ context.data('rating', raters);
196
+ context.data('rating'+eid, rater); // required for ajax forms
197
+ }); // each element
198
+
199
+ // Initialize ratings (first draw)
200
+ $('.rating-to-be-drawn').rating('draw').removeClass('rating-to-be-drawn');
201
+
202
+ return this; // don't break the chain...
203
+ };
204
+
205
+ /*--------------------------------------------------------*/
206
+
207
+ /*
208
+ ### Core functionality and API ###
209
+ */
210
+ $.extend($.fn.rating, {
211
+ // Used to append a unique serial number to internal control ID
212
+ // each time the plugin is invoked so same name controls can co-exist
213
+ calls: 0,
214
+
215
+ focus: function(){
216
+ var control = this.data('rating'); if(!control) return this;
217
+ if(!control.focus) return this; // quick fail if not required
218
+ // find data for event
219
+ var input = $(this).data('rating.input') || $( this.tagName=='INPUT' ? this : null );
220
+ // focus handler, as requested by focusdigital.co.uk
221
+ if(control.focus) control.focus.apply(input[0], [input.val(), $('a', input.data('rating.star'))[0]]);
222
+ }, // $.fn.rating.focus
223
+
224
+ blur: function(){
225
+ var control = this.data('rating'); if(!control) return this;
226
+ if(!control.blur) return this; // quick fail if not required
227
+ // find data for event
228
+ var input = $(this).data('rating.input') || $( this.tagName=='INPUT' ? this : null );
229
+ // blur handler, as requested by focusdigital.co.uk
230
+ if(control.blur) control.blur.apply(input[0], [input.val(), $('a', input.data('rating.star'))[0]]);
231
+ }, // $.fn.rating.blur
232
+
233
+ fill: function(){ // fill to the current mouse position.
234
+ var control = this.data('rating'); if(!control) return this;
235
+ // do not execute when control is in read-only mode
236
+ if(control.readOnly) return;
237
+ // Reset all stars and highlight them up to this element
238
+ this.rating('drain');
239
+ this.prevAll().addBack().filter('.rater-'+ control.serial).addClass('ninja-forms-star-rating-hover');
240
+ },// $.fn.rating.fill
241
+
242
+ drain: function() { // drain all the stars.
243
+ var control = this.data('rating'); if(!control) return this;
244
+ // do not execute when control is in read-only mode
245
+ if(control.readOnly) return;
246
+ // Reset all stars
247
+ control.rater.children().filter('.rater-'+ control.serial).removeClass('ninja-forms-star-rating-on').removeClass('ninja-forms-star-rating-hover');
248
+ },// $.fn.rating.drain
249
+
250
+ draw: function(){ // set value and stars to reflect current selection
251
+ var control = this.data('rating'); if(!control) return this;
252
+ // Clear all stars
253
+ this.rating('drain');
254
+ // Set control value
255
+ var current = $( control.current );//? control.current.data('rating.input') : null );
256
+ var starson = current.length ? current.prevAll().addBack().filter('.rater-'+ control.serial) : null;
257
+ if(starson) starson.addClass('ninja-forms-star-rating-on');
258
+ // Show/hide 'cancel' button
259
+ control.cancel[control.readOnly || control.required?'hide':'show']();
260
+ // Add/remove read-only classes to remove hand pointer
261
+ this.siblings()[control.readOnly?'addClass':'removeClass']('ninja-forms-star-rating-readonly');
262
+ },// $.fn.rating.draw
263
+
264
+
265
+
266
+
267
+
268
+ select: function(value,wantCallBack){ // select a value
269
+ var control = this.data('rating'); if(!control) return this;
270
+ // do not execute when control is in read-only mode
271
+ if(control.readOnly) return;
272
+ // clear selection
273
+ control.current = null;
274
+ // programmatically (based on user input)
275
+ if(typeof value!='undefined' || this.length>1){
276
+ // select by index (0 based)
277
+ if(typeof value=='number')
278
+ return $(control.stars[value]).rating('select',undefined,wantCallBack);
279
+ // select by literal value (must be passed as a string
280
+ if(typeof value=='string'){
281
+ //return
282
+ $.each(control.stars, function(){
283
+ //console.log($(this).data('rating.input'), $(this).data('rating.input').val(), value, $(this).data('rating.input').val()==value?'BINGO!':'');
284
+ if($(this).data('rating.input').val()==value) $(this).rating('select',undefined,wantCallBack);
285
+ });
286
+ // don't break the chain
287
+ return this;
288
+ };
289
+ }
290
+ else{
291
+ control.current = this[0].tagName=='INPUT' ?
292
+ this.data('rating.star') :
293
+ (this.is('.rater-'+ control.serial) ? this : null);
294
+ };
295
+ // Update rating control state
296
+ this.data('rating', control);
297
+ // Update display
298
+ this.rating('draw');
299
+ // find current input and its sibblings
300
+ var current = $( control.current ? control.current.data('rating.input') : null );
301
+ var lastipt = $( control.inputs ).filter(':checked');
302
+ var deadipt = $( control.inputs ).not(current);
303
+ // check and uncheck elements as required
304
+ deadipt.prop('checked',false);//.removeAttr('checked');
305
+ current.prop('checked',true);//.attr('checked','checked');
306
+ // trigger change on current or last selected input
307
+ $(current.length? current : lastipt ).trigger({ type:'change', selfTriggered:true });
308
+ // click callback, as requested here: http://plugins.jquery.com/node/1655
309
+ if((wantCallBack || wantCallBack == undefined) && control.callback) control.callback.apply(current[0], [current.val(), $('a', control.current)[0]]);// callback event
310
+ // don't break the chain
311
+ return this;
312
+ },// $.fn.rating.select
313
+
314
+
315
+
316
+
317
+
318
+ readOnly: function(toggle, disable){ // make the control read-only (still submits value)
319
+ var control = this.data('rating'); if(!control) return this;
320
+ // setread-only status
321
+ control.readOnly = toggle || toggle==undefined ? true : false;
322
+ // enable/disable control value submission
323
+ if(disable) $(control.inputs).attr("disabled", "disabled");
324
+ else $(control.inputs).removeAttr("disabled");
325
+ // Update rating control state
326
+ this.data('rating', control);
327
+ // Update display
328
+ this.rating('draw');
329
+ },// $.fn.rating.readOnly
330
+
331
+ disable: function(){ // make read-only and never submit value
332
+ this.rating('readOnly', true, true);
333
+ },// $.fn.rating.disable
334
+
335
+ enable: function(){ // make read/write and submit value
336
+ this.rating('readOnly', false, false);
337
+ }// $.fn.rating.select
338
+
339
+ });
340
+
341
+ /*--------------------------------------------------------*/
342
+
343
+ /*
344
+ ### Default Settings ###
345
+ eg.: You can override default control like this:
346
+ $.fn.rating.options.cancel = 'Clear';
347
+ */
348
+ $.fn.rating.options = { //$.extend($.fn.rating, { options: {
349
+ cancel: 'Cancel Rating', // advisory title for the 'cancel' link
350
+ cancelValue: '', // value to submit when user click the 'cancel' link
351
+ split: 0, // split the star into how many parts?
352
+
353
+ // Width of star image in case the plugin can't work it out. This can happen if
354
+ // the jQuery.dimensions plugin is not available OR the image is hidden at installation
355
+ starWidth: 16//,
356
+
357
+ //NB.: These don't need to be pre-defined (can be undefined/null) so let's save some code!
358
+ //half: false, // just a shortcut to control.split = 2
359
+ //required: false, // disables the 'cancel' button so user can only select one of the specified values
360
+ //readOnly: false, // disable rating plugin interaction/ values cannot be.one('change', //focus: function(){}, // executed when stars are focused
361
+ //blur: function(){}, // executed when stars are focused
362
+ //callback: function(){}, // executed when a star is clicked
363
+ }; //} });
364
+
365
+ /*--------------------------------------------------------*/
366
+
367
+
368
+ // auto-initialize plugin
369
+ $(function(){
370
+ $('input[type=radio].ninja-forms-star').rating();
371
+ });
372
+
373
+
374
+ /*# AVOID COLLISIONS #*/
375
+ })(jQuery);
376
+ /*# AVOID COLLISIONS #*/
deprecated/ninja-forms.php CHANGED
@@ -265,7 +265,7 @@ class Ninja_Forms {
265
 
266
  // Plugin version
267
  if ( ! defined( 'NF_PLUGIN_VERSION' ) )
268
- define( 'NF_PLUGIN_VERSION', '3.3.19' );
269
 
270
  // Plugin Folder Path
271
  if ( ! defined( 'NF_PLUGIN_DIR' ) )
265
 
266
  // Plugin version
267
  if ( ! defined( 'NF_PLUGIN_VERSION' ) )
268
+ define( 'NF_PLUGIN_VERSION', '3.3.19.1' );
269
 
270
  // Plugin Folder Path
271
  if ( ! defined( 'NF_PLUGIN_DIR' ) )
includes/Abstracts/List.php CHANGED
File without changes
includes/Libraries/EOS/Parser.php CHANGED
File without changes
includes/Libraries/EOS/Stack.php CHANGED
File without changes
includes/Libraries/Session/class-recursive-arrayaccess.php CHANGED
File without changes
includes/Libraries/Session/class-wp-session.php CHANGED
File without changes
includes/Libraries/Session/wp-session.php CHANGED
File without changes
lib/StepProcessing/step-processing.php CHANGED
@@ -79,7 +79,9 @@ class NF_Step_Processing
79
  if ( isset ( $_REQUEST['args'] ) ) {
80
  $this->args = $_REQUEST['args'];
81
  if ( isset ( $this->args['redirect'] ) ) {
82
- $this->redirect = $this->args['redirect'];
 
 
83
  }
84
  } else {
85
  $this->args = array();
79
  if ( isset ( $_REQUEST['args'] ) ) {
80
  $this->args = $_REQUEST['args'];
81
  if ( isset ( $this->args['redirect'] ) ) {
82
+ if( wp_validate_redirect( $this->args['redirect'] ) ){
83
+ $this->redirect = wp_sanitize_redirect( $this->args['redirect'] );
84
+ }
85
  }
86
  } else {
87
  $this->args = array();
ninja-forms.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Ninja Forms
4
  Plugin URI: http://ninjaforms.com/
5
  Description: Ninja Forms is a webform builder with unparalleled ease of use and features.
6
- Version: 3.3.19
7
  Author: The WP Ninjas
8
  Author URI: http://ninjaforms.com
9
  Text Domain: ninja-forms
@@ -57,7 +57,7 @@ if( get_option( 'ninja_forms_load_deprecated', FALSE ) && ! ( isset( $_POST[ 'nf
57
  /**
58
  * @since 3.0
59
  */
60
- const VERSION = '3.3.19';
61
 
62
  const WP_MIN_VERSION = '4.7';
63
 
3
  Plugin Name: Ninja Forms
4
  Plugin URI: http://ninjaforms.com/
5
  Description: Ninja Forms is a webform builder with unparalleled ease of use and features.
6
+ Version: 3.3.19.1
7
  Author: The WP Ninjas
8
  Author URI: http://ninjaforms.com
9
  Text Domain: ninja-forms
57
  /**
58
  * @since 3.0
59
  */
60
+ const VERSION = '3.3.19.1';
61
 
62
  const WP_MIN_VERSION = '4.7';
63
 
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: wpninjasllc, kstover, jameslaws, kbjohnson90, klhall1987, krmoorho
3
  Tags: form, forms, contact form, custom form, form builder, form creator, form manager, form creation, contact forms, custom forms, forms builder, forms creator, forms manager, forms creation, form administration,
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
- Stable tag: 3.3.19
7
  License: GPLv2 or later
8
 
9
  Drag and drop fields in an intuitive UI to create contact forms, email subscription forms, order forms, payment forms, send emails and more!
@@ -111,18 +111,19 @@ For help and video tutorials, please visit our website: [Ninja Forms Documentati
111
 
112
  == Upgrade Notice ==
113
 
114
- = 3.3.19 (20 November 2018) =
115
 
116
- *Bugs:*
117
 
118
- * Placeholder text should now be visible in number fields that have a minimum value.
119
- * Corrected an error that was sometimes causing number fields to clear themselves when Multi-part Forms is active.
120
 
121
- *Changes:*
122
 
123
- * The rich text editor in the form builder should now wrap lines while in code view.
124
 
125
- == Changelog ==
 
 
126
 
127
  = 3.3.19 (20 November 2018) =
128
 
3
  Tags: form, forms, contact form, custom form, form builder, form creator, form manager, form creation, contact forms, custom forms, forms builder, forms creator, forms manager, forms creation, form administration,
4
  Requires at least: 4.7
5
  Tested up to: 4.9
6
+ Stable tag: 3.3.19.1
7
  License: GPLv2 or later
8
 
9
  Drag and drop fields in an intuitive UI to create contact forms, email subscription forms, order forms, payment forms, send emails and more!
111
 
112
  == Upgrade Notice ==
113
 
114
+ = 3.3.19.1 (29 November 2018) =
115
 
116
+ *Security:*
117
 
118
+ * Patched an open redirect vulnerability using a url parameter in our submission download page. Thank you to Muhammad Talha Khan for practicing responsible disclosure.
 
119
 
120
+ == Changelog ==
121
 
122
+ = 3.3.19.1 (29 November 2018) =
123
 
124
+ *Security:*
125
+
126
+ * Patched an open redirect vulnerability using a url parameter in our submission download page. Thank you to Muhammad Talha Khan for practicing responsible disclosure.
127
 
128
  = 3.3.19 (20 November 2018) =
129