Testimonials Widget - Version 2.12.4

Version Description

= 2.12.0 =

  • CSS and JavaScript renaming
    • bottom_text renamed to bottom-text
    • close_quote renamed to close-quote
    • display_none renamed to display-none
    • join_location renamed to join-location
    • join_title renamed to join-title
    • open_quote renamed to open-quote
    • testimonialswidget_testimonial renamed to testimonials-widget-testimonial
    • testimonialswidget_testimonials renamed to testimonials-widget-testimonials

= 2.11.3 =

  • Correct filter name testimonials_widget_next_posts_link to testimonials_widget_next_posts_link_text

= 2.11.0 =

  • CSS class names are simplified. For the most part, other than testimonialswidget_testimonial remove testimonialswidget_ from the CSS class name in your CSS customizations.
    • Ex: .testimonialswidget_join becomes .join
    • Ex: .testimonialswidget_author becomes .author
  • Testimonials are now formatted using blockquote than q for HTML5 compliance. If you need q tag formatting, enable it at WP Admin > Testimonials > Settings, Compatibility & Reset tab
    • cite is now div.credit

= 2.8.0 =

  • Deprecated
    • hide_author now hide_source
  • Removed filters testimonials_widget_options_update, testimonials_widget_options_form
    • Use testimonials_widget_validate_settings and testimonials_widget_settings instead
  • Renamed variable and related class widget_text to bottom_text

= 2.7.3 =

  • Quotes are no longer handled via q, p:before, or p:after CSS. It's handled via .testimonialswidget_testimonial .testimonialswidget_open_quote:before and .testimonialswidget_testimonial .testimonialswidget_close_quote:after
  • This change was made to keep consistency in how quotes were managed and to reduce the number of exception cases. In the end, this is simpler.

= 2.7.0 =

  • Quotes with keep_whitespace=true aren't applied via CSS .testimonialswidget_testimonial q tag anymore, but .testimonialswidget_testimonial q p:first-child:before and .testimonialswidget_testimonial q p:last-child:after
  • Widget testimonial p tags are no longer CSS display: inline, display: block as expected

= 2.4.1 =

  • Paging is on by default, except for widgets

= 2.0.0 =

  • CSS
    • Class testimonialswidget_company replaces testimonialswidget_source
    • Class testimonialswidget_source replaces testimonialswidget_author
    • The tighten widget display up, p tags within q are displayed inline.
  • JavaScript
    • The JavaScript for rotating testimonials is moved to the footer. As such, your theme requires wp_footer() in the footer.
  • Shortcode options
    • hide_source replaced by hide_url
    • hide_author replaced by hide_source
  • Testimonials
    • Migration from the old custom table to new custom post type is automatically done. Import might take a few moments to complete.
    • Company, URL and email details are attempted to be identified and placed properly based upon the original author and source fields. The company is "guessed" from the author field when there's a ", " or " of " context. If the source is an email, it's saved as such. Otherwise, it's assumed to be a URL.
    • Public testimonials are saved as Published. Non-public testimonials are marked as Private.
  • Widget options
    • "Show author" and "Show source" options are replaced by "Hide source" and "Hide URL" respectively. There's no backwards compatibility for these changes.
    • Default min-height is now 250px than 150px.
Download this release

Release Info

Developer comprock
Plugin Icon wp plugin Testimonials Widget
Version 2.12.4
Comparing to
See all releases

Code changes from version 2.12.2 to 2.12.4

changelog.txt CHANGED
@@ -4,6 +4,20 @@
4
 
5
  = trunk =
6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  = 2.12.2 =
8
  * $1 donation link admin_notice on installation or major/minor update
9
  * Add forum responses cheat sheet
@@ -639,7 +653,7 @@
639
  * TODO Updates
640
 
641
  = 2.2.5 =
642
- * Adapt for [Testimonials Widget Premium plugin](http://aihr.us/testimonials-widget-premium/)
643
  * Add support text
644
  * Correct verbiage spacing
645
  * Explain `limit`
4
 
5
  = trunk =
6
 
7
+ = 2.12.4 =
8
+ * BUGFIX Settings jQuery UI Tabs conflict
9
+ * NOT BUG [WPML bug](http://wordpress.org/support/topic/wpml-bug?replies=1)
10
+ * Remove settings.css
11
+ * Settings about section height fix
12
+ * TODOs update
13
+ * Update Premium product page URL
14
+ * Update WPML configuration
15
+ * Use PayPal donate image in settings
16
+
17
+ = 2.12.3 =
18
+ * BUGFIX Import option constantly overrides settings
19
+ * BUGFIX [Error When Database Does Not Exist Yet](http://wordpress.org/support/topic/error-when-database-does-not-exist-yet)
20
+
21
  = 2.12.2 =
22
  * $1 donation link admin_notice on installation or major/minor update
23
  * Add forum responses cheat sheet
653
  * TODO Updates
654
 
655
  = 2.2.5 =
656
+ * Adapt for [Testimonials Widget Premium plugin](http://aihr.us/downloads/testimonials-widget-premium-wordpress-plugin/)
657
  * Add support text
658
  * Correct verbiage spacing
659
  * Explain `limit`
languages/testimonials-widget.pot CHANGED
@@ -2,9 +2,9 @@
2
  # This file is distributed under the same license as the Testimonials Widget package.
3
  msgid ""
4
  msgstr ""
5
- "Project-Id-Version: Testimonials Widget 2.12.2\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/testimonials-widget\n"
7
- "POT-Creation-Date: 2013-05-06 03:50:04+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
@@ -44,8 +44,8 @@ msgstr ""
44
  msgid "Widget Title"
45
  msgstr ""
46
 
47
- #: lib/class-settings-testimonials-widget.php:86 testimonials-widget.php:487
48
- #: testimonials-widget.php:532
49
  msgid "Testimonials"
50
  msgstr ""
51
 
@@ -290,7 +290,7 @@ msgstr ""
290
  msgid "Author"
291
  msgstr ""
292
 
293
- #: lib/class-settings-testimonials-widget.php:330 testimonials-widget.php:473
294
  msgid "Date"
295
  msgstr ""
296
 
@@ -298,7 +298,7 @@ msgstr ""
298
  msgid "Menu Order"
299
  msgstr ""
300
 
301
- #: lib/class-settings-testimonials-widget.php:332 testimonials-widget.php:463
302
  msgid "Source"
303
  msgstr ""
304
 
@@ -320,28 +320,28 @@ msgstr ""
320
  msgid "None"
321
  msgstr ""
322
 
323
- #: lib/class-settings-testimonials-widget.php:346 testimonials-widget.php:465
324
- #: testimonials-widget.php:1497
325
  msgid "Title"
326
  msgstr ""
327
 
328
- #: lib/class-settings-testimonials-widget.php:347 testimonials-widget.php:467
329
- #: testimonials-widget.php:1509
330
  msgid "Email"
331
  msgstr ""
332
 
333
- #: lib/class-settings-testimonials-widget.php:348 testimonials-widget.php:466
334
- #: testimonials-widget.php:1503
335
  msgid "Location"
336
  msgstr ""
337
 
338
- #: lib/class-settings-testimonials-widget.php:349 testimonials-widget.php:468
339
- #: testimonials-widget.php:1515
340
  msgid "Company"
341
  msgstr ""
342
 
343
- #: lib/class-settings-testimonials-widget.php:350 testimonials-widget.php:469
344
- #: testimonials-widget.php:1521
345
  msgid "URL"
346
  msgstr ""
347
 
@@ -417,52 +417,60 @@ msgid ""
417
  msgstr ""
418
 
419
  #: lib/class-settings-testimonials-widget.php:449
420
- msgid "Import/Export Settings"
421
  msgstr ""
422
 
423
  #: lib/class-settings-testimonials-widget.php:451
424
  msgid ""
425
- "These are your current settings in a text format. Copy the textarea contents "
426
- "to make a backup of your settings. You can paste new settings here to "
427
- "overwrite your current configuration."
428
  msgstr ""
429
 
430
  #: lib/class-settings-testimonials-widget.php:459
 
 
 
 
 
 
 
 
 
431
  msgid "Remove Plugin Data on Deletion?"
432
  msgstr ""
433
 
434
- #: lib/class-settings-testimonials-widget.php:462
435
  msgid ""
436
  "Delete all Testimonials Widget data and options from database on plugin "
437
  "deletion"
438
  msgstr ""
439
 
440
- #: lib/class-settings-testimonials-widget.php:468
441
  msgid "Reset to Defaults?"
442
  msgstr ""
443
 
444
- #: lib/class-settings-testimonials-widget.php:471
445
  msgid "Check this box to reset options to their defaults"
446
  msgstr ""
447
 
448
- #: lib/class-settings-testimonials-widget.php:537
449
- #: lib/class-settings-testimonials-widget.php:574
450
  msgid "Testimonials Widget Settings"
451
  msgstr ""
452
 
453
- #: lib/class-settings-testimonials-widget.php:537 testimonials-widget.php:69
454
  msgid "Settings"
455
  msgstr ""
456
 
457
- #: lib/class-settings-testimonials-widget.php:593
458
  msgid "Save Changes"
459
  msgstr ""
460
 
461
- #: lib/class-settings-testimonials-widget.php:604
462
  msgid "Copyright ©%1$s %2$s."
463
  msgstr ""
464
 
465
- #: lib/class-settings-testimonials-widget.php:984
466
  msgid "Required"
467
  msgstr ""
468
 
@@ -470,7 +478,7 @@ msgstr ""
470
  msgid "Display testimonials with multiple selection and display options"
471
  msgstr ""
472
 
473
- #. #-#-#-#-# testimonials-widget.pot (Testimonials Widget 2.12.2) #-#-#-#-#
474
  #. Plugin Name of the plugin/theme
475
  #: lib/class-testimonials-widget-widget.php:37
476
  msgid "Testimonials Widget"
@@ -500,124 +508,124 @@ msgid ""
500
  "maintained %s"
501
  msgstr ""
502
 
503
- #: testimonials-widget.php:462
504
  msgid "Image"
505
  msgstr ""
506
 
507
- #: testimonials-widget.php:464
508
  msgid "Shortcodes"
509
  msgstr ""
510
 
511
- #: testimonials-widget.php:470
512
  msgid "Published by"
513
  msgstr ""
514
 
515
- #: testimonials-widget.php:471
516
  msgid "Category"
517
  msgstr ""
518
 
519
- #: testimonials-widget.php:472
520
  msgid "Tags"
521
  msgstr ""
522
 
523
- #: testimonials-widget.php:484
524
  msgid "Add New"
525
  msgstr ""
526
 
527
- #: testimonials-widget.php:485 testimonials-widget.php:488
528
  msgid "Add New Testimonial"
529
  msgstr ""
530
 
531
- #: testimonials-widget.php:486
532
  msgid "Edit Testimonial"
533
  msgstr ""
534
 
535
- #: testimonials-widget.php:489 testimonials-widget.php:786
536
  msgid "No testimonials found"
537
  msgstr ""
538
 
539
- #: testimonials-widget.php:490
540
  msgid "No testimonials found in Trash"
541
  msgstr ""
542
 
543
- #: testimonials-widget.php:492
544
  msgid "Search Testimonials"
545
  msgstr ""
546
 
547
- #: testimonials-widget.php:493
548
  msgid "Testimonial"
549
  msgstr ""
550
 
551
- #: testimonials-widget.php:494
552
  msgid "View Testimonial"
553
  msgstr ""
554
 
555
- #: testimonials-widget.php:904
556
  msgid "…"
557
  msgstr ""
558
 
559
- #: testimonials-widget.php:1229
560
  msgid "«"
561
  msgstr ""
562
 
563
- #: testimonials-widget.php:1238
564
  msgid "»"
565
  msgstr ""
566
 
567
- #: testimonials-widget.php:1533
568
  msgid "Testimonial Data"
569
  msgstr ""
570
 
571
- #: testimonials-widget.php:1558
572
  msgid "Enter title here"
573
  msgstr ""
574
 
575
- #: testimonials-widget.php:1559
576
  msgid "Enter testimonial source here"
577
  msgstr ""
578
 
579
- #: testimonials-widget.php:1584
580
  msgid "Testimonial updated. <a href=\"%s\">View testimonial</a>"
581
  msgstr ""
582
 
583
- #: testimonials-widget.php:1585
584
  msgid "Custom field updated."
585
  msgstr ""
586
 
587
- #: testimonials-widget.php:1586
588
  msgid "Custom field deleted."
589
  msgstr ""
590
 
591
- #: testimonials-widget.php:1587
592
  msgid "Testimonial updated."
593
  msgstr ""
594
 
595
  #. translators: %s: date and time of the revision
596
- #: testimonials-widget.php:1589
597
  msgid "Testimonial restored to revision from %s"
598
  msgstr ""
599
 
600
- #: testimonials-widget.php:1590
601
  msgid "Testimonial published. <a href=\"%s\">View testimonial</a>"
602
  msgstr ""
603
 
604
- #: testimonials-widget.php:1591
605
  msgid "Testimonial saved."
606
  msgstr ""
607
 
608
- #: testimonials-widget.php:1592
609
  msgid ""
610
  "Testimonial submitted. <a target=\"_blank\" href=\"%s\">Preview testimonial</"
611
  "a>"
612
  msgstr ""
613
 
614
- #: testimonials-widget.php:1593
615
  msgid ""
616
  "Testimonial scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href="
617
  "\"%2$s\">Preview testimonial</a>"
618
  msgstr ""
619
 
620
- #: testimonials-widget.php:1594
621
  msgid ""
622
  "Testimonial draft updated. <a target=\"_blank\" href=\"%s\">Preview "
623
  "testimonial</a>"
2
  # This file is distributed under the same license as the Testimonials Widget package.
3
  msgid ""
4
  msgstr ""
5
+ "Project-Id-Version: Testimonials Widget 2.12.4\n"
6
  "Report-Msgid-Bugs-To: http://wordpress.org/tag/testimonials-widget\n"
7
+ "POT-Creation-Date: 2013-05-12 08:31:12+00:00\n"
8
  "MIME-Version: 1.0\n"
9
  "Content-Type: text/plain; charset=UTF-8\n"
10
  "Content-Transfer-Encoding: 8bit\n"
44
  msgid "Widget Title"
45
  msgstr ""
46
 
47
+ #: lib/class-settings-testimonials-widget.php:86 testimonials-widget.php:491
48
+ #: testimonials-widget.php:536
49
  msgid "Testimonials"
50
  msgstr ""
51
 
290
  msgid "Author"
291
  msgstr ""
292
 
293
+ #: lib/class-settings-testimonials-widget.php:330 testimonials-widget.php:477
294
  msgid "Date"
295
  msgstr ""
296
 
298
  msgid "Menu Order"
299
  msgstr ""
300
 
301
+ #: lib/class-settings-testimonials-widget.php:332 testimonials-widget.php:467
302
  msgid "Source"
303
  msgstr ""
304
 
320
  msgid "None"
321
  msgstr ""
322
 
323
+ #: lib/class-settings-testimonials-widget.php:346 testimonials-widget.php:469
324
+ #: testimonials-widget.php:1501
325
  msgid "Title"
326
  msgstr ""
327
 
328
+ #: lib/class-settings-testimonials-widget.php:347 testimonials-widget.php:471
329
+ #: testimonials-widget.php:1513
330
  msgid "Email"
331
  msgstr ""
332
 
333
+ #: lib/class-settings-testimonials-widget.php:348 testimonials-widget.php:470
334
+ #: testimonials-widget.php:1507
335
  msgid "Location"
336
  msgstr ""
337
 
338
+ #: lib/class-settings-testimonials-widget.php:349 testimonials-widget.php:472
339
+ #: testimonials-widget.php:1519
340
  msgid "Company"
341
  msgstr ""
342
 
343
+ #: lib/class-settings-testimonials-widget.php:350 testimonials-widget.php:473
344
+ #: testimonials-widget.php:1525
345
  msgid "URL"
346
  msgstr ""
347
 
417
  msgstr ""
418
 
419
  #: lib/class-settings-testimonials-widget.php:449
420
+ msgid "Export Settings"
421
  msgstr ""
422
 
423
  #: lib/class-settings-testimonials-widget.php:451
424
  msgid ""
425
+ "These are your current settings in a serialized format. Copy the contents to "
426
+ "make a backup of your settings."
 
427
  msgstr ""
428
 
429
  #: lib/class-settings-testimonials-widget.php:459
430
+ msgid "Import Settings"
431
+ msgstr ""
432
+
433
+ #: lib/class-settings-testimonials-widget.php:461
434
+ msgid ""
435
+ "Paste new serialized settings here to overwrite your current configuration."
436
+ msgstr ""
437
+
438
+ #: lib/class-settings-testimonials-widget.php:467
439
  msgid "Remove Plugin Data on Deletion?"
440
  msgstr ""
441
 
442
+ #: lib/class-settings-testimonials-widget.php:470
443
  msgid ""
444
  "Delete all Testimonials Widget data and options from database on plugin "
445
  "deletion"
446
  msgstr ""
447
 
448
+ #: lib/class-settings-testimonials-widget.php:476
449
  msgid "Reset to Defaults?"
450
  msgstr ""
451
 
452
+ #: lib/class-settings-testimonials-widget.php:479
453
  msgid "Check this box to reset options to their defaults"
454
  msgstr ""
455
 
456
+ #: lib/class-settings-testimonials-widget.php:545
457
+ #: lib/class-settings-testimonials-widget.php:582
458
  msgid "Testimonials Widget Settings"
459
  msgstr ""
460
 
461
+ #: lib/class-settings-testimonials-widget.php:545 testimonials-widget.php:69
462
  msgid "Settings"
463
  msgstr ""
464
 
465
+ #: lib/class-settings-testimonials-widget.php:599
466
  msgid "Save Changes"
467
  msgstr ""
468
 
469
+ #: lib/class-settings-testimonials-widget.php:611
470
  msgid "Copyright &copy;%1$s %2$s."
471
  msgstr ""
472
 
473
+ #: lib/class-settings-testimonials-widget.php:974
474
  msgid "Required"
475
  msgstr ""
476
 
478
  msgid "Display testimonials with multiple selection and display options"
479
  msgstr ""
480
 
481
+ #. #-#-#-#-# testimonials-widget.pot (Testimonials Widget 2.12.4) #-#-#-#-#
482
  #. Plugin Name of the plugin/theme
483
  #: lib/class-testimonials-widget-widget.php:37
484
  msgid "Testimonials Widget"
508
  "maintained %s"
509
  msgstr ""
510
 
511
+ #: testimonials-widget.php:466
512
  msgid "Image"
513
  msgstr ""
514
 
515
+ #: testimonials-widget.php:468
516
  msgid "Shortcodes"
517
  msgstr ""
518
 
519
+ #: testimonials-widget.php:474
520
  msgid "Published by"
521
  msgstr ""
522
 
523
+ #: testimonials-widget.php:475
524
  msgid "Category"
525
  msgstr ""
526
 
527
+ #: testimonials-widget.php:476
528
  msgid "Tags"
529
  msgstr ""
530
 
531
+ #: testimonials-widget.php:488
532
  msgid "Add New"
533
  msgstr ""
534
 
535
+ #: testimonials-widget.php:489 testimonials-widget.php:492
536
  msgid "Add New Testimonial"
537
  msgstr ""
538
 
539
+ #: testimonials-widget.php:490
540
  msgid "Edit Testimonial"
541
  msgstr ""
542
 
543
+ #: testimonials-widget.php:493 testimonials-widget.php:790
544
  msgid "No testimonials found"
545
  msgstr ""
546
 
547
+ #: testimonials-widget.php:494
548
  msgid "No testimonials found in Trash"
549
  msgstr ""
550
 
551
+ #: testimonials-widget.php:496
552
  msgid "Search Testimonials"
553
  msgstr ""
554
 
555
+ #: testimonials-widget.php:497
556
  msgid "Testimonial"
557
  msgstr ""
558
 
559
+ #: testimonials-widget.php:498
560
  msgid "View Testimonial"
561
  msgstr ""
562
 
563
+ #: testimonials-widget.php:908
564
  msgid "…"
565
  msgstr ""
566
 
567
+ #: testimonials-widget.php:1233
568
  msgid "&laquo;"
569
  msgstr ""
570
 
571
+ #: testimonials-widget.php:1242
572
  msgid "&raquo;"
573
  msgstr ""
574
 
575
+ #: testimonials-widget.php:1537
576
  msgid "Testimonial Data"
577
  msgstr ""
578
 
579
+ #: testimonials-widget.php:1562
580
  msgid "Enter title here"
581
  msgstr ""
582
 
583
+ #: testimonials-widget.php:1563
584
  msgid "Enter testimonial source here"
585
  msgstr ""
586
 
587
+ #: testimonials-widget.php:1588
588
  msgid "Testimonial updated. <a href=\"%s\">View testimonial</a>"
589
  msgstr ""
590
 
591
+ #: testimonials-widget.php:1589
592
  msgid "Custom field updated."
593
  msgstr ""
594
 
595
+ #: testimonials-widget.php:1590
596
  msgid "Custom field deleted."
597
  msgstr ""
598
 
599
+ #: testimonials-widget.php:1591
600
  msgid "Testimonial updated."
601
  msgstr ""
602
 
603
  #. translators: %s: date and time of the revision
604
+ #: testimonials-widget.php:1593
605
  msgid "Testimonial restored to revision from %s"
606
  msgstr ""
607
 
608
+ #: testimonials-widget.php:1594
609
  msgid "Testimonial published. <a href=\"%s\">View testimonial</a>"
610
  msgstr ""
611
 
612
+ #: testimonials-widget.php:1595
613
  msgid "Testimonial saved."
614
  msgstr ""
615
 
616
+ #: testimonials-widget.php:1596
617
  msgid ""
618
  "Testimonial submitted. <a target=\"_blank\" href=\"%s\">Preview testimonial</"
619
  "a>"
620
  msgstr ""
621
 
622
+ #: testimonials-widget.php:1597
623
  msgid ""
624
  "Testimonial scheduled for: <strong>%1$s</strong>. <a target=\"_blank\" href="
625
  "\"%2$s\">Preview testimonial</a>"
626
  msgstr ""
627
 
628
+ #: testimonials-widget.php:1598
629
  msgid ""
630
  "Testimonial draft updated. <a target=\"_blank\" href=\"%s\">Preview "
631
  "testimonial</a>"
lib/class-settings-testimonials-widget.php CHANGED
@@ -441,19 +441,27 @@ class Testimonials_Widget_Settings {
441
 
442
  $options = get_option( self::ID );
443
  if ( ! empty( $options ) ) {
444
- $serialized_options = serialize( $options );
445
- $_SESSION['importexport'] = $serialized_options;
446
 
447
- self::$settings['importexport'] = array(
448
  'section' => 'reset',
449
- 'title' => __( 'Import/Export Settings', 'testimonials-widget' ),
450
- 'type' => 'textarea',
451
- 'desc' => __( 'These are your current settings in a text format. Copy the textarea contents to make a backup of your settings. You can paste new settings here to overwrite your current configuration.', 'testimonials-widget' ),
452
  'std' => $serialized_options,
453
  'widget' => 0,
454
  );
455
  }
456
 
 
 
 
 
 
 
 
 
457
  self::$settings['delete_data'] = array(
458
  'section' => 'reset',
459
  'title' => __( 'Remove Plugin Data on Deletion?', 'testimonials-widget' ),
@@ -577,33 +585,32 @@ class Testimonials_Widget_Settings {
577
 
578
  settings_fields( self::ID );
579
 
580
- echo '<div class="ui-tabs">
581
- <ul class="ui-tabs-nav">';
582
 
583
  foreach ( self::$sections as $section_slug => $section )
584
  echo '<li><a href="#' . $section_slug . '">' . $section . '</a></li>';
585
 
586
  echo '</ul>';
587
 
588
- do_settings_sections( self::ID );
589
-
590
- echo '</div>';
591
 
592
  echo '
593
  <p class="submit"><input name="Submit" type="submit" class="button-primary" value="' . __( 'Save Changes', 'testimonials-widget' ) . '" /></p>
594
  </form>
595
- ';
 
596
 
597
  echo '
598
  <p>When ready, <a href="'.get_admin_url().'edit.php?post_type=testimonials-widget">view</a>
599
  or <a href="'.get_admin_url().'post-new.php?post_type=testimonials-widget">add</a> testimonials.</p>
600
 
601
- <p>If you like this plugin, <a href="http://aihr.us/about-aihrus/donate/" title="Donate for Good Karma">please donate</a> or <a href="http://aihr.us/testimonials-widget-premium/" title="purchase Testimonials Widget Premium">purchase Testimonials Widget Premium</a> to help fund further development and <a href="http://wordpress.org/support/plugin/testimonials-widget" title="Support forums">support</a>.</p>
602
  ';
603
 
604
  $text = __( 'Copyright &copy;%1$s %2$s.', 'testimonials-widget' );
605
  $link = '<a href="http://aihr.us">Aihrus</a>';
606
- $copyright = '<div class="copyright">' . sprintf( $text, date( 'Y' ), $link ) . '</div>';
607
  echo $copyright;
608
 
609
  self::section_scripts();
@@ -613,59 +620,40 @@ class Testimonials_Widget_Settings {
613
 
614
 
615
  public static function section_scripts() {
616
- echo '<script type="text/javascript">
617
- jQuery(document).ready(function($) {
618
- var sections = [];';
619
-
620
- foreach ( self::$sections as $section_slug => $section )
621
- echo "sections['$section'] = '$section_slug';";
622
-
623
- echo 'var wrapped = $(".wrap h3").wrap("<div class=\"ui-tabs-panel\">");
624
- wrapped.each(function() {
625
- $(this).parent().append($(this).parent().nextUntil("div.ui-tabs-panel"));
626
- });
627
- $(".ui-tabs-panel").each(function(index) {
628
- $(this).attr("id", sections[$(this).children("h3").text()]);
629
- if (index > 0)
630
- $(this).addClass("ui-tabs-hide");
631
- });
632
- $(".ui-tabs").tabs({
633
- fx: { opacity: "toggle", duration: "fast" }
634
  });
 
 
 
635
 
636
- $("input[type=text], textarea").each(function() {
637
- if ($(this).val() == $(this).attr("placeholder") || $(this).val() == "")
638
- $(this).css("color", "#999");
639
- });
640
 
641
- $("input[type=text], textarea").focus(function() {
642
- if ($(this).val() == $(this).attr("placeholder") || $(this).val() == "") {
643
- $(this).val("");
644
- $(this).css("color", "#000");
645
- }
646
- }).blur(function() {
647
- if ($(this).val() == "" || $(this).val() == $(this).attr("placeholder")) {
648
- $(this).val($(this).attr("placeholder"));
649
- $(this).css("color", "#999");
650
- }
651
- });
652
 
653
- $(".wrap h3, .wrap table").show();
 
654
 
655
- // This will make the "warning" checkbox class really stand out when checked.
656
- // I use it here for the Reset checkbox.
657
- $(".warning").change(function() {
658
- if ($(this).is(":checked"))
659
- $(this).parent().css("background", "#c00").css("color", "#fff").css("fontWeight", "bold");
660
- else
661
- $(this).parent().css("background", "none").css("color", "inherit").css("fontWeight", "normal");
662
- });
663
 
664
- // Browser compatibility
665
- if ($.browser.mozilla)
666
- $("form").attr("autocomplete", "off");
667
- });
668
- </script>';
 
 
669
  }
670
 
671
 
@@ -677,7 +665,7 @@ class Testimonials_Widget_Settings {
677
  public function display_about_section() {
678
 
679
  echo <<<EOD
680
- <div style="width: 70%;">
681
  <p><img class="alignright size-medium" title="Michael in Red Square, Moscow, Russia" src="/wp-content/plugins/testimonials-widget/media/michael-cannon-red-square-300x2251.jpg" alt="Michael in Red Square, Moscow, Russia" width="300" height="225" /><a href="http://wordpress.org/extend/plugins/testimonials-widget/">Testimonials Widget</a> is by <a href="http://aihr.us/about-aihrus/michael-cannon-resume/">Michael Cannon</a>. He's <a title="Lot's of stuff about Peichi Liu…" href="http://peimic.com/t/peichi-liu/">Peichi’s</a> smiling man, an adventurous <a title="Water rat" href="http://www.chinesehoroscope.org/chinese_zodiac/rat/" target="_blank">water-rat</a>, <a title="Axelerant – Open Source. Engineered." href="http://axelerant.com/who-we-are">chief people officer</a>, <a title="Aihrus – website support made easy since 1999" href="http://aihr.us/about-aihrus/">chief technology officer</a>, <a title="Road biker, cyclist, biking; whatever you call, I love to ride" href="http://peimic.com/c/biking/">cyclist</a>, <a title="Michael's poetic like literary ramblings" href="http://peimic.com/t/poetry/">poet</a>, <a title="World Wide Opportunities on Organic Farms" href="http://peimic.com/t/WWOOF/">WWOOF’er</a> and <a title="My traveled to country list, is more than my age." href="http://peimic.com/c/travel/">world traveler</a>.</p>
682
  </div>
683
  EOD;
@@ -837,13 +825,12 @@ EOD;
837
 
838
 
839
  public function scripts() {
840
- wp_print_scripts( 'jquery-ui-tabs' );
841
  }
842
 
843
 
844
  public function styles() {
845
- wp_register_style( __CLASS__ . '-admin', plugins_url( 'settings.css', __FILE__ ) );
846
- wp_enqueue_style( __CLASS__ . '-admin' );
847
  }
848
 
849
 
@@ -868,9 +855,9 @@ EOD;
868
  unset( $input['reset_defaults'] );
869
  }
870
 
871
- if ( ! empty( $input['importexport'] ) && $_SESSION['importexport'] != $input['importexport'] ) {
872
- $importexport = $input['importexport'];
873
- $unserialized = unserialize( $importexport );
874
  if ( is_array( $unserialized ) ) {
875
  foreach ( $unserialized as $id => $std )
876
  $input[$id] = $std;
@@ -932,9 +919,12 @@ EOD;
932
  flush_rewrite_rules();
933
  }
934
 
935
- $input['version'] = self::$version;
936
- $input = apply_filters( 'testimonials_widget_validate_settings', $input, $errors );
937
- unset( $input['importexport'] );
 
 
 
938
 
939
  if ( empty( $do_errors ) ) {
940
  $validated = $input;
441
 
442
  $options = get_option( self::ID );
443
  if ( ! empty( $options ) ) {
444
+ $serialized_options = serialize( $options );
445
+ $_SESSION['export'] = $serialized_options;
446
 
447
+ self::$settings['export'] = array(
448
  'section' => 'reset',
449
+ 'title' => __( 'Export Settings', 'testimonials-widget' ),
450
+ 'type' => 'readonly',
451
+ 'desc' => __( 'These are your current settings in a serialized format. Copy the contents to make a backup of your settings.', 'testimonials-widget' ),
452
  'std' => $serialized_options,
453
  'widget' => 0,
454
  );
455
  }
456
 
457
+ self::$settings['import'] = array(
458
+ 'section' => 'reset',
459
+ 'title' => __( 'Import Settings', 'testimonials-widget' ),
460
+ 'type' => 'textarea',
461
+ 'desc' => __( 'Paste new serialized settings here to overwrite your current configuration.', 'testimonials-widget' ),
462
+ 'widget' => 0,
463
+ );
464
+
465
  self::$settings['delete_data'] = array(
466
  'section' => 'reset',
467
  'title' => __( 'Remove Plugin Data on Deletion?', 'testimonials-widget' ),
585
 
586
  settings_fields( self::ID );
587
 
588
+ echo '<div id="' . self::ID . '">
589
+ <ul>';
590
 
591
  foreach ( self::$sections as $section_slug => $section )
592
  echo '<li><a href="#' . $section_slug . '">' . $section . '</a></li>';
593
 
594
  echo '</ul>';
595
 
596
+ self::do_settings_sections( self::ID );
 
 
597
 
598
  echo '
599
  <p class="submit"><input name="Submit" type="submit" class="button-primary" value="' . __( 'Save Changes', 'testimonials-widget' ) . '" /></p>
600
  </form>
601
+ </div>
602
+ ';
603
 
604
  echo '
605
  <p>When ready, <a href="'.get_admin_url().'edit.php?post_type=testimonials-widget">view</a>
606
  or <a href="'.get_admin_url().'post-new.php?post_type=testimonials-widget">add</a> testimonials.</p>
607
 
608
+ <p>If you like this plugin, please <a href="http://aihr.us/about-aihrus/donate/" title="Donate for Good Karma"><img src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" border="0" alt="Donate for Good Karma" /></a> or <a href="http://aihr.us/downloads/testimonials-widget-premium-wordpress-plugin/" title="purchase Testimonials Widget Premium">purchase Testimonials Widget Premium</a> to help fund further development and <a href="http://wordpress.org/support/plugin/testimonials-widget" title="Support forums">support</a>.</p>
609
  ';
610
 
611
  $text = __( 'Copyright &copy;%1$s %2$s.', 'testimonials-widget' );
612
  $link = '<a href="http://aihr.us">Aihrus</a>';
613
+ $copyright = '<p class="copyright">' . sprintf( $text, date( 'Y' ), $link ) . '</p>';
614
  echo $copyright;
615
 
616
  self::section_scripts();
620
 
621
 
622
  public static function section_scripts() {
623
+ echo '
624
+ <script type="text/javascript">
625
+ jQuery(document).ready(function($) {
626
+ $( "#' . self::ID . '" ).tabs();
627
+ // This will make the "warning" checkbox class really stand out when checked.
628
+ $(".warning").change(function() {
629
+ if ($(this).is(":checked"))
630
+ $(this).parent().css("background", "#c00").css("color", "#fff").css("fontWeight", "bold");
631
+ else
632
+ $(this).parent().css("background", "inherit").css("color", "inherit").css("fontWeight", "inherit");
633
+ });
 
 
 
 
 
 
 
634
  });
635
+ </script>
636
+ ';
637
+ }
638
 
 
 
 
 
639
 
640
+ public static function do_settings_sections( $page ) {
641
+ global $wp_settings_sections, $wp_settings_fields;
 
 
 
 
 
 
 
 
 
642
 
643
+ if ( ! isset( $wp_settings_sections ) || !isset( $wp_settings_sections[$page] ) )
644
+ return;
645
 
646
+ foreach ( (array) $wp_settings_sections[$page] as $section ) {
647
+ if ( $section['callback'] )
648
+ call_user_func( $section['callback'], $section );
 
 
 
 
 
649
 
650
+ if ( ! isset( $wp_settings_fields ) || !isset( $wp_settings_fields[$page] ) || !isset( $wp_settings_fields[$page][$section['id']] ) )
651
+ continue;
652
+
653
+ echo '<table id=' . $section['id'] . ' class="form-table">';
654
+ do_settings_fields( $page, $section['id'] );
655
+ echo '</table>';
656
+ }
657
  }
658
 
659
 
665
  public function display_about_section() {
666
 
667
  echo <<<EOD
668
+ <div id="about" style="width: 70%; min-height: 225px;">
669
  <p><img class="alignright size-medium" title="Michael in Red Square, Moscow, Russia" src="/wp-content/plugins/testimonials-widget/media/michael-cannon-red-square-300x2251.jpg" alt="Michael in Red Square, Moscow, Russia" width="300" height="225" /><a href="http://wordpress.org/extend/plugins/testimonials-widget/">Testimonials Widget</a> is by <a href="http://aihr.us/about-aihrus/michael-cannon-resume/">Michael Cannon</a>. He's <a title="Lot's of stuff about Peichi Liu…" href="http://peimic.com/t/peichi-liu/">Peichi’s</a> smiling man, an adventurous <a title="Water rat" href="http://www.chinesehoroscope.org/chinese_zodiac/rat/" target="_blank">water-rat</a>, <a title="Axelerant – Open Source. Engineered." href="http://axelerant.com/who-we-are">chief people officer</a>, <a title="Aihrus – website support made easy since 1999" href="http://aihr.us/about-aihrus/">chief technology officer</a>, <a title="Road biker, cyclist, biking; whatever you call, I love to ride" href="http://peimic.com/c/biking/">cyclist</a>, <a title="Michael's poetic like literary ramblings" href="http://peimic.com/t/poetry/">poet</a>, <a title="World Wide Opportunities on Organic Farms" href="http://peimic.com/t/WWOOF/">WWOOF’er</a> and <a title="My traveled to country list, is more than my age." href="http://peimic.com/c/travel/">world traveler</a>.</p>
670
  </div>
671
  EOD;
825
 
826
 
827
  public function scripts() {
828
+ wp_enqueue_script( 'jquery-ui-tabs' );
829
  }
830
 
831
 
832
  public function styles() {
833
+ wp_enqueue_style( 'jquery-style', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/themes/smoothness/jquery-ui.css' );
 
834
  }
835
 
836
 
855
  unset( $input['reset_defaults'] );
856
  }
857
 
858
+ if ( ! empty( $input['import'] ) && $_SESSION['export'] != $input['import'] ) {
859
+ $import = $input['import'];
860
+ $unserialized = unserialize( $import );
861
  if ( is_array( $unserialized ) ) {
862
  foreach ( $unserialized as $id => $std )
863
  $input[$id] = $std;
919
  flush_rewrite_rules();
920
  }
921
 
922
+ $input['version'] = self::$version;
923
+ $input['donate_version'] = Testimonials_Widget::VERSION;
924
+ $input = apply_filters( 'testimonials_widget_validate_settings', $input, $errors );
925
+
926
+ unset( $input['export'] );
927
+ unset( $input['import'] );
928
 
929
  if ( empty( $do_errors ) ) {
930
  $validated = $input;
lib/settings.css DELETED
@@ -1,76 +0,0 @@
1
- .ui-tabs-nav {
2
- border-bottom: 1px solid #ccc;
3
- height: 27px;
4
- margin: 20px 0;
5
- padding: 0;
6
- }
7
-
8
- .ui-tabs-nav li {
9
- display: block;
10
- float: left;
11
- margin: 0;
12
- }
13
-
14
- .ui-tabs-nav li a {
15
- padding: 4px 20px 6px;
16
- font-weight: bold;
17
- }
18
-
19
- .ui-tabs-nav li a {
20
- border-style: solid;
21
- border-color: #CCC #CCC #F9F9F9;
22
- border-width: 1px 1px 0;
23
- color: #C1C1C1;
24
- text-shadow: rgba(255, 255, 255, 1) 0 1px 0;
25
- display: inline-block;
26
- padding: 4px 14px 6px;
27
- text-decoration: none;
28
- margin: 0 6px -1px 0;
29
- -moz-border-radius: 5px 5px 0 0;
30
- -webkit-border-top-left-radius: 5px;
31
- -webkit-border-top-right-radius: 5px;
32
- -khtml-border-top-left-radius: 5px;
33
- -khtml-border-top-right-radius: 5px;
34
- border-top-left-radius: 5px;
35
- border-top-right-radius: 5px;
36
- }
37
-
38
- .ui-tabs-nav li.ui-tabs-selected a,
39
- .ui-tabs-nav li.ui-state-active a {
40
- border-width: 1px;
41
- color: #464646;
42
- }
43
-
44
- .ui-tabs-panel {
45
- clear: both;
46
- }
47
-
48
- .ui-tabs-panel h3 {
49
- font: italic normal normal 24px/29px Georgia,"Times New Roman","Bitstream Charter",Times,serif;
50
- margin: 0;
51
- padding: 0 0 5px;
52
- line-height: 35px;
53
- text-shadow: 0 1px 0 #fff;
54
- }
55
-
56
- .ui-tabs-panel h4 {
57
- font-size: 15px;
58
- font-weight: bold;
59
- margin: 1em 0;
60
- }
61
-
62
- .wrap h3, .wrap table {
63
- display: none;
64
- }
65
- div.ready {
66
- font-weight: bold;
67
- clear: both;
68
- padding-top: 1em;
69
- }
70
- p.submit {
71
- padding-bottom: 2em;
72
- }
73
- div.copyright {
74
- clear: both;
75
- padding-top: 1em;
76
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -5,7 +5,7 @@ Donate link: http://aihr.us/about-aihrus/donate/
5
  Tags: client, customer, quotations, quote, quotes, random, review, quote, recommendation, reference, testimonial, testimonials, testimony, widget, wpml
6
  Requires at least: 3.4
7
  Tested up to: 3.6.0
8
- Stable tag: 2.12.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -40,7 +40,7 @@ The single testimonial view supports image, source, title, location, email, comp
40
 
41
  = Testimonials Widget Premium Plugin Features =
42
 
43
- Testimonials Widget Premium plugin extends the best [Testimonials Widget](http://wordpress.org/extend/plugins/testimonials-widget/) plugin for WordPress with [caching, excerpts, filters, read more links](http://aihr.us/testimonials-widget-premium/), more selection options, and advanced capabilities like selecting posts, pages and other custom post types as testimonials. Additionally, users can add testimonials via a front-end form shortcode or widget.
44
 
45
  * "Read more" link column on testimonial posts admin page
46
  * Alternate destinations for "Read more" links
@@ -71,7 +71,7 @@ Testimonials Widget Premium plugin extends the best [Testimonials Widget](http:/
71
  * Shortcodes, theme functions, and widget user testimonial submission form
72
  * WPML compatible
73
 
74
- [Buy Testimonials Widget Premium](http://aihr.us/testimonials-widget-premium/) plugin for WordPress.
75
 
76
  = Additional Features =
77
 
@@ -220,7 +220,8 @@ Further, global settings are the baseline for shortcodes. If you want to alter t
220
  * Use `<q>` tag? – Pre 2.11.0. Not HTML5 compliant
221
  * `use_quote_tag` - default none; use_quote_tag=true
222
  * Don't Use Default Taxonomies? – If checked, use Testimonials Widget's own category and tag taxonomies instead
223
- * Import/Export Settings – These are your current settings in a text format. Copy the textarea contents to make a backup of your settings. You can paste new settings here to overwrite your current configuration.
 
224
  * Remove Plugin Data on Deletion? - Delete all Testimonials Widget data and options from database on plugin deletion
225
  * Reset to Defaults? – Check this box to reset options to their defaults
226
 
5
  Tags: client, customer, quotations, quote, quotes, random, review, quote, recommendation, reference, testimonial, testimonials, testimony, widget, wpml
6
  Requires at least: 3.4
7
  Tested up to: 3.6.0
8
+ Stable tag: 2.12.4
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
40
 
41
  = Testimonials Widget Premium Plugin Features =
42
 
43
+ Testimonials Widget Premium plugin extends the best [Testimonials Widget](http://wordpress.org/extend/plugins/testimonials-widget/) plugin for WordPress with [caching, excerpts, filters, read more links](http://aihr.us/downloads/testimonials-widget-premium-wordpress-plugin/), more selection options, and advanced capabilities like selecting posts, pages and other custom post types as testimonials. Additionally, users can add testimonials via a front-end form shortcode or widget.
44
 
45
  * "Read more" link column on testimonial posts admin page
46
  * Alternate destinations for "Read more" links
71
  * Shortcodes, theme functions, and widget user testimonial submission form
72
  * WPML compatible
73
 
74
+ [Buy Testimonials Widget Premium](http://aihr.us/downloads/testimonials-widget-premium-wordpress-plugin/) plugin for WordPress.
75
 
76
  = Additional Features =
77
 
220
  * Use `<q>` tag? – Pre 2.11.0. Not HTML5 compliant
221
  * `use_quote_tag` - default none; use_quote_tag=true
222
  * Don't Use Default Taxonomies? – If checked, use Testimonials Widget's own category and tag taxonomies instead
223
+ * Export Settings – These are your current settings in a serialized format. Copy the contents to make a backup of your settings.
224
+ * Import Settings – Paste new serialized settings here to overwrite your current configuration.
225
  * Remove Plugin Data on Deletion? - Delete all Testimonials Widget data and options from database on plugin deletion
226
  * Reset to Defaults? – Check this box to reset options to their defaults
227
 
testimonials-widget.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Testimonials Widget
4
  * Plugin URI: http://wordpress.org/extend/plugins/testimonials-widget/
5
  * Description: Testimonials Widget plugin allows you to display random or selected portfolio, quotes, reviews, showcases, or text with images on your WordPress blog.
6
- * Version: 2.12.2
7
  * Author: Michael Cannon
8
  * Author URI: http://aihr.us/about-aihrus/michael-cannon-resume/
9
  * License: GPLv2 or later
@@ -31,7 +31,7 @@ class Testimonials_Widget {
31
  const OLD_NAME = 'testimonialswidget';
32
  const PLUGIN_FILE = 'testimonials-widget/testimonials-widget.php';
33
  const PT = 'testimonials-widget';
34
- const VERSION = '2.12.2';
35
 
36
  private static $base = null;
37
  private static $max_num_pages = 0;
@@ -256,7 +256,7 @@ EOD;
256
 
257
  $links = array(
258
  '<a href="http://aihr.us/about-aihrus/donate/">Donate</a>',
259
- '<a href="http://aihr.us/testimonials-widget-premium/">Purchase Testimonials Widget Premium</a>',
260
  );
261
 
262
  $input = array_merge( $input, $links );
@@ -310,79 +310,83 @@ EOD;
310
  public function migrate() {
311
  global $wpdb;
312
 
313
- $table_name = $wpdb->prefix . self::OLD_NAME;
314
- $meta_key = '_' . self::PT . ':testimonial_id';
 
 
315
 
316
- // check that db table exists and has entries
317
- $query = 'SELECT `testimonial_id`, `testimonial`, `author`, `source`, `tags`, `public`, `time_added`, `time_updated` FROM `' . $table_name . '`';
 
318
 
319
- // ignore already imported
320
- $done_import_query = 'SELECT meta_value FROM ' . $wpdb->postmeta . ' WHERE meta_key = "' . $meta_key . '"';
321
- $done_import = $wpdb->get_col( $done_import_query );
322
 
323
- if ( ! empty( $done_import ) ) {
324
- $done_import = array_unique( $done_import );
325
- $query .= ' WHERE testimonial_id NOT IN ( ' . implode( ',', $done_import ) . ' )';
326
- }
327
-
328
- $results = $wpdb->get_results( $query );
329
- if ( ! empty( $results ) ) {
330
- foreach ( $results as $result ) {
331
- // author can contain title and company details
332
- $author = $result->author;
333
- $company = false;
334
-
335
- // ex: First Last of Company!
336
- $author = str_replace( ' of ', ', ', $author );
337
- // now ex: First Last, Company!
338
-
339
- // ex: First Last, Company
340
- // ex: First Last, Web Development Manager, Topcon Positioning Systems, Inc.
341
- // ex: First Last, Owner, Company, LLC
342
- $author = str_replace( ' of ', ', ', $author );
343
- $temp_comma = '^^^';
344
- $author = str_replace( ', LLC', $temp_comma . ' LLC', $author );
345
-
346
- // now ex: First Last, Owner, Company^^^ LLC
347
- $author = str_replace( ', Inc', $temp_comma . ' Inc', $author );
348
-
349
- // ex: First Last, Web Development Manager, Company^^^ Inc.
350
- // it's possible to have "Michael Cannon, Senior Developer" and "Senior Developer" become the company. Okay for now
351
- $author = explode( ', ', $author );
352
-
353
- if ( 1 < count( $author ) ) {
354
- $company = array_pop( $author );
355
- $company = str_replace( $temp_comma, ',', $company );
356
- }
357
 
358
- $author = implode( ', ', $author );
359
- $author = str_replace( $temp_comma, ',', $author );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
360
 
361
- $post_data = array(
362
- 'post_type' => self::PT,
363
- 'post_status' => ( 'yes' == $result->public ) ? 'publish' : 'private',
364
- 'post_date' => $result->time_added,
365
- 'post_modified' => $result->time_updated,
366
- 'post_title' => $author,
367
- 'post_content' => $result->testimonial,
368
- 'tags_input' => $result->tags,
369
- );
 
 
 
370
 
371
- $post_id = wp_insert_post( $post_data, true );
372
 
373
- // track/link testimonial import to new post
374
- add_post_meta( $post_id, $meta_key, $result->testimonial_id );
375
 
376
- if ( ! empty( $company ) ) {
377
- add_post_meta( $post_id, 'testimonials-widget-company', $company );
378
- }
379
 
380
- $source = $result->source;
381
- if ( ! empty( $source ) ) {
382
- if ( is_email( $source ) ) {
383
- add_post_meta( $post_id, 'testimonials-widget-email', $source );
384
- } else {
385
- add_post_meta( $post_id, 'testimonials-widget-url', $source );
 
386
  }
387
  }
388
  }
@@ -390,7 +394,7 @@ EOD;
390
 
391
  $options['migrated'] = true;
392
  delete_option( self::OLD_NAME );
393
- add_option( self::OLD_NAME, $options, null, 'no' );
394
  }
395
 
396
 
3
  * Plugin Name: Testimonials Widget
4
  * Plugin URI: http://wordpress.org/extend/plugins/testimonials-widget/
5
  * Description: Testimonials Widget plugin allows you to display random or selected portfolio, quotes, reviews, showcases, or text with images on your WordPress blog.
6
+ * Version: 2.12.4
7
  * Author: Michael Cannon
8
  * Author URI: http://aihr.us/about-aihrus/michael-cannon-resume/
9
  * License: GPLv2 or later
31
  const OLD_NAME = 'testimonialswidget';
32
  const PLUGIN_FILE = 'testimonials-widget/testimonials-widget.php';
33
  const PT = 'testimonials-widget';
34
+ const VERSION = '2.12.4';
35
 
36
  private static $base = null;
37
  private static $max_num_pages = 0;
256
 
257
  $links = array(
258
  '<a href="http://aihr.us/about-aihrus/donate/">Donate</a>',
259
+ '<a href="http://aihr.us/downloads/testimonials-widget-premium-wordpress-plugin/">Purchase Testimonials Widget Premium</a>',
260
  );
261
 
262
  $input = array_merge( $input, $links );
310
  public function migrate() {
311
  global $wpdb;
312
 
313
+ $table_name = $wpdb->prefix . self::OLD_NAME;
314
+ $meta_key = '_' . self::PT . ':testimonial_id';
315
+ $has_table_query = "SELECT table_name FROM information_schema.tables WHERE table_schema='{$wpdb->dbname}' AND table_name='{$table_name}'";
316
+ $has_table_result = $wpdb->get_col( $has_table_query );
317
 
318
+ if ( ! empty( $has_table_result ) ) {
319
+ // check that db table exists and has entries
320
+ $query = 'SELECT `testimonial_id`, `testimonial`, `author`, `source`, `tags`, `public`, `time_added`, `time_updated` FROM `' . $table_name . '`';
321
 
322
+ // ignore already imported
323
+ $done_import_query = 'SELECT meta_value FROM ' . $wpdb->postmeta . ' WHERE meta_key = "' . $meta_key . '"';
324
+ $done_import = $wpdb->get_col( $done_import_query );
325
 
326
+ if ( ! empty( $done_import ) ) {
327
+ $done_import = array_unique( $done_import );
328
+ $query .= ' WHERE testimonial_id NOT IN ( ' . implode( ',', $done_import ) . ' )';
329
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
330
 
331
+ $results = $wpdb->get_results( $query );
332
+ if ( ! empty( $results ) ) {
333
+ foreach ( $results as $result ) {
334
+ // author can contain title and company details
335
+ $author = $result->author;
336
+ $company = false;
337
+
338
+ // ex: First Last of Company!
339
+ $author = str_replace( ' of ', ', ', $author );
340
+ // now ex: First Last, Company!
341
+
342
+ // ex: First Last, Company
343
+ // ex: First Last, Web Development Manager, Topcon Positioning Systems, Inc.
344
+ // ex: First Last, Owner, Company, LLC
345
+ $author = str_replace( ' of ', ', ', $author );
346
+ $temp_comma = '^^^';
347
+ $author = str_replace( ', LLC', $temp_comma . ' LLC', $author );
348
+
349
+ // now ex: First Last, Owner, Company^^^ LLC
350
+ $author = str_replace( ', Inc', $temp_comma . ' Inc', $author );
351
+
352
+ // ex: First Last, Web Development Manager, Company^^^ Inc.
353
+ // it's possible to have "Michael Cannon, Senior Developer" and "Senior Developer" become the company. Okay for now
354
+ $author = explode( ', ', $author );
355
+
356
+ if ( 1 < count( $author ) ) {
357
+ $company = array_pop( $author );
358
+ $company = str_replace( $temp_comma, ',', $company );
359
+ }
360
 
361
+ $author = implode( ', ', $author );
362
+ $author = str_replace( $temp_comma, ',', $author );
363
+
364
+ $post_data = array(
365
+ 'post_type' => self::PT,
366
+ 'post_status' => ( 'yes' == $result->public ) ? 'publish' : 'private',
367
+ 'post_date' => $result->time_added,
368
+ 'post_modified' => $result->time_updated,
369
+ 'post_title' => $author,
370
+ 'post_content' => $result->testimonial,
371
+ 'tags_input' => $result->tags,
372
+ );
373
 
374
+ $post_id = wp_insert_post( $post_data, true );
375
 
376
+ // track/link testimonial import to new post
377
+ add_post_meta( $post_id, $meta_key, $result->testimonial_id );
378
 
379
+ if ( ! empty( $company ) ) {
380
+ add_post_meta( $post_id, 'testimonials-widget-company', $company );
381
+ }
382
 
383
+ $source = $result->source;
384
+ if ( ! empty( $source ) ) {
385
+ if ( is_email( $source ) ) {
386
+ add_post_meta( $post_id, 'testimonials-widget-email', $source );
387
+ } else {
388
+ add_post_meta( $post_id, 'testimonials-widget-url', $source );
389
+ }
390
  }
391
  }
392
  }
394
 
395
  $options['migrated'] = true;
396
  delete_option( self::OLD_NAME );
397
+ add_option( self::OLD_NAME, $options );
398
  }
399
 
400
 
wpml-config.xml CHANGED
@@ -13,5 +13,7 @@
13
  <taxonomies>
14
  <taxonomy translate="1">category</taxonomy>
15
  <taxonomy translate="1">post_tag</taxonomy>
 
 
16
  </taxonomies>
17
  </wpml-config>
13
  <taxonomies>
14
  <taxonomy translate="1">category</taxonomy>
15
  <taxonomy translate="1">post_tag</taxonomy>
16
+ <taxonomy translate="1">testimonials-widget-category</taxonomy>
17
+ <taxonomy translate="1">testimonials-widget-post_tag</taxonomy>
18
  </taxonomies>
19
  </wpml-config>