Popup by Supsystic - Version 1.8.4

Version Description

/ 19.12.2016 = * Redesign PopUp Theme "New York" * Redesign PopUp Theme "Video List" * Added PopUp template "Exclusive Subscription" * Added possibility to add emails / email templates into Blacklist - PRO * Admin area design minor improvements * Code optimizations * Subscribe fields - values presets: User IP, Country, Pages URLs and Titles in Subscribe forms

Download this release

Release Info

Developer supsystic.com
Plugin Icon 128x128 Popup by Supsystic
Version 1.8.4
Comparing to
See all releases

Code changes from version 1.8.8 to 1.8.4

Files changed (38) hide show
  1. classes/html.php +2 -6
  2. classes/installer.php +1 -4
  3. classes/model.php +1 -1
  4. classes/utils.php +0 -10
  5. classes/validator.php +1 -2
  6. config.php +1 -1
  7. css/supsystic-ui.css +4 -0
  8. functions.php +1 -1
  9. js/core.js +1 -1
  10. modules/mail/engines/PHPMailerAutoload.php +0 -49
  11. modules/mail/engines/class.phpmailer.php +0 -3983
  12. modules/mail/engines/class.phpmaileroauth.php +0 -197
  13. modules/mail/engines/class.phpmaileroauthgoogle.php +0 -77
  14. modules/mail/engines/class.pop3.php +0 -407
  15. modules/mail/engines/class.smtp.php +0 -1249
  16. modules/mail/engines/get_oauth_token.php +0 -162
  17. modules/mail/mod.php +10 -137
  18. modules/options/js/admin.settings.js +0 -37
  19. modules/options/mod.php +0 -15
  20. modules/options/views/options.php +2 -2
  21. modules/options/views/tpl/optionsSettingsTabContent.php +1 -5
  22. modules/popup/controller.php +1 -2
  23. modules/popup/css/frontend.popup.css +1 -1
  24. modules/popup/js/admin.popup.edit.js +0 -8
  25. modules/popup/js/frontend.popup.js +20 -53
  26. modules/popup/mod.php +1 -21
  27. modules/popup/models/popup.php +0 -31
  28. modules/popup/views/popup.php +22 -31
  29. modules/popup/views/tpl/popupEditAdminDesignOpts.php +2 -4
  30. modules/popup/views/tpl/popupEditAdminMainOpts.php +1 -25
  31. modules/popup/views/tpl/popupEditAdminSubOpts.php +1 -16
  32. modules/statistics/js/admin.statistics.popup.edit.js +1 -1
  33. modules/statistics/models/statistics.php +1 -1
  34. modules/subscribe/models/subscribe.php +3 -32
  35. modules/supsystic_promo/mod.php +0 -4
  36. modules/supsystic_promo/views/supsystic_promo.php +2 -3
  37. pps.php +1 -1
  38. readme.txt +2 -36
classes/html.php CHANGED
@@ -682,12 +682,8 @@ class htmlPps {
682
  _custom_media = true;
683
  wp.media.editor.send.attachment = function(props, attachment){
684
  if ( _custom_media ) {
685
- var selectedUrl = attachment.url;
686
- if(props && props.size && attachment.sizes && attachment.sizes[ props.size ] && attachment.sizes[ props.size ].url) {
687
- selectedUrl = attachment.sizes[ props.size ].url;
688
- }
689
- jQuery("#'. $inputId. '").val( selectedUrl ).trigger("change");
690
- '. ($onChange ? $onChange. '(selectedUrl, attachment, "'. $buttonId. '");' : ''). '
691
  } else {
692
  return _orig_send_attachment.apply( this, [props, attachment] );
693
  };
682
  _custom_media = true;
683
  wp.media.editor.send.attachment = function(props, attachment){
684
  if ( _custom_media ) {
685
+ jQuery("#'. $inputId. '").val( attachment.url ).trigger("change");
686
+ '. ($onChange ? $onChange. '(attachment.url, attachment, "'. $buttonId. '");' : ''). '
 
 
 
 
687
  } else {
688
  return _orig_send_attachment.apply( this, [props, attachment] );
689
  };
classes/installer.php CHANGED
@@ -493,7 +493,7 @@ class installerPps {
493
  ("1","List Building","1","0","YTozOntzOjQ6Im1haW4iO2E6MTU6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNzoic2hvd19vbl9zY3JvbGxfd2luZG93X2RlbGF5IjtzOjE6IjAiO3M6MzM6InNob3dfb25fc2Nyb2xsX3dpbmRvd19wZXJjX3Njcm9sbCI7czoxOiIwIjtzOjg6ImNsb3NlX29uIjtzOjEwOiJ1c2VyX2Nsb3NlIjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czo3OiJzaG93X3RvIjtzOjg6ImV2ZXJ5b25lIjtzOjI5OiJzaG93X3RvX2ZpcnN0X3RpbWVfdmlzaXRfZGF5cyI7czoyOiIzMCI7czozMDoic2hvd190b191bnRpbF9tYWtlX2FjdGlvbl9kYXlzIjtzOjI6IjMwIjtzOjIxOiJoaWRlX2Zvcl9kZXZpY2VzX3Nob3ciO3M6MToiMCI7czoyNDoiaGlkZV9mb3JfcG9zdF90eXBlc19zaG93IjtzOjE6IjAiO3M6MTc6ImhpZGVfZm9yX2lwc19zaG93IjtzOjE6IjAiO3M6MTI6ImhpZGVfZm9yX2lwcyI7czowOiIiO3M6MjM6ImhpZGVfZm9yX2NvdW50cmllc19zaG93IjtzOjE6IjAiO3M6MjM6ImhpZGVfZm9yX2xhbmd1YWdlc19zaG93IjtzOjE6IjAiO31zOjM6InRwbCI7YTo1ODp7czo1OiJ3aWR0aCI7czozOiI4MjQiO3M6MTM6IndpZHRoX21lYXN1cmUiO3M6MjoicHgiO3M6MTg6ImJnX292ZXJsYXlfb3BhY2l0eSI7czozOiIwLjUiO3M6OToiYmdfdHlwZV8wIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18wIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMCI7czo3OiIjZWJlYmViIjtzOjk6ImJnX3R5cGVfMSI7czo1OiJjb2xvciI7czo4OiJiZ19pbWdfMSI7czowOiIiO3M6MTA6ImJnX2NvbG9yXzEiO3M6NzoiIzA2NmRhYiI7czo5OiJiZ190eXBlXzIiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzIiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8yIjtzOjc6IiMwMGVhZWEiO3M6MTA6ImZvbnRfbGFiZWwiO3M6NzoiZGVmYXVsdCI7czoxNjoibGFiZWxfZm9udF9jb2xvciI7czo3OiIjMDAwMDAwIjtzOjEwOiJmb250X3R4dF8wIjtzOjc6ImRlZmF1bHQiO3M6MTc6InRleHRfZm9udF9jb2xvcl8wIjtzOjc6IiMwMDAwMDAiO3M6MTA6ImZvbnRfdHh0XzEiO3M6NzoiZGVmYXVsdCI7czoxNzoidGV4dF9mb250X2NvbG9yXzEiO3M6NzoiIzAwMDAwMCI7czoxMToiZm9udF9mb290ZXIiO3M6NzoiZGVmYXVsdCI7czoxNzoiZm9vdGVyX2ZvbnRfY29sb3IiO3M6NzoiIzAwMDAwMCI7czo5OiJjbG9zZV9idG4iO3M6MTE6Imxpc3RzX2JsYWNrIjtzOjc6ImJ1bGxldHMiO3M6MTE6Imxpc3RzX2dyZWVuIjtzOjExOiJsYXllcmVkX3BvcyI7czowOiIiO3M6OToiZW5iX2xhYmVsIjtzOjE6IjEiO3M6NToibGFiZWwiO3M6MTQwOiJUaGUgQmVzdCBXb3JkUHJlc3MgPGkgc3R5bGU9XCJjb2xvcjogIzAwNjlhNztcIj5Qb3BVcCBvcHRpbiBwbHVnaW48L2k+IHRvIGhlbHAgeW91IGdhaW4gbW9yZSBzdWJzY3JpYmVycywgc29jaWFsIGZvbGxvd2VycyBvciBhZHZlcnRpc2VtZW50LiI7czo5OiJlbmJfdHh0XzAiO3M6MToiMSI7czo5OiJlbmJfdHh0XzEiO3M6MToiMSI7czoxMzoiZW5iX2Zvb3Rfbm90ZSI7czoxOiIxIjtzOjk6ImZvb3Rfbm90ZSI7czoxMTg6IldlIHJlc3BlY3QgeW91ciBwcml2YWN5LiBZb3VyIGluZm9ybWF0aW9uIHdpbGwgbm90IGJlIHNoYXJlZCB3aXRoIGFueSB0aGlyZCBwYXJ0eSBhbmQgeW91IGNhbiB1bnN1YnNjcmliZSBhdCBhbnkgdGltZSAiO3M6MTU6ImVuYl9zbV9mYWNlYm9vayI7czoxOiIxIjtzOjE3OiJlbmJfc21fZ29vZ2xlcGx1cyI7czoxOiIxIjtzOjE0OiJlbmJfc21fdHdpdHRlciI7czoxOiIxIjtzOjk6InNtX2Rlc2lnbiI7czo2OiJzaW1wbGUiO3M6ODoiYW5pbV9rZXkiO3M6NDoibm9uZSI7czoxMzoiYW5pbV9kdXJhdGlvbiI7czowOiIiO3M6MTM6ImVuYl9zdWJzY3JpYmUiO3M6MToiMSI7czo4OiJzdWJfZGVzdCI7czo5OiJ3b3JkcHJlc3MiO3M6MjM6InN1Yl93cF9jcmVhdGVfdXNlcl9yb2xlIjtzOjEwOiJzdWJzY3JpYmVyIjtzOjE5OiJzdWJfYXdlYmVyX2xpc3RuYW1lIjtzOjA6IiI7czoyMToic3ViX2F3ZWJlcl9hZHRyYWNraW5nIjtzOjA6IiI7czoyMToic3ViX21haWxjaGltcF9hcGlfa2V5IjtzOjA6IiI7czoxMDoic3ViX2ZpZWxkcyI7YToyOntzOjQ6Im5hbWUiO2E6Nzp7czozOiJlbmIiO3M6MToiMSI7czo0OiJuYW1lIjtzOjQ6Im5hbWUiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjQ6Ik5hbWUiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIwIjt9czo1OiJlbWFpbCI7YTo3OntzOjQ6Im5hbWUiO3M6NToiZW1haWwiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjY6IkUtTWFpbCI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjEiO3M6MzoiZW5iIjtzOjE6IjEiO319czoyMDoic3ViX3R4dF9jb25maXJtX3NlbnQiO3M6Njc6IkNvbmZpcm1hdGlvbiBsaW5rIHdhcyBzZW50IHRvIHlvdXIgZW1haWwgYWRkcmVzcy4gQ2hlY2sgeW91ciBlbWFpbCEiO3M6MTU6InN1Yl90eHRfc3VjY2VzcyI7czoyNDoiVGhhbmsgeW91IGZvciBzdWJzY3JpYmUhIjtzOjIxOiJzdWJfdHh0X2ludmFsaWRfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MTY6InN1Yl9yZWRpcmVjdF91cmwiO3M6MDoiIjtzOjI4OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHN1YnNjcmlwdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTc6IllvdSBzdWJzY3JpYmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHN1YnNjcmlwdGlvbi4gSWYgeW91IGRpZCBub3Qgc3Vic2NyaWJlIGhlcmUgLSBqdXN0IGlnbm9yZSB0aGlzIG1lc3NhZ2UuIjtzOjMxOiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjM3OiJbc2l0ZW5hbWVdIFlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIjtzOjI4OiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfbWVzc2FnZSI7czo2NToiVXNlcm5hbWU6IFt1c2VyX2xvZ2luXTxiciAvPlBhc3N3b3JkOiBbcGFzc3dvcmRdPGJyIC8+W2xvZ2luX3VybF0iO3M6MjU6InN1Yl9yZWRpcmVjdF9lbWFpbF9leGlzdHMiO3M6MDoiIjtzOjEzOiJzdWJfYnRuX2xhYmVsIjtzOjg6IlNpZ24tdXAhIjtzOjEzOiJzdWJfbmV3X2VtYWlsIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoxNToic3ViX25ld19tZXNzYWdlIjtzOjEyOToiWW91IGhhdmUgbmV3IHN1YnNjcmliZXIgb24geW91ciBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPiwgaGVyZSB1cyBzdWJzY3JpYmVyIGluZm9ybWF0aW9uOjxiciAvPltzdWJzY3JpYmVyX2RhdGFdIjtzOjU6InR4dF8wIjtzOjE2MDoiPHA+PGEgaHJlZj1cImh0dHA6Ly9zdXBzeXN0aWMuY29tXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGltZyBzdHlsZT1cIm1heC13aWR0aDogMjAwcHg7XCIgc3JjPVwiW1BQU19BU1NFVFNfVVJMXWltZy9hc3NldHMvc3Vwc3lzdGljX2ljb24ucG5nXCIgYWx0PVwiXCIgLz48L2E+PC9wPiI7czo1OiJ0eHRfMSI7czozMTM6IjxwPlBvcHVwIGJ5IFN1cHN5c3RpYyBsZXRzIHlvdSBlYXNpbHkgY3JlYXRlIGVsZWdhbnQgb3ZlcmxhcHBpbmcgd2luZG93cyB3aXRoIHVubGltaXRlZCBmZWF0dXJlcy4gUG9wLXVwcyB3aXRoIFNsaWRlciwgTGlnaHRib3gsIENvbnRhY3QgYW5kIFN1YnNjcmlwdGlvbiBmb3JtcyBhbmQgbW9yZTo8L3A+PHVsPjxsaT5VbmxpbWl0ZWQgQ29udGVudCBDdXN0b21pemF0aW9uPC9saT48bGk+QXV0byBPcGVuIFBvcHVwczwvbGk+PGxpPkNvbnRhY3QgRm9ybSB3aXRoIHBvcC11cDwvbGk+PGxpPlBvcHVwIE9wZW5pbmcgQW5pbWF0aW9uczwvbGk+PC91bD4iO31zOjEwOiJvcHRzX2F0dHJzIjthOjI6e3M6OToiYmdfbnVtYmVyIjtzOjE6IjMiO3M6MTY6InR4dF9ibG9ja19udW1iZXIiO3M6MToiMiI7fX0=","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose ppsPopupClose_[close_btn]\"></a>\r\n <div class=\"ppsInnerTblContent\">\r\n <div class=\"ppsPopupListsInner ppsPopupInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupListsLabel\">[label]</div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupClassyTxt_0 ppsPopupTxt_0\">\r\n [txt_0]\r\n </div>\r\n [endif]\r\n [if enb_txt_1]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupClassyTxt_1 ppsPopupTxt_1\">\r\n [txt_1]\r\n </div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n <div class=\"ppsRightCol\">\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n padding: 15px;\r\n font-family: Georgia, Times, serif;\r\n font-size: 13px;\r\n line-height: 21px;\r\n font-weight: normal;\r\n color: #000;\r\n}\r\n#ppsPopupShell_[ID], #ppsPopupShell_[ID] * {\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n box-sizing: border-box;\r\n}\r\n#ppsPopupShell_[ID] .ppsInnerTblContent {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupInner {\r\n {% if popup.params.tpl.enb_subscribe or popup.params.tpl.enb_foot_note or popup.params.tpl.enb_sm %}\r\n width: 66%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n display: table-cell;\r\n vertical-align: top;\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%, [bg_color_0])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\', endColorstr=\'[bg_color_0]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color: #000;\r\n font-family: \"Myriad Pro\",\"Trebuchet MS\",\"Helvetica Neue\",Helvetica,Arial,Sans-Serif;\r\n font-size: 30px;\r\n letter-spacing: -1px;\r\n line-height: 40px;\r\n letter-spacing: -1px;\r\n font-weight: bold;\r\n margin-top: 15px;\r\n margin-bottom: 16px;\r\n padding-left: 20px;\r\n text-shadow: 0px 0px 1px #000;\r\n -moz-text-shadow: 0px 0px 1px #000;\r\n -webkit-text-shadow: 0px 0px 1px #000;\r\n}\r\n#ppsPopupShell_[ID] .ppsRightCol {\r\n display: table-cell;\r\n width: 34%;\r\n height: 100%;\r\n [if bg_type_1 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}), color-stop(100%, [bg_color_1])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}\', endColorstr=\'[bg_color_1]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 30px 30px 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: 100%;\r\n margin-bottom: 10px;\r\n height: 40px;\r\n border: 1px solid #d1b36d;\r\n border-radius: 10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n box-shadow: 2px 2px 2px #dcdcdc inset;\r\n padding-left: 10px;\r\n font-size: 17px;\r\n background-color: #fff;\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n background-color: transparent;\r\n height: 40px;\r\n border: none;\r\n margin-left: -5px;\r\n font-size: 17px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n font-family: inherit;\r\n height: auto;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text][name=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/mail-icon.png\");\r\n background-repeat: no-repeat;\r\n background-position: 90% center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n border-color: #000;\r\n [if bg_type_2 == \'color\']\r\n background: [bg_color_2];\r\n background: -moz-linear-gradient(90deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -webkit-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -o-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -ms-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: linear-gradient(0deg, [bg_color_2]) 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n [elseif bg_type_2 == \'img\']\r\n background-image: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n color: #fff;\r\n font-size: 20px;\r\n text-shadow: 2px 2px 2px #000;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n box-shadow: inset 1px 1px 3px #666;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n float: left;\r\n width: 50%;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_1 {\r\n float: right;\r\n [if enb_txt_0]\r\n width: 50%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose.ppsPopupClose_lists_black {\r\n top: 0 !important;\r\n right: 0 !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote{\r\n color: #585858;\r\n font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n font-size: x-small;\r\n font-style: italic;\r\n line-height: 14px;\r\n margin: 5px 30px;\r\n}","","1","1","1","1","2015-01-10 18:59:43","7"),
494
  ("2","Classy","1","0","YTozOntzOjQ6Im1haW4iO2E6MTc6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNzoic2hvd19vbl9zY3JvbGxfd2luZG93X2RlbGF5IjtzOjE6IjAiO3M6MzM6InNob3dfb25fc2Nyb2xsX3dpbmRvd19wZXJjX3Njcm9sbCI7czoxOiIwIjtzOjI4OiJzaG93X29uX2FmdGVyX2luYWN0aXZlX3ZhbHVlIjtzOjI6IjEwIjtzOjg6ImNsb3NlX29uIjtzOjEwOiJ1c2VyX2Nsb3NlIjtzOjI1OiJjbG9zZV9vbl9hZnRlcl90aW1lX3ZhbHVlIjtzOjE6IjUiO3M6MTA6InNob3dfcGFnZXMiO3M6MzoiYWxsIjtzOjc6InNob3dfdG8iO3M6ODoiZXZlcnlvbmUiO3M6Mjk6InNob3dfdG9fZmlyc3RfdGltZV92aXNpdF9kYXlzIjtzOjI6IjMwIjtzOjMwOiJzaG93X3RvX3VudGlsX21ha2VfYWN0aW9uX2RheXMiO3M6MjoiMzAiO3M6MjE6ImhpZGVfZm9yX2RldmljZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX2Zvcl9wb3N0X3R5cGVzX3Nob3ciO3M6MToiMCI7czoxNzoiaGlkZV9mb3JfaXBzX3Nob3ciO3M6MToiMCI7czoxMjoiaGlkZV9mb3JfaXBzIjtzOjA6IiI7czoyMzoiaGlkZV9mb3JfY291bnRyaWVzX3Nob3ciO3M6MToiMCI7czoyMzoiaGlkZV9mb3JfbGFuZ3VhZ2VzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjU5OntzOjU6IndpZHRoIjtzOjM6IjYzMCI7czoxMzoid2lkdGhfbWVhc3VyZSI7czoyOiJweCI7czoxODoiYmdfb3ZlcmxheV9vcGFjaXR5IjtzOjM6IjAuNSI7czo5OiJiZ190eXBlXzAiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzAiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8wIjtzOjc6IiNkMWQxZDEiO3M6OToiYmdfdHlwZV8xIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18xIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMSI7czo3OiIjN2ZiNmNiIjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiIzU1NTU1NSI7czoxMDoiZm9udF90eHRfMCI7czo3OiJkZWZhdWx0IjtzOjE3OiJ0ZXh0X2ZvbnRfY29sb3JfMCI7czo3OiIjNTU1NTU1IjtzOjEwOiJmb250X3R4dF8xIjtzOjc6ImRlZmF1bHQiO3M6MTc6InRleHRfZm9udF9jb2xvcl8xIjtzOjc6IiM1NTU1NTUiO3M6MTE6ImZvbnRfZm9vdGVyIjtzOjc6ImRlZmF1bHQiO3M6MTc6ImZvb3Rlcl9mb250X2NvbG9yIjtzOjc6IiM5OTk5OTkiO3M6OToiY2xvc2VfYnRuIjtzOjExOiJjbGFzc3lfZ3JleSI7czo3OiJidWxsZXRzIjtzOjExOiJjbGFzc3lfYmx1ZSI7czoxMzoiZW5iX3N1YnNjcmliZSI7czoxOiIxIjtzOjg6InN1Yl9kZXN0IjtzOjk6IndvcmRwcmVzcyI7czoyMzoic3ViX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTk6InN1Yl9hd2ViZXJfbGlzdG5hbWUiO3M6MDoiIjtzOjIxOiJzdWJfYXdlYmVyX2FkdHJhY2tpbmciO3M6MDoiIjtzOjIxOiJzdWJfbWFpbGNoaW1wX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfZ3JfYXBpX2tleSI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfdXJsIjtzOjA6IiI7czoxNDoic3ViX2FjX2FwaV9rZXkiO3M6MDoiIjtzOjE4OiJzdWJfYXJfZm9ybV9hY3Rpb24iO3M6MDoiIjtzOjEwOiJzdWJfc2dhX2lkIjtzOjA6IiI7czoxNToic3ViX3NnYV9saXN0X2lkIjtzOjA6IiI7czoyMToic3ViX3NnYV9hY3RpdmF0ZV9jb2RlIjtzOjA6IiI7czoxMDoic3ViX2ZpZWxkcyI7YToyOntzOjU6ImVtYWlsIjthOjc6e3M6NDoibmFtZSI7czo1OiJlbWFpbCI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NjoiRS1NYWlsIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMSI7czozOiJlbmIiO3M6MToiMSI7fXM6NDoibmFtZSI7YTo3OntzOjM6ImVuYiI7czoxOiIxIjtzOjQ6Im5hbWUiO3M6NDoibmFtZSI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NDoiTmFtZSI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjAiO319czoyMDoic3ViX3R4dF9jb25maXJtX3NlbnQiO3M6Njc6IkNvbmZpcm1hdGlvbiBsaW5rIHdhcyBzZW50IHRvIHlvdXIgZW1haWwgYWRkcmVzcy4gQ2hlY2sgeW91ciBlbWFpbCEiO3M6MTU6InN1Yl90eHRfc3VjY2VzcyI7czoyNDoiVGhhbmsgeW91IGZvciBzdWJzY3JpYmUhIjtzOjIxOiJzdWJfdHh0X2ludmFsaWRfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MTY6InN1Yl9yZWRpcmVjdF91cmwiO3M6MDoiIjtzOjI4OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHN1YnNjcmlwdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTc6IllvdSBzdWJzY3JpYmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHN1YnNjcmlwdGlvbi4gSWYgeW91IGRpZCBub3Qgc3Vic2NyaWJlIGhlcmUgLSBqdXN0IGlnbm9yZSB0aGlzIG1lc3NhZ2UuIjtzOjMxOiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjM3OiJbc2l0ZW5hbWVdIFlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIjtzOjI4OiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfbWVzc2FnZSI7czo2NToiVXNlcm5hbWU6IFt1c2VyX2xvZ2luXTxiciAvPlBhc3N3b3JkOiBbcGFzc3dvcmRdPGJyIC8+W2xvZ2luX3VybF0iO3M6MjU6InN1Yl9yZWRpcmVjdF9lbWFpbF9leGlzdHMiO3M6MDoiIjtzOjEzOiJzdWJfYnRuX2xhYmVsIjtzOjg6IlNpZ24tVXAhIjtzOjE1OiJlbmJfc21fZmFjZWJvb2siO3M6MToiMSI7czoxNzoiZW5iX3NtX2dvb2dsZXBsdXMiO3M6MToiMSI7czoxNDoiZW5iX3NtX3R3aXR0ZXIiO3M6MToiMSI7czo5OiJzbV9kZXNpZ24iO3M6Njoic2ltcGxlIjtzOjg6ImFuaW1fa2V5IjtzOjQ6Im5vbmUiO3M6MTM6ImFuaW1fZHVyYXRpb24iO3M6MDoiIjtzOjExOiJsYXllcmVkX3BvcyI7czozOiJ0b3AiO3M6OToiZW5iX2xhYmVsIjtzOjE6IjEiO3M6NToibGFiZWwiO3M6MTg6IlBvcFVwIGJ5IFN1cHN5c3RpYyI7czo5OiJlbmJfdHh0XzAiO3M6MToiMSI7czo5OiJlbmJfdHh0XzEiO3M6MToiMSI7czo5OiJmb290X25vdGUiO3M6MDoiIjtzOjU6InR4dF8wIjtzOjIwODoiPHA+UG9wdXAgYnkgU3Vwc3lzdGljIGxldHMgeW91IGVhc2lseSBjcmVhdGUgZWxlZ2FudCBvdmVybGFwcGluZyB3aW5kb3dzIHdpdGggdW5saW1pdGVkIGZlYXR1cmVzOjwvcD48dWw+PGxpPlVubGltaXRlZCBDb250ZW50IEN1c3RvbWl6YXRpb248L2xpPjxsaT5BdXRvIE9wZW4gUG9wdXBzPC9saT48bGk+Q29udGFjdCBGb3JtIHdpdGggcG9wLXVwPC9saT48L3VsPiI7czo1OiJ0eHRfMSI7czoxMjM6IjxwPjxpbWcgc3R5bGU9XCJtYXgtd2lkdGg6IDE4MHB4OyBtYXgtaGVpZ2h0OiBhdXRvO1wiIHNyYz1cIltQUFNfQVNTRVRTX1VSTF1pbWcvYXNzZXRzL3N1cHN5c3RpY19pY29uLnBuZ1wiIGFsdD1cIlwiIC8+PC9wPiI7fXM6MTA6Im9wdHNfYXR0cnMiO2E6Mjp7czo5OiJiZ19udW1iZXIiO3M6MToiMiI7czoxNjoidHh0X2Jsb2NrX251bWJlciI7czoxOiIyIjt9fQ==","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupClassyShell\">\r\n <a href=\"#\" class=\"ppsPopupClose\"></a>\r\n <div class=\"ppsPopupClassyInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupClassyLabel\">[label]</div>\r\n [endif]\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupTxt_0\">\r\n [txt_0]\r\n </div>\r\n [endif]\r\n [if enb_txt_1]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupTxt_1\">\r\n [txt_1]\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">[foot_note]</div>\r\n [endif]\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n [if bg_type_0 == \'color\']\r\n background-color: {{ popup.params.tpl.bg_color_0 }};\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-size: 100%;\r\n background-repeat: no-repeat;\r\n [endif]\r\n padding: 7px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyInner {\r\n padding: 15px;\r\n border: {{ adjust_brightness(popup.params.tpl.bg_color_0, 30) }};\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ popup.params.tpl.bg_color_0 }}), color-stop(100%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }})); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ popup.params.tpl.bg_color_0 }}\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }}\',GradientType=1 ); /* ie6-9 */\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n height: 48px;\r\n font-size: 27px;\r\n border: none;\r\n padding: 1px 8px 0;\r\n width: calc((100% - 70px) / 3);\r\n box-sizing: content-box;\r\n margin-top: 10px;\r\n float: left;\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n [if bg_type_0 == \'color\']\r\n -webkit-box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n -moz-box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n background-color: {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }};\r\n color: {{ adjust_brightness(popup.params.tpl.bg_color_0, -100) }};\r\n [endif]\r\n margin-right: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n height: 48px;\r\n vertical-align: middle;\r\n background-color: transparent;\r\n border: none;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select option {\r\n font-size: 27px;\r\n color: #6d6d6d;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: calc(100% - 30px);\r\n height: auto;\r\n font-family: inherit;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n color: #eee;\r\n margin-right: 0;\r\n cursor: pointer;\r\n [if bg_type_1 == \'color\']\r\n text-shadow: -1px -1px 1px {{ adjust_brightness(popup.params.tpl.bg_color_1, -80) }};\r\n border: 1px solid {{ adjust_brightness(popup.params.tpl.bg_color_1, -40) }};\r\n background: -moz-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ popup.params.tpl.bg_color_1 }}), color-stop(100%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }})); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ popup.params.tpl.bg_color_1 }}\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }}\',GradientType=1 ); /* ie6-9 */\r\n\r\n -webkit-box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n -moz-box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-size: 100%;\r\n background-repeat: no-repeat;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:disabled {\r\n color: transparent;\r\n cursor: progress;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyLabel {\r\n width: 100%;\r\n text-align: center;\r\n color: #555555;\r\n text-shadow: 1px 1px 1px #ffffff;\r\n font-size: 35px;\r\n margin-top: 26px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSuccessMsg {\r\n color: #555555;\r\n border: 1px solid #555555;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt {\r\n font-size: 20px;\r\n line-height: 160%;\r\n color: rgb(85, 85, 85);\r\n padding-top: 14px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n [if enb_txt_1]\r\n width: 70%;\r\n float: left;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_1 {\r\n float: right;\r\n width: 30%;\r\n}\r\n#ppsPopupShell_[ID] ul {\r\n margin-top: 15px;\r\n padding-left: 0;\r\n}\r\n#ppsPopupShell_[ID] ul li {\r\n list-style: inside none disc;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote {\r\n color: #999;\r\n font-size: 12px;\r\n padding-top: 10px;\r\n text-align: center;\r\n}\r\n/*SM*/\r\n#ppsPopupShell_[ID] .ppsSm {\r\n padding: 10px 10px 0 10px;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_1_435376 .ppsSm > div {\r\n vertical-align: top !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsSm .ppsSmBtn {\r\n margin-right: 5px;\r\n}","","1","1","1","1","2015-01-03 17:00:43","19"),
495
  ("3","Fastest and the Easiest","1","0","YTozOntzOjQ6Im1haW4iO2E6MTc6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNzoic2hvd19vbl9zY3JvbGxfd2luZG93X2RlbGF5IjtzOjE6IjAiO3M6MzM6InNob3dfb25fc2Nyb2xsX3dpbmRvd19wZXJjX3Njcm9sbCI7czoxOiIwIjtzOjI4OiJzaG93X29uX2FmdGVyX2luYWN0aXZlX3ZhbHVlIjtzOjI6IjEwIjtzOjg6ImNsb3NlX29uIjtzOjEwOiJ1c2VyX2Nsb3NlIjtzOjI1OiJjbG9zZV9vbl9hZnRlcl90aW1lX3ZhbHVlIjtzOjE6IjUiO3M6MTA6InNob3dfcGFnZXMiO3M6MzoiYWxsIjtzOjc6InNob3dfdG8iO3M6ODoiZXZlcnlvbmUiO3M6Mjk6InNob3dfdG9fZmlyc3RfdGltZV92aXNpdF9kYXlzIjtzOjI6IjMwIjtzOjMwOiJzaG93X3RvX3VudGlsX21ha2VfYWN0aW9uX2RheXMiO3M6MjoiMzAiO3M6MjE6ImhpZGVfZm9yX2RldmljZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX2Zvcl9wb3N0X3R5cGVzX3Nob3ciO3M6MToiMCI7czoxNzoiaGlkZV9mb3JfaXBzX3Nob3ciO3M6MToiMCI7czoxMjoiaGlkZV9mb3JfaXBzIjtzOjA6IiI7czoyMzoiaGlkZV9mb3JfY291bnRyaWVzX3Nob3ciO3M6MToiMCI7czoyMzoiaGlkZV9mb3JfbGFuZ3VhZ2VzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjYzOntzOjU6IndpZHRoIjtzOjM6Ijc3MCI7czoxMzoid2lkdGhfbWVhc3VyZSI7czoyOiJweCI7czoxODoiYmdfb3ZlcmxheV9vcGFjaXR5IjtzOjM6IjAuNSI7czo5OiJiZ190eXBlXzAiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzAiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8wIjtzOjc6IiNlNWU1ZTUiO3M6OToiYmdfdHlwZV8xIjtzOjM6ImltZyI7czo4OiJiZ19pbWdfMSI7czozOToiW1BQU19BU1NFVFNfVVJMXWltZy9hc3NldHMvYnV0dG9uLTEucG5nIjtzOjEwOiJiZ19jb2xvcl8xIjtzOjA6IiI7czo5OiJiZ190eXBlXzIiO3M6MzoiaW1nIjtzOjg6ImJnX2ltZ18yIjtzOjQyOiJbUFBTX0FTU0VUU19VUkxdaW1nL2Fzc2V0cy9iaWctYXJyb3ctMS5wbmciO3M6MTA6ImJnX2NvbG9yXzIiO3M6MDoiIjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiIzQxNDE0MSI7czoxMDoiZm9udF90eHRfMCI7czo3OiJkZWZhdWx0IjtzOjE3OiJ0ZXh0X2ZvbnRfY29sb3JfMCI7czo3OiIjMDAwMDAwIjtzOjEwOiJmb250X3R4dF8xIjtzOjc6ImRlZmF1bHQiO3M6MTc6InRleHRfZm9udF9jb2xvcl8xIjtzOjc6IiMwMDAwMDAiO3M6MTE6ImZvbnRfZm9vdGVyIjtzOjc6ImRlZmF1bHQiO3M6MTc6ImZvb3Rlcl9mb250X2NvbG9yIjtzOjc6IiM5Nzk2OTYiO3M6OToiY2xvc2VfYnRuIjtzOjExOiJsaXN0c19ibGFjayI7czo3OiJidWxsZXRzIjtzOjExOiJsaXN0c19ncmVlbiI7czoxMzoiZW5iX3N1YnNjcmliZSI7czoxOiIxIjtzOjg6InN1Yl9kZXN0IjtzOjk6IndvcmRwcmVzcyI7czoyMzoic3ViX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTk6InN1Yl9hd2ViZXJfbGlzdG5hbWUiO3M6MDoiIjtzOjIxOiJzdWJfYXdlYmVyX2FkdHJhY2tpbmciO3M6MDoiIjtzOjIxOiJzdWJfbWFpbGNoaW1wX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfZ3JfYXBpX2tleSI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfdXJsIjtzOjA6IiI7czoxNDoic3ViX2FjX2FwaV9rZXkiO3M6MDoiIjtzOjE4OiJzdWJfYXJfZm9ybV9hY3Rpb24iO3M6MDoiIjtzOjEwOiJzdWJfc2dhX2lkIjtzOjA6IiI7czoxNToic3ViX3NnYV9saXN0X2lkIjtzOjA6IiI7czoyMToic3ViX3NnYV9hY3RpdmF0ZV9jb2RlIjtzOjA6IiI7czoxMDoic3ViX2ZpZWxkcyI7YToyOntzOjU6ImVtYWlsIjthOjc6e3M6NDoibmFtZSI7czo1OiJlbWFpbCI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NjoiRS1NYWlsIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMSI7czozOiJlbmIiO3M6MToiMSI7fXM6NDoibmFtZSI7YTo3OntzOjM6ImVuYiI7czoxOiIxIjtzOjQ6Im5hbWUiO3M6NDoibmFtZSI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NDoiTmFtZSI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjAiO319czoyMDoic3ViX3R4dF9jb25maXJtX3NlbnQiO3M6Njc6IkNvbmZpcm1hdGlvbiBsaW5rIHdhcyBzZW50IHRvIHlvdXIgZW1haWwgYWRkcmVzcy4gQ2hlY2sgeW91ciBlbWFpbCEiO3M6MTU6InN1Yl90eHRfc3VjY2VzcyI7czoyNDoiVGhhbmsgeW91IGZvciBzdWJzY3JpYmUhIjtzOjIxOiJzdWJfdHh0X2ludmFsaWRfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MTY6InN1Yl9yZWRpcmVjdF91cmwiO3M6MDoiIjtzOjI4OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHN1YnNjcmlwdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTc6IllvdSBzdWJzY3JpYmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHN1YnNjcmlwdGlvbi4gSWYgeW91IGRpZCBub3Qgc3Vic2NyaWJlIGhlcmUgLSBqdXN0IGlnbm9yZSB0aGlzIG1lc3NhZ2UuIjtzOjMxOiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjM3OiJbc2l0ZW5hbWVdIFlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIjtzOjI4OiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfbWVzc2FnZSI7czo2NToiVXNlcm5hbWU6IFt1c2VyX2xvZ2luXTxiciAvPlBhc3N3b3JkOiBbcGFzc3dvcmRdPGJyIC8+W2xvZ2luX3VybF0iO3M6MjU6InN1Yl9yZWRpcmVjdF9lbWFpbF9leGlzdHMiO3M6MDoiIjtzOjEzOiJzdWJfYnRuX2xhYmVsIjtzOjU6IkpvaW4hIjtzOjE1OiJlbmJfc21fZmFjZWJvb2siO3M6MToiMSI7czoxNzoiZW5iX3NtX2dvb2dsZXBsdXMiO3M6MToiMSI7czoxNDoiZW5iX3NtX3R3aXR0ZXIiO3M6MToiMSI7czo5OiJzbV9kZXNpZ24iO3M6Njoic2ltcGxlIjtzOjg6ImFuaW1fa2V5IjtzOjQ6Im5vbmUiO3M6MTM6ImFuaW1fZHVyYXRpb24iO3M6MDoiIjtzOjExOiJsYXllcmVkX3BvcyI7czozOiJ0b3AiO3M6OToiZW5iX2xhYmVsIjtzOjE6IjEiO3M6NToibGFiZWwiO3M6NTU6IkluY3JlYXNlIHN1YnNjcmliZXJzLCBzb2NpYWwgZm9sbG93ZXJzIG9yIGFkdmVydGlzZW1lbnQiO3M6OToiZW5iX3R4dF8wIjtzOjE6IjEiO3M6OToiZW5iX3R4dF8xIjtzOjE6IjEiO3M6MTM6ImVuYl9mb290X25vdGUiO3M6MToiMSI7czo5OiJmb290X25vdGUiO3M6MTE3OiJXZSByZXNwZWN0IHlvdXIgcHJpdmFjeS4gWW91ciBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSBzaGFyZWQgd2l0aCBhbnkgdGhpcmQgcGFydHkgYW5kIHlvdSBjYW4gdW5zdWJzY3JpYmUgYXQgYW55IHRpbWUiO3M6NToidHh0XzAiO3M6NDQ6IjxwPlRoZSBCZXN0IFdvcmRQcmVzcyBQb3BVcCBvcHRpbiBwbHVnaW48L3A+IjtzOjU6InR4dF8xIjtzOjMxMzoiPHA+UG9wdXAgYnkgU3Vwc3lzdGljIGxldHMgeW91IGVhc2lseSBjcmVhdGUgZWxlZ2FudCBvdmVybGFwcGluZyB3aW5kb3dzIHdpdGggdW5saW1pdGVkIGZlYXR1cmVzLiBQb3AtdXBzIHdpdGggU2xpZGVyLCBMaWdodGJveCwgQ29udGFjdCBhbmQgU3Vic2NyaXB0aW9uIGZvcm1zIGFuZCBtb3JlOjwvcD48dWw+PGxpPlVubGltaXRlZCBDb250ZW50IEN1c3RvbWl6YXRpb248L2xpPjxsaT5BdXRvIE9wZW4gUG9wdXBzPC9saT48bGk+Q29udGFjdCBGb3JtIHdpdGggcG9wLXVwPC9saT48bGk+UG9wdXAgT3BlbmluZyBBbmltYXRpb25zPC9saT48L3VsPiI7fXM6MTA6Im9wdHNfYXR0cnMiO2E6Mjp7czo5OiJiZ19udW1iZXIiO3M6MToiMyI7czoxNjoidHh0X2Jsb2NrX251bWJlciI7czoxOiIyIjt9fQ==","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose\"></a>\r\n <div class=\"ppsPopupListsInner\">\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupTxt_0\">\r\n <div class=\"ppsTxtContent\">[txt_0]</div>\r\n </div>\r\n [endif]\r\n <div class=\"ppsPopupTblCols\">\r\n <div class=\"ppsPopupLeftCol\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel\">[label]</div>\r\n [endif]\r\n [if enb_txt_1]\r\n <div class=\"ppsPopupTxt ppsPopupTxt_1\">[txt_1]</div>\r\n [endif]\r\n </div>\r\n <div class=\"ppsPopupRightCol\">\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n <div class=\"ppsBigArrow\"></div>\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n </div>\r\n \r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n font-family: Helvetica,Arial,sans-serif;\r\n font-size: 14px;\r\n \r\n [if bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color: #414141;\r\n font-size: 28px;\r\n font-style: normal;\r\n font-weight: bold;\r\n letter-spacing: -1px;\r\n line-height: 35px;\r\n text-shadow: 0 1px 1px #000;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupListsInner {\r\n [if bg_type_0 == \'color\']\r\n background: {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}; /* Old browsers */\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* FF3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%,[bg_color_0])); /* Chrome,Safari4+ */\r\n background: -webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%,[bg_color_0] 100%); /* Chrome10+,Safari5.1+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%,[bg_color_0] 100%); /* Opera 12+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%,[bg_color_0] 100%); /* IE10+ */\r\n background: radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%,[bg_color_0] 100%); /* W3C */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\', endColorstr=\'#eaeaea\',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n width: 100%;\r\n border-bottom: 1px solid {{ adjust_brightness(popup.params.tpl.bg_color_0, -50) }};\r\n clear: both;\r\n font-size: 13px;\r\n font-weight: bold;\r\n font-family: Helvetica,Arial,sans-serif;\r\n [if bg_type_0 == \'color\']\r\n background: [bg_color_0]; /* Old browsers */\r\n background: -moz-linear-gradient(top, [bg_color_0] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* FF3.6+ */\r\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,[bg_color_0]), color-stop(100%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }})); /* Chrome,Safari4+ */\r\n background: -webkit-linear-gradient(top, [bg_color_0] 0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* Chrome10+,Safari5.1+ */\r\n background: -o-linear-gradient(top, [bg_color_0] 0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* Opera 11.10+ */\r\n background: -ms-linear-gradient(top, [bg_color_0] 0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* IE10+ */\r\n background: linear-gradient(to bottom, [bg_color_0] 0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* W3C */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'[bg_color_0]\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }}\',GradientType=0 ); /* IE6-9 */\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 .ppsTxtContent {\r\n padding: 10px 10px 10px 50px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTblCols {\r\n display: table;\r\n padding: 10px 10px 10px 50px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLeftCol {\r\n display: table-cell;\r\n vertical-align: top;\r\n [if enb_subscribe]\r\n width: 64%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupRightCol {\r\n width: 36%;\r\n display: table-cell;\r\n position: relative;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 30px 30px 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: 100%;\r\n margin-bottom: 10px;\r\n height: 40px;\r\n border: 1px solid #000;\r\n border-radius: 10px;\r\n display: block;\r\n background-color: #fff;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n box-shadow: 2px 2px 2px #dcdcdc inset;\r\n padding-left: 10px;\r\n font-size: 17px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n vertical-align: middle;\r\n height: 40px;\r\n background-color: transparent;\r\n border: none;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n margin-left: -10px;\r\n font-size: 17px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n height: auto;\r\n font-family: inherit;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text][name=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/mail-icon.png\");\r\n background-repeat: no-repeat;\r\n background-position: 90% center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n border: none;\r\n [if bg_type_1 == \'color\']\r\n background: [bg_color_1];\r\n background: -moz-linear-gradient(90deg, [bg_color_1] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n background: -webkit-linear-gradient(270deg, [bg_color_1] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n background: -o-linear-gradient(270deg, [bg_color_1] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n background: -ms-linear-gradient(270deg, [bg_color_1] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n background: linear-gradient(0deg, [bg_color_1]) 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n color: #000;\r\n font-size: 20px;\r\n text-shadow: 2px 2px 2px #000;\r\n cursor: pointer;\r\n max-width: 230px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n box-shadow: inset 1px 1px 3px #666;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote {\r\n color: #979696;\r\n font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n font-size: xx-small;\r\n font-style: italic;\r\n line-height: 14px;\r\n text-align: left;\r\n margin-left: 30px;\r\n}\r\n#ppsPopupShell_[ID] .ppsBigArrow {\r\n [if bg_type_2 == \'img\']\r\n position: absolute;\r\n width: 102px;\r\n height: 81px;\r\n background-image: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n top: -20px;\r\n right: 20px;\r\n z-index: 100;\r\n [else]\r\n display: none;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSuccessMsg {\r\n padding: 55px 5px 5px;\r\n}","","1","1","1","1","2015-01-13 19:22:48","13"),
496
- ("4","Facebook Like","1","0","YTozOntzOjQ6Im1haW4iO2E6MzA6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNToic2hvd19vbl9jbGlja19vbl9lbF9kZWxheSI7czoxOiIwIjtzOjI3OiJzaG93X29uX3Njcm9sbF93aW5kb3dfZGVsYXkiO3M6MToiMCI7czozMzoic2hvd19vbl9zY3JvbGxfd2luZG93X3BlcmNfc2Nyb2xsIjtzOjE6IjAiO3M6Mjg6InNob3dfb25fYWZ0ZXJfaW5hY3RpdmVfdmFsdWUiO3M6MjoiMTAiO3M6MjU6InNob3dfb25fbGlua19mb2xsb3dfZGVsYXkiO3M6MToiMCI7czo4OiJjbG9zZV9vbiI7czoxMDoidXNlcl9jbG9zZSI7czoyNjoiY2xvc2Vfb25fYWZ0ZXJfYWN0aW9uX3RpbWUiO3M6MToiMSI7czoyNToiY2xvc2Vfb25fYWZ0ZXJfdGltZV92YWx1ZSI7czoxOiI1IjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czoxNDoic2hvd190aW1lX2Zyb20iO3M6NzoiMTI6MDBhbSI7czoxMjoic2hvd190aW1lX3RvIjtzOjc6IjEyOjAwYW0iO3M6MTQ6InNob3dfZGF0ZV9mcm9tIjtzOjA6IiI7czoxMjoic2hvd19kYXRlX3RvIjtzOjA6IiI7czo3OiJzaG93X3RvIjtzOjg6ImV2ZXJ5b25lIjtzOjI5OiJzaG93X3RvX2ZpcnN0X3RpbWVfdmlzaXRfZGF5cyI7czoyOiIzMCI7czozMDoic2hvd190b191bnRpbF9tYWtlX2FjdGlvbl9kYXlzIjtzOjI6IjMwIjtzOjE1OiJjb3VudF90aW1lc19udW0iO3M6MToiMSI7czoxNToiY291bnRfdGltZXNfbWVzIjtzOjM6ImRheSI7czoyMToiaGlkZV9mb3JfZGV2aWNlc19zaG93IjtzOjE6IjAiO3M6MjQ6ImhpZGVfZm9yX3Bvc3RfdHlwZXNfc2hvdyI7czoxOiIwIjtzOjE3OiJoaWRlX2Zvcl9pcHNfc2hvdyI7czoxOiIwIjtzOjEyOiJoaWRlX2Zvcl9pcHMiO3M6MDoiIjtzOjIzOiJoaWRlX2Zvcl9jb3VudHJpZXNfc2hvdyI7czoxOiIwIjtzOjIzOiJoaWRlX2Zvcl9sYW5ndWFnZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX3NlYXJjaF9lbmdpbmVzX3Nob3ciO3M6MToiMCI7czoxODoiaGlkZV9wcmVnX3VybF9zaG93IjtzOjE6IjAiO3M6MTM6ImhpZGVfcHJlZ191cmwiO3M6MDoiIjtzOjI0OiJoaWRlX2Zvcl91c2VyX3JvbGVzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjIwOntzOjU6IndpZHRoIjtzOjM6IjMwMCI7czoxMzoid2lkdGhfbWVhc3VyZSI7czoyOiJweCI7czo2OiJoZWlnaHQiO3M6MDoiIjtzOjE0OiJoZWlnaHRfbWVhc3VyZSI7czoyOiJweCI7czoxMjoiZmJfbGlrZV9vcHRzIjthOjM6e3M6NDoiaHJlZiI7czo1NzoiaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3BhZ2VzL1N1cHN5c3RpYy8xMzg5MzkwMTk4MDI4OTk5IjtzOjQ6InRhYnMiO2E6MTp7aTowO3M6ODoidGltZWxpbmUiO31zOjEzOiJzaG93X2ZhY2VwaWxlIjtzOjE6IjEiO31zOjE4OiJiZ19vdmVybGF5X29wYWNpdHkiO3M6MzoiMC41IjtzOjE1OiJiZ19vdmVybGF5X3R5cGUiO3M6NToiY29sb3IiO3M6MTY6ImJnX292ZXJsYXlfY29sb3IiO3M6NDoiIzAwMCI7czoxNDoiYmdfb3ZlcmxheV9pbWciO3M6MDoiIjtzOjE4OiJiZ19vdmVybGF5X2ltZ19wb3MiO3M6Nzoic3RyZXRjaCI7czo5OiJiZ190eXBlXzAiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzAiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8wIjtzOjc6IiNmZmZmZmYiO3M6MTU6InJlc3BvbnNpdmVfbW9kZSI7czozOiJkZWYiO3M6MTc6InJlaWRyZWN0X29uX2Nsb3NlIjtzOjA6IiI7czo5OiJjbG9zZV9idG4iO3M6MTE6ImNsYXNzeV9ncmV5IjtzOjExOiJsYXllcmVkX3BvcyI7czozOiJ0b3AiO3M6ODoiYW5pbV9rZXkiO3M6NDoibm9uZSI7czoxMzoiYW5pbV9kdXJhdGlvbiI7czoxOiIxIjtzOjEyOiJzdGF0X2dhX2NvZGUiO3M6MDoiIjt9czoxMDoib3B0c19hdHRycyI7YToyOntzOjk6ImJnX251bWJlciI7czoxOiIxIjtzOjE2OiJ0eHRfYmxvY2tfbnVtYmVyIjtzOjE6IjAiO319","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupFbLikeShell\">\r\n <a href=\"#\" class=\"ppsPopupClose\"></a>\r\n [fb_like_widget_html]\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n /*height: [height][height_measure];*/\r\n [if bg_type_0 == \'color\']\r\n background-color: [bg_color_0];\r\n [elseif bg_type_0 == \'img\']\r\n background-repeat: no_repeat;\r\n background-image: url(\"[bg_img_0]\");\r\n background-size: cover;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n z-index: 99;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n","","1","1","1","2","2015-01-16 19:35:51","3"),
497
  ("5","Video List","1","0","YTozOntzOjQ6Im1haW4iO2E6MTc6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNzoic2hvd19vbl9zY3JvbGxfd2luZG93X2RlbGF5IjtzOjE6IjAiO3M6MzM6InNob3dfb25fc2Nyb2xsX3dpbmRvd19wZXJjX3Njcm9sbCI7czoxOiIwIjtzOjI4OiJzaG93X29uX2FmdGVyX2luYWN0aXZlX3ZhbHVlIjtzOjI6IjEwIjtzOjg6ImNsb3NlX29uIjtzOjEwOiJ1c2VyX2Nsb3NlIjtzOjI1OiJjbG9zZV9vbl9hZnRlcl90aW1lX3ZhbHVlIjtzOjE6IjUiO3M6MTA6InNob3dfcGFnZXMiO3M6MzoiYWxsIjtzOjc6InNob3dfdG8iO3M6ODoiZXZlcnlvbmUiO3M6Mjk6InNob3dfdG9fZmlyc3RfdGltZV92aXNpdF9kYXlzIjtzOjI6IjMwIjtzOjMwOiJzaG93X3RvX3VudGlsX21ha2VfYWN0aW9uX2RheXMiO3M6MjoiMzAiO3M6MjE6ImhpZGVfZm9yX2RldmljZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX2Zvcl9wb3N0X3R5cGVzX3Nob3ciO3M6MToiMCI7czoxNzoiaGlkZV9mb3JfaXBzX3Nob3ciO3M6MToiMCI7czoxMjoiaGlkZV9mb3JfaXBzIjtzOjA6IiI7czoyMzoiaGlkZV9mb3JfY291bnRyaWVzX3Nob3ciO3M6MToiMCI7czoyMzoiaGlkZV9mb3JfbGFuZ3VhZ2VzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjU2OntzOjk6InZpZGVvX3VybCI7czo0MzoiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1uS0l1OXllbjVuYyI7czo1OiJ3aWR0aCI7czozOiI4MjQiO3M6MTM6IndpZHRoX21lYXN1cmUiO3M6MjoicHgiO3M6NjoiaGVpZ2h0IjtzOjM6IjQwMCI7czoxNDoiaGVpZ2h0X21lYXN1cmUiO3M6MjoicHgiO3M6MTg6ImJnX292ZXJsYXlfb3BhY2l0eSI7czozOiIwLjUiO3M6OToiYmdfdHlwZV8wIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18wIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMCI7czo3OiIjZWJlYmViIjtzOjk6ImJnX3R5cGVfMSI7czo1OiJjb2xvciI7czo4OiJiZ19pbWdfMSI7czowOiIiO3M6MTA6ImJnX2NvbG9yXzEiO3M6NzoiIzA2NmRhYiI7czo5OiJiZ190eXBlXzIiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzIiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8yIjtzOjc6IiM4NTAwMDgiO3M6MTA6ImZvbnRfbGFiZWwiO3M6NzoiZGVmYXVsdCI7czoxNjoibGFiZWxfZm9udF9jb2xvciI7czo3OiIjMDAwMDAwIjtzOjExOiJmb250X2Zvb3RlciI7czo3OiJkZWZhdWx0IjtzOjE3OiJmb290ZXJfZm9udF9jb2xvciI7czo3OiIjNTg1ODU4IjtzOjk6ImNsb3NlX2J0biI7czoxMToibGlzdHNfYmxhY2siO3M6MTM6ImVuYl9zdWJzY3JpYmUiO3M6MToiMSI7czo4OiJzdWJfZGVzdCI7czo5OiJ3b3JkcHJlc3MiO3M6MjM6InN1Yl93cF9jcmVhdGVfdXNlcl9yb2xlIjtzOjEwOiJzdWJzY3JpYmVyIjtzOjE5OiJzdWJfYXdlYmVyX2xpc3RuYW1lIjtzOjA6IiI7czoyMToic3ViX2F3ZWJlcl9hZHRyYWNraW5nIjtzOjA6IiI7czoyMToic3ViX21haWxjaGltcF9hcGlfa2V5IjtzOjA6IiI7czoxNDoic3ViX2dyX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfYWNfYXBpX3VybCI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfa2V5IjtzOjA6IiI7czoxODoic3ViX2FyX2Zvcm1fYWN0aW9uIjtzOjA6IiI7czoxMDoic3ViX3NnYV9pZCI7czowOiIiO3M6MTU6InN1Yl9zZ2FfbGlzdF9pZCI7czowOiIiO3M6MjE6InN1Yl9zZ2FfYWN0aXZhdGVfY29kZSI7czowOiIiO3M6MTA6InN1Yl9maWVsZHMiO2E6Mjp7czo1OiJlbWFpbCI7YTo3OntzOjQ6Im5hbWUiO3M6NToiZW1haWwiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjY6IkUtTWFpbCI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjEiO3M6MzoiZW5iIjtzOjE6IjEiO31zOjQ6Im5hbWUiO2E6Nzp7czozOiJlbmIiO3M6MToiMSI7czo0OiJuYW1lIjtzOjQ6Im5hbWUiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjQ6Ik5hbWUiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIwIjt9fXM6MjA6InN1Yl90eHRfY29uZmlybV9zZW50IjtzOjY3OiJDb25maXJtYXRpb24gbGluayB3YXMgc2VudCB0byB5b3VyIGVtYWlsIGFkZHJlc3MuIENoZWNrIHlvdXIgZW1haWwhIjtzOjE1OiJzdWJfdHh0X3N1Y2Nlc3MiO3M6MjQ6IlRoYW5rIHlvdSBmb3Igc3Vic2NyaWJlISI7czoyMToic3ViX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjE2OiJzdWJfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfc3ViamVjdCI7czozNDoiQ29uZmlybSBzdWJzY3JpcHRpb24gb24gW3NpdGVuYW1lXSI7czoyNToic3ViX3R4dF9jb25maXJtX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6Mjg6InN1Yl90eHRfY29uZmlybV9tYWlsX21lc3NhZ2UiO3M6MTk3OiJZb3Ugc3Vic2NyaWJlZCBvbiBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPi4gRm9sbG93IDxhIGhyZWY9XCJbY29uZmlybV9saW5rXVwiPnRoaXMgbGluazwvYT4gdG8gY29tcGxldGUgeW91ciBzdWJzY3JpcHRpb24uIElmIHlvdSBkaWQgbm90IHN1YnNjcmliZSBoZXJlIC0ganVzdCBpZ25vcmUgdGhpcyBtZXNzYWdlLiI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfc3ViamVjdCI7czozNzoiW3NpdGVuYW1lXSBZb3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCI7czoyODoic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MzE6InN1Yl90eHRfc3Vic2NyaWJlcl9tYWlsX21lc3NhZ2UiO3M6NjU6IlVzZXJuYW1lOiBbdXNlcl9sb2dpbl08YnIgLz5QYXNzd29yZDogW3Bhc3N3b3JkXTxiciAvPltsb2dpbl91cmxdIjtzOjI1OiJzdWJfcmVkaXJlY3RfZW1haWxfZXhpc3RzIjtzOjA6IiI7czoxMzoic3ViX2J0bl9sYWJlbCI7czo4OiJTaWduLXVwISI7czoxNToiZW5iX3NtX2ZhY2Vib29rIjtzOjE6IjEiO3M6MTc6ImVuYl9zbV9nb29nbGVwbHVzIjtzOjE6IjEiO3M6MTQ6ImVuYl9zbV90d2l0dGVyIjtzOjE6IjEiO3M6OToic21fZGVzaWduIjtzOjY6InNpbXBsZSI7czo4OiJhbmltX2tleSI7czo0OiJub25lIjtzOjEzOiJhbmltX2R1cmF0aW9uIjtzOjA6IiI7czoxMToibGF5ZXJlZF9wb3MiO3M6MzoidG9wIjtzOjU6ImxhYmVsIjtzOjU5OiJDaGVjayB2aWRlbyBhbmQgPGkgc3R5bGU9XCJjb2xvcjogI2MyMjUyZjtcIj5zdWJzY3JpYmUhPC9pPiI7czoxMzoiZW5iX2Zvb3Rfbm90ZSI7czoxOiIxIjtzOjk6ImZvb3Rfbm90ZSI7czoxMTg6IldlIHJlc3BlY3QgeW91ciBwcml2YWN5LiBZb3VyIGluZm9ybWF0aW9uIHdpbGwgbm90IGJlIHNoYXJlZCB3aXRoIGFueSB0aGlyZCBwYXJ0eSBhbmQgeW91IGNhbiB1bnN1YnNjcmliZSBhdCBhbnkgdGltZSAiO31zOjEwOiJvcHRzX2F0dHJzIjthOjM6e3M6OToiYmdfbnVtYmVyIjtzOjE6IjMiO3M6MTY6InR4dF9ibG9ja19udW1iZXIiO3M6MToiMCI7czoyMToidmlkZW9faGVpZ2h0X2FzX3BvcHVwIjtzOjE6IjEiO319","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose ppsPopupClose_[close_btn]\"></a>\r\n <div class=\"ppsInnerTblContent\">\r\n <div class=\"ppsPopupListsInner ppsPopupInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupListsLabel\">[label]</div>\r\n <div style=\"clear: both;\"></div>\r\n [endif]\r\n <div class=\"ppsPopupVideo \">\r\n [video_html]\r\n </div>\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n <div class=\"ppsRightCol\">\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n padding: 15px;\r\n font-family: Georgia, Times, serif;\r\n font-size: 13px;\r\n line-height: 21px;\r\n font-weight: normal;\r\n color: #000;\r\n}\r\n#ppsPopupShell_[ID] iframe {\r\n width: 100% !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsInnerTblContent {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupInner {\r\n {% if popup.params.tpl.enb_subscribe or popup.params.tpl.enb_foot_note or popup.params.tpl.enb_sm %}\r\n width: 66%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n display: table-cell;\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%, [bg_color_0])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\', endColorstr=\'[bg_color_0]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color: #000;\r\n font-family: \"Myriad Pro\",\"Trebuchet MS\",\"Helvetica Neue\",Helvetica,Arial,Sans-Serif;\r\n font-size: 30px;\r\n letter-spacing: -1px;\r\n line-height: 40px;\r\n letter-spacing: -1px;\r\n font-weight: bold;\r\n margin-top: 15px;\r\n margin-bottom: 16px;\r\n padding-left: 20px;\r\n text-shadow: 0px 0px 1px #000;\r\n -moz-text-shadow: 0px 0px 1px #000;\r\n -webkit-text-shadow: 0px 0px 1px #000;\r\n}\r\n#ppsPopupShell_[ID] .ppsRightCol {\r\n display: table-cell;\r\n width: 34%;\r\n height: 100%;\r\n vertical-align: top;\r\n [if bg_type_1 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}), color-stop(100%, [bg_color_1])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}\', endColorstr=\'[bg_color_1]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 30px 30px 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: 100%;\r\n margin-bottom: 10px;\r\n height: 40px;\r\n border: 1px solid #d1b36d;\r\n border-radius: 10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n box-shadow: 2px 2px 2px #dcdcdc inset;\r\n padding-left: 10px;\r\n font-size: 17px;\r\n background-color: #fff;\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n background-color: transparent;\r\n height: 40px;\r\n border: none;\r\n margin-left: -5px;\r\n font-size: 17px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n font-family: inherit;\r\n height: auto;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text][name=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/mail-icon.png\");\r\n background-repeat: no-repeat;\r\n background-position: 90% center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n border-color: #000;\r\n [if bg_type_2 == \'color\']\r\n background: [bg_color_2];\r\n background: -moz-linear-gradient(90deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -webkit-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -o-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -ms-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: linear-gradient(0deg, [bg_color_2]) 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n [elseif bg_type_2 == \'img\']\r\n background-image: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n color: #fff;\r\n font-size: 20px;\r\n text-shadow: 2px 2px 2px #000;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n box-shadow: inset 1px 1px 3px #666;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupVideo {\r\n width: 100%;\r\n line-height: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose.ppsPopupClose_lists_black {\r\n top: 0 !important;\r\n right: 0 !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote{\r\n color: #585858;\r\n font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n font-size: x-small;\r\n font-style: italic;\r\n line-height: 14px;\r\n margin: 5px 30px;\r\n}","","1","1","1","3","2015-01-10 18:59:43","17"),
498
  ("6","Video Classy","1","0","YTozOntzOjQ6Im1haW4iO2E6MjQ6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNToic2hvd19vbl9jbGlja19vbl9lbF9kZWxheSI7czoxOiIwIjtzOjI3OiJzaG93X29uX3Njcm9sbF93aW5kb3dfZGVsYXkiO3M6MToiMCI7czozMzoic2hvd19vbl9zY3JvbGxfd2luZG93X3BlcmNfc2Nyb2xsIjtzOjE6IjAiO3M6Mjg6InNob3dfb25fYWZ0ZXJfaW5hY3RpdmVfdmFsdWUiO3M6MjoiMTAiO3M6MjU6InNob3dfb25fbGlua19mb2xsb3dfZGVsYXkiO3M6MToiMCI7czo4OiJjbG9zZV9vbiI7czoxMDoidXNlcl9jbG9zZSI7czoyNToiY2xvc2Vfb25fYWZ0ZXJfdGltZV92YWx1ZSI7czoxOiI1IjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czoxNDoic2hvd190aW1lX2Zyb20iO3M6NzoiMTI6MDBhbSI7czoxMjoic2hvd190aW1lX3RvIjtzOjc6IjEyOjAwYW0iO3M6Nzoic2hvd190byI7czo4OiJldmVyeW9uZSI7czoyOToic2hvd190b19maXJzdF90aW1lX3Zpc2l0X2RheXMiO3M6MjoiMzAiO3M6MzA6InNob3dfdG9fdW50aWxfbWFrZV9hY3Rpb25fZGF5cyI7czoyOiIzMCI7czoyMToiaGlkZV9mb3JfZGV2aWNlc19zaG93IjtzOjE6IjAiO3M6MjQ6ImhpZGVfZm9yX3Bvc3RfdHlwZXNfc2hvdyI7czoxOiIwIjtzOjE3OiJoaWRlX2Zvcl9pcHNfc2hvdyI7czoxOiIwIjtzOjEyOiJoaWRlX2Zvcl9pcHMiO3M6MDoiIjtzOjIzOiJoaWRlX2Zvcl9jb3VudHJpZXNfc2hvdyI7czoxOiIwIjtzOjIzOiJoaWRlX2Zvcl9sYW5ndWFnZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX3NlYXJjaF9lbmdpbmVzX3Nob3ciO3M6MToiMCI7czoxODoiaGlkZV9wcmVnX3VybF9zaG93IjtzOjE6IjAiO3M6MTM6ImhpZGVfcHJlZ191cmwiO3M6MDoiIjt9czozOiJ0cGwiO2E6NzE6e3M6OToidmlkZW9fdXJsIjtzOjQzOiJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PW5LSXU5eWVuNW5jIjtzOjU6IndpZHRoIjtzOjM6IjYzMCI7czoxMzoid2lkdGhfbWVhc3VyZSI7czoyOiJweCI7czo2OiJoZWlnaHQiO3M6MzoiNDgwIjtzOjE0OiJoZWlnaHRfbWVhc3VyZSI7czoyOiJweCI7czoxODoiYmdfb3ZlcmxheV9vcGFjaXR5IjtzOjM6IjAuNSI7czo5OiJiZ190eXBlXzAiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzAiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8wIjtzOjc6IiNlY2UwZDEiO3M6OToiYmdfdHlwZV8xIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18xIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMSI7czo3OiIjN2ZiNmNiIjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiIzU1NTU1NSI7czoxMToiZm9udF9mb290ZXIiO3M6NzoiZGVmYXVsdCI7czoxNzoiZm9vdGVyX2ZvbnRfY29sb3IiO3M6NzoiIzk5OTk5OSI7czo5OiJjbG9zZV9idG4iO3M6MTE6ImNsYXNzeV9ncmV5IjtzOjExOiJsYXllcmVkX3BvcyI7czozOiJ0b3AiO3M6NToibGFiZWwiO3M6MTg6Ikxvb2sgb3VyIG5ldyB2aWRlbyI7czo5OiJmb290X25vdGUiO3M6MDoiIjtzOjE1OiJlbmJfc21fZmFjZWJvb2siO3M6MToiMSI7czoxNzoiZW5iX3NtX2dvb2dsZXBsdXMiO3M6MToiMSI7czoxNDoiZW5iX3NtX3R3aXR0ZXIiO3M6MToiMSI7czo5OiJzbV9kZXNpZ24iO3M6Njoic2ltcGxlIjtzOjg6ImFuaW1fa2V5IjtzOjQ6Im5vbmUiO3M6MTM6ImFuaW1fZHVyYXRpb24iO3M6MDoiIjtzOjg6InN1Yl9kZXN0IjtzOjk6IndvcmRwcmVzcyI7czoyMzoic3ViX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTk6InN1Yl9hd2ViZXJfbGlzdG5hbWUiO3M6MDoiIjtzOjIxOiJzdWJfYXdlYmVyX2FkdHJhY2tpbmciO3M6MDoiIjtzOjIxOiJzdWJfbWFpbGNoaW1wX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfZ3JfYXBpX2tleSI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfdXJsIjtzOjA6IiI7czoxNDoic3ViX2FjX2FwaV9rZXkiO3M6MDoiIjtzOjE4OiJzdWJfYXJfZm9ybV9hY3Rpb24iO3M6MDoiIjtzOjEwOiJzdWJfc2dhX2lkIjtzOjA6IiI7czoxNToic3ViX3NnYV9saXN0X2lkIjtzOjA6IiI7czoyMToic3ViX3NnYV9hY3RpdmF0ZV9jb2RlIjtzOjA6IiI7czoxMDoic3ViX2ZpZWxkcyI7YToyOntzOjU6ImVtYWlsIjthOjc6e3M6NDoibmFtZSI7czo1OiJlbWFpbCI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NjoiRS1NYWlsIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMSI7czozOiJlbmIiO3M6MToiMSI7fXM6NDoibmFtZSI7YTo3OntzOjM6ImVuYiI7czoxOiIxIjtzOjQ6Im5hbWUiO3M6NDoibmFtZSI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NDoiTmFtZSI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjAiO319czoyMDoic3ViX3R4dF9jb25maXJtX3NlbnQiO3M6Njc6IkNvbmZpcm1hdGlvbiBsaW5rIHdhcyBzZW50IHRvIHlvdXIgZW1haWwgYWRkcmVzcy4gQ2hlY2sgeW91ciBlbWFpbCEiO3M6MTU6InN1Yl90eHRfc3VjY2VzcyI7czoyNDoiVGhhbmsgeW91IGZvciBzdWJzY3JpYmUhIjtzOjIxOiJzdWJfdHh0X2ludmFsaWRfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MjA6InN1Yl90eHRfZXhpc3RzX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjE2OiJzdWJfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfc3ViamVjdCI7czozNDoiQ29uZmlybSBzdWJzY3JpcHRpb24gb24gW3NpdGVuYW1lXSI7czoyNToic3ViX3R4dF9jb25maXJtX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6Mjg6InN1Yl90eHRfY29uZmlybV9tYWlsX21lc3NhZ2UiO3M6MTk3OiJZb3Ugc3Vic2NyaWJlZCBvbiBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPi4gRm9sbG93IDxhIGhyZWY9XCJbY29uZmlybV9saW5rXVwiPnRoaXMgbGluazwvYT4gdG8gY29tcGxldGUgeW91ciBzdWJzY3JpcHRpb24uIElmIHlvdSBkaWQgbm90IHN1YnNjcmliZSBoZXJlIC0ganVzdCBpZ25vcmUgdGhpcyBtZXNzYWdlLiI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfc3ViamVjdCI7czozNzoiW3NpdGVuYW1lXSBZb3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCI7czoyODoic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MzE6InN1Yl90eHRfc3Vic2NyaWJlcl9tYWlsX21lc3NhZ2UiO3M6NjU6IlVzZXJuYW1lOiBbdXNlcl9sb2dpbl08YnIgLz5QYXNzd29yZDogW3Bhc3N3b3JkXTxiciAvPltsb2dpbl91cmxdIjtzOjI1OiJzdWJfcmVkaXJlY3RfZW1haWxfZXhpc3RzIjtzOjA6IiI7czoxMzoic3ViX2J0bl9sYWJlbCI7czo4OiJTaWduLVVwISI7czoxMzoic3ViX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InN1Yl9uZXdfbWVzc2FnZSI7czoxMjk6IllvdSBoYXZlIG5ldyBzdWJzY3JpYmVyIG9uIHlvdXIgc2l0ZSA8YSBocmVmPVwiW3NpdGV1cmxdXCI+W3NpdGVuYW1lXTwvYT4sIGhlcmUgdXMgc3Vic2NyaWJlciBpbmZvcm1hdGlvbjo8YnIgLz5bc3Vic2NyaWJlcl9kYXRhXSI7czoxODoibG9naW5fcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoxNToibG9naW5fYnRuX2xhYmVsIjtzOjU6IkxvZ2luIjtzOjE2OiJyZWdfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyMzoicmVnX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTM6InJlZ19idG5fbGFiZWwiO3M6ODoiUmVnaXN0ZXIiO3M6MTA6InJlZ19maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjc6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo0OiJOYW1lIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMCI7fXM6NToiZW1haWwiO2E6Nzp7czo0OiJuYW1lIjtzOjU6ImVtYWlsIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo2OiJFLU1haWwiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIxIjtzOjM6ImVuYiI7czoxOiIxIjt9fXM6MjA6InJlZ190eHRfY29uZmlybV9zZW50IjtzOjY3OiJDb25maXJtYXRpb24gbGluayB3YXMgc2VudCB0byB5b3VyIGVtYWlsIGFkZHJlc3MuIENoZWNrIHlvdXIgZW1haWwhIjtzOjE1OiJyZWdfdHh0X3N1Y2Nlc3MiO3M6Mjc6IlRoYW5rIHlvdSBmb3IgcmVnaXN0cmF0aW9uISI7czoyMToicmVnX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjI4OiJyZWdfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHJlZ2lzdHJhdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJyZWdfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoicmVnX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTY6IllvdSByZWdpc3RlcmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHJlZ2lzdHJhdGlvbi4gSWYgeW91IGRpZCBub3QgcmVnaXN0ZXIgaGVyZSAtIGp1c3QgaWdub3JlIHRoaXMgbWVzc2FnZS4iO3M6MzE6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX3N1YmplY3QiO3M6Mzc6IltzaXRlbmFtZV0gWW91ciB1c2VybmFtZSBhbmQgcGFzc3dvcmQiO3M6Mjg6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX2Zyb20iO3M6MTQ6ImFkbWluQG1haWwuY29tIjtzOjMxOiJyZWdfdHh0X3N1YnNjcmliZXJfbWFpbF9tZXNzYWdlIjtzOjY1OiJVc2VybmFtZTogW3VzZXJfbG9naW5dPGJyIC8+UGFzc3dvcmQ6IFtwYXNzd29yZF08YnIgLz5bbG9naW5fdXJsXSI7czoxMzoicmVnX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InJlZ19uZXdfbWVzc2FnZSI7czoxMjE6IllvdSBoYXZlIG5ldyBtZW1iZXIgb24geW91ciBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPiwgaGVyZSB1cyBtZW1iZXIgaW5mb3JtYXRpb246PGJyIC8+W3N1YnNjcmliZXJfZGF0YV0iO31zOjEwOiJvcHRzX2F0dHJzIjthOjQ6e3M6OToiYmdfbnVtYmVyIjtzOjE6IjIiO3M6MTY6InR4dF9ibG9ja19udW1iZXIiO3M6MToiMCI7czoyMDoidmlkZW9fd2lkdGhfYXNfcG9wdXAiO3M6MToiMSI7czoyMToidmlkZW9faGVpZ2h0X2FzX3BvcHVwIjtzOjE6IjEiO319","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupClassyShell\">\r\n <a href=\"#\" class=\"ppsPopupClose\"></a>\r\n <div class=\"ppsPopupClassyInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupClassyLabel\">[label]</div>\r\n [endif]\r\n <div class=\"ppsPopupVideo\">\r\n [video_html]\r\n </div>\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">[foot_note]</div>\r\n [endif]\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n [if bg_type_0 == \'color\']\r\n background-color: {{ popup.params.tpl.bg_color_0 }};\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-size: 100%;\r\n background-repeat: no-repeat;\r\n [endif]\r\n padding: 7px;\r\n}\r\n#ppsPopupShell_[ID], #ppsPopupShell_[ID] * {\r\n -webkit-box-sizing: content-box;\r\n -moz-box-sizing: content-box;\r\n box-sizing: content-box;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyInner {\r\n padding: 0;\r\n border: {{ adjust_brightness(popup.params.tpl.bg_color_0, 30) }};\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ popup.params.tpl.bg_color_0 }}), color-stop(100%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }})); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ popup.params.tpl.bg_color_0 }}\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }}\',GradientType=1 ); /* ie6-9 */\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n height: 48px;\r\n font-size: 27px;\r\n border: none;\r\n padding: 1px 8px 0;\r\n width: calc((100% - 70px) / 3);\r\n box-sizing: content-box;\r\n margin-top: 10px;\r\n float: left;\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n [if bg_type_0 == \'color\']\r\n -webkit-box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n -moz-box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n background-color: {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }};\r\n color: {{ adjust_brightness(popup.params.tpl.bg_color_0, -100) }};\r\n [endif]\r\n margin-right: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n height: 48px;\r\n vertical-align: middle;\r\n background-color: transparent;\r\n border: none;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select option {\r\n font-size: 27px;\r\n color: #6d6d6d;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: calc(100% - 30px);\r\n height: auto;\r\n font-family: inherit;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n color: #eee;\r\n margin-right: 0;\r\n cursor: pointer;\r\n [if bg_type_1 == \'color\']\r\n text-shadow: -1px -1px 1px {{ adjust_brightness(popup.params.tpl.bg_color_1, -80) }};\r\n border: 1px solid {{ adjust_brightness(popup.params.tpl.bg_color_1, -40) }};\r\n background: -moz-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ popup.params.tpl.bg_color_1 }}), color-stop(100%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }})); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ popup.params.tpl.bg_color_1 }}\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }}\',GradientType=1 ); /* ie6-9 */\r\n\r\n -webkit-box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n -moz-box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-size: 100%;\r\n background-repeat: no-repeat;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:disabled {\r\n color: transparent;\r\n cursor: progress;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell {\r\n padding-top: 10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyLabel {\r\n width: 100%;\r\n text-align: center;\r\n color: #555555;\r\n text-shadow: 1px 1px 1px #ffffff;\r\n font-size: 35px;\r\n margin-top: 26px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSuccessMsg {\r\n color: #555555;\r\n border: 1px solid #555555;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyTxt {\r\n font-size: 20px;\r\n line-height: 160%;\r\n color: rgb(85, 85, 85);\r\n padding-top: 14px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupVideo {\r\n width: 100%;\r\n line-height: 0;\r\n padding: 0;\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupVideo iframe {\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] ul {\r\n margin-top: 15px;\r\n padding-left: 0;\r\n}\r\n#ppsPopupShell_[ID] ul li {\r\n list-style: inside none disc;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote {\r\n color: #999;\r\n font-size: 12px;\r\n padding-top: 10px;\r\n text-align: center;\r\n}\r\n/*SM*/\r\n#ppsPopupShell_[ID] .ppsSm {\r\n padding: 10px 10px 0 10px;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_1_435376 .ppsSm > div {\r\n vertical-align: top !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsSm .ppsSmBtn {\r\n margin-right: 5px;\r\n}","","1","1","1","3","2015-01-03 17:00:43","16"),
499
  ("7","Layered Popup","1","0","YTozOntzOjQ6Im1haW4iO2E6MjE6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNToic2hvd19vbl9jbGlja19vbl9lbF9kZWxheSI7czoxOiIwIjtzOjI3OiJzaG93X29uX3Njcm9sbF93aW5kb3dfZGVsYXkiO3M6MToiMCI7czozMzoic2hvd19vbl9zY3JvbGxfd2luZG93X3BlcmNfc2Nyb2xsIjtzOjE6IjAiO3M6Mjg6InNob3dfb25fYWZ0ZXJfaW5hY3RpdmVfdmFsdWUiO3M6MjoiMTAiO3M6MjU6InNob3dfb25fbGlua19mb2xsb3dfZGVsYXkiO3M6MToiMCI7czo4OiJjbG9zZV9vbiI7czoxMDoidXNlcl9jbG9zZSI7czoyNToiY2xvc2Vfb25fYWZ0ZXJfdGltZV92YWx1ZSI7czoxOiI1IjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czoxNDoic2hvd190aW1lX2Zyb20iO3M6NzoiMTI6MDBhbSI7czoxMjoic2hvd190aW1lX3RvIjtzOjc6IjEyOjAwYW0iO3M6Nzoic2hvd190byI7czo4OiJldmVyeW9uZSI7czoyOToic2hvd190b19maXJzdF90aW1lX3Zpc2l0X2RheXMiO3M6MjoiMzAiO3M6MzA6InNob3dfdG9fdW50aWxfbWFrZV9hY3Rpb25fZGF5cyI7czoyOiIzMCI7czoyMToiaGlkZV9mb3JfZGV2aWNlc19zaG93IjtzOjE6IjAiO3M6MjQ6ImhpZGVfZm9yX3Bvc3RfdHlwZXNfc2hvdyI7czoxOiIwIjtzOjE3OiJoaWRlX2Zvcl9pcHNfc2hvdyI7czoxOiIwIjtzOjEyOiJoaWRlX2Zvcl9pcHMiO3M6MDoiIjtzOjIzOiJoaWRlX2Zvcl9jb3VudHJpZXNfc2hvdyI7czoxOiIwIjtzOjIzOiJoaWRlX2Zvcl9sYW5ndWFnZXNfc2hvdyI7czoxOiIwIjt9czozOiJ0cGwiO2E6ODA6e3M6NToid2lkdGgiO3M6MzoiNDAwIjtzOjEzOiJ3aWR0aF9tZWFzdXJlIjtzOjI6InB4IjtzOjE4OiJiZ19vdmVybGF5X29wYWNpdHkiO3M6MzoiMC41IjtzOjk6ImJnX3R5cGVfMCI7czo1OiJjb2xvciI7czo4OiJiZ19pbWdfMCI7czowOiIiO3M6MTA6ImJnX2NvbG9yXzAiO3M6NzoiI2YwNjIyZSI7czo5OiJiZ190eXBlXzEiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzEiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8xIjtzOjc6IiNkYWQyYmYiO3M6OToiYmdfdHlwZV8yIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18yIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMiI7czo3OiIjNTU1NTU1IjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiI2ZmZmZmZiI7czoxMDoiZm9udF90eHRfMCI7czo3OiJkZWZhdWx0IjtzOjE3OiJ0ZXh0X2ZvbnRfY29sb3JfMCI7czo3OiIjZmZmZmZmIjtzOjExOiJmb250X2Zvb3RlciI7czo3OiJkZWZhdWx0IjtzOjE3OiJmb290ZXJfZm9udF9jb2xvciI7czo3OiIjNTg1ODU4IjtzOjE1OiJyZXNwb25zaXZlX21vZGUiO3M6MzoiZGVmIjtzOjk6ImNsb3NlX2J0biI7czoxMToid2hpbGVfY2xvc2UiO3M6NzoiYnVsbGV0cyI7czoxMToibGlzdHNfZ3JlZW4iO3M6MTE6ImxheWVyZWRfcG9zIjtzOjM6InRvcCI7czo5OiJlbmJfbGFiZWwiO3M6MToiMSI7czo1OiJsYWJlbCI7czoxODoiVGhlIEJlc3QgV29yZFByZXNzIjtzOjk6ImVuYl90eHRfMCI7czoxOiIxIjtzOjEzOiJlbmJfZm9vdF9ub3RlIjtzOjE6IjEiO3M6OToiZm9vdF9ub3RlIjtzOjExODoiV2UgcmVzcGVjdCB5b3VyIHByaXZhY3kuIFlvdXIgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgc2hhcmVkIHdpdGggYW55IHRoaXJkIHBhcnR5IGFuZCB5b3UgY2FuIHVuc3Vic2NyaWJlIGF0IGFueSB0aW1lICI7czo2OiJlbmJfc20iO3M6MToiMSI7czoxNToiZW5iX3NtX2ZhY2Vib29rIjtzOjE6IjEiO3M6MTc6ImVuYl9zbV9nb29nbGVwbHVzIjtzOjE6IjEiO3M6MTQ6ImVuYl9zbV90d2l0dGVyIjtzOjE6IjEiO3M6OToic21fZGVzaWduIjtzOjQ6ImJveHkiO3M6ODoiYW5pbV9rZXkiO3M6NDoibm9uZSI7czoxMzoiYW5pbV9kdXJhdGlvbiI7czozOiI1MDAiO3M6MTM6ImVuYl9zdWJzY3JpYmUiO3M6MToiMSI7czo4OiJzdWJfZGVzdCI7czo5OiJ3b3JkcHJlc3MiO3M6MjM6InN1Yl93cF9jcmVhdGVfdXNlcl9yb2xlIjtzOjEwOiJzdWJzY3JpYmVyIjtzOjE5OiJzdWJfYXdlYmVyX2xpc3RuYW1lIjtzOjA6IiI7czoyMToic3ViX2F3ZWJlcl9hZHRyYWNraW5nIjtzOjA6IiI7czoyMToic3ViX21haWxjaGltcF9hcGlfa2V5IjtzOjA6IiI7czoxNDoic3ViX2dyX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfYWNfYXBpX3VybCI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfa2V5IjtzOjA6IiI7czoxODoic3ViX2FyX2Zvcm1fYWN0aW9uIjtzOjA6IiI7czoxMDoic3ViX3NnYV9pZCI7czowOiIiO3M6MTU6InN1Yl9zZ2FfbGlzdF9pZCI7czowOiIiO3M6MjE6InN1Yl9zZ2FfYWN0aXZhdGVfY29kZSI7czowOiIiO3M6MTA6InN1Yl9maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjc6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo0OiJOYW1lIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMCI7fXM6NToiZW1haWwiO2E6Nzp7czo0OiJuYW1lIjtzOjU6ImVtYWlsIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo2OiJFLU1haWwiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIxIjtzOjM6ImVuYiI7czoxOiIxIjt9fXM6MjA6InN1Yl90eHRfY29uZmlybV9zZW50IjtzOjY3OiJDb25maXJtYXRpb24gbGluayB3YXMgc2VudCB0byB5b3VyIGVtYWlsIGFkZHJlc3MuIENoZWNrIHlvdXIgZW1haWwhIjtzOjE1OiJzdWJfdHh0X3N1Y2Nlc3MiO3M6MjQ6IlRoYW5rIHlvdSBmb3Igc3Vic2NyaWJlISI7czoyMToic3ViX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjE2OiJzdWJfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfc3ViamVjdCI7czozNDoiQ29uZmlybSBzdWJzY3JpcHRpb24gb24gW3NpdGVuYW1lXSI7czoyNToic3ViX3R4dF9jb25maXJtX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6Mjg6InN1Yl90eHRfY29uZmlybV9tYWlsX21lc3NhZ2UiO3M6MTk3OiJZb3Ugc3Vic2NyaWJlZCBvbiBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPi4gRm9sbG93IDxhIGhyZWY9XCJbY29uZmlybV9saW5rXVwiPnRoaXMgbGluazwvYT4gdG8gY29tcGxldGUgeW91ciBzdWJzY3JpcHRpb24uIElmIHlvdSBkaWQgbm90IHN1YnNjcmliZSBoZXJlIC0ganVzdCBpZ25vcmUgdGhpcyBtZXNzYWdlLiI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfc3ViamVjdCI7czozNzoiW3NpdGVuYW1lXSBZb3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCI7czoyODoic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MzE6InN1Yl90eHRfc3Vic2NyaWJlcl9tYWlsX21lc3NhZ2UiO3M6NjU6IlVzZXJuYW1lOiBbdXNlcl9sb2dpbl08YnIgLz5QYXNzd29yZDogW3Bhc3N3b3JkXTxiciAvPltsb2dpbl91cmxdIjtzOjI1OiJzdWJfcmVkaXJlY3RfZW1haWxfZXhpc3RzIjtzOjA6IiI7czoxMzoic3ViX2J0bl9sYWJlbCI7czo4OiJTaWduLXVwISI7czoxMzoic3ViX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InN1Yl9uZXdfbWVzc2FnZSI7czoxMjk6IllvdSBoYXZlIG5ldyBzdWJzY3JpYmVyIG9uIHlvdXIgc2l0ZSA8YSBocmVmPVwiW3NpdGV1cmxdXCI+W3NpdGVuYW1lXTwvYT4sIGhlcmUgdXMgc3Vic2NyaWJlciBpbmZvcm1hdGlvbjo8YnIgLz5bc3Vic2NyaWJlcl9kYXRhXSI7czoxODoibG9naW5fcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoxNToibG9naW5fYnRuX2xhYmVsIjtzOjU6IkxvZ2luIjtzOjE2OiJyZWdfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyMzoicmVnX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTM6InJlZ19idG5fbGFiZWwiO3M6ODoiUmVnaXN0ZXIiO3M6MTA6InJlZ19maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjc6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo0OiJOYW1lIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMCI7fXM6NToiZW1haWwiO2E6Nzp7czo0OiJuYW1lIjtzOjU6ImVtYWlsIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo2OiJFLU1haWwiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIxIjtzOjM6ImVuYiI7czoxOiIxIjt9fXM6MjA6InJlZ190eHRfY29uZmlybV9zZW50IjtzOjY3OiJDb25maXJtYXRpb24gbGluayB3YXMgc2VudCB0byB5b3VyIGVtYWlsIGFkZHJlc3MuIENoZWNrIHlvdXIgZW1haWwhIjtzOjE1OiJyZWdfdHh0X3N1Y2Nlc3MiO3M6Mjc6IlRoYW5rIHlvdSBmb3IgcmVnaXN0cmF0aW9uISI7czoyMToicmVnX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjI4OiJyZWdfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHJlZ2lzdHJhdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJyZWdfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoicmVnX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTY6IllvdSByZWdpc3RlcmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHJlZ2lzdHJhdGlvbi4gSWYgeW91IGRpZCBub3QgcmVnaXN0ZXIgaGVyZSAtIGp1c3QgaWdub3JlIHRoaXMgbWVzc2FnZS4iO3M6MzE6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX3N1YmplY3QiO3M6Mzc6IltzaXRlbmFtZV0gWW91ciB1c2VybmFtZSBhbmQgcGFzc3dvcmQiO3M6Mjg6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX2Zyb20iO3M6MTQ6ImFkbWluQG1haWwuY29tIjtzOjMxOiJyZWdfdHh0X3N1YnNjcmliZXJfbWFpbF9tZXNzYWdlIjtzOjY1OiJVc2VybmFtZTogW3VzZXJfbG9naW5dPGJyIC8+UGFzc3dvcmQ6IFtwYXNzd29yZF08YnIgLz5bbG9naW5fdXJsXSI7czoxMzoicmVnX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InJlZ19uZXdfbWVzc2FnZSI7czoxMjE6IllvdSBoYXZlIG5ldyBtZW1iZXIgb24geW91ciBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPiwgaGVyZSB1cyBtZW1iZXIgaW5mb3JtYXRpb246PGJyIC8+W3N1YnNjcmliZXJfZGF0YV0iO3M6NToidHh0XzAiO3M6MTcyOiI8cD5Qb3B1cCBieSBTdXBzeXN0aWMgbGV0cyB5b3UgZWFzaWx5IGNyZWF0ZSBlbGVnYW50IG92ZXJsYXBwaW5nIHdpbmRvd3Mgd2l0aCB1bmxpbWl0ZWQgZmVhdHVyZXMuIFBvcC11cHMgd2l0aCBTbGlkZXIsIExpZ2h0Ym94LCBDb250YWN0IGFuZCBTdWJzY3JpcHRpb24gZm9ybXMgYW5kIG1vcmU8L3A+Ijt9czoxMDoib3B0c19hdHRycyI7YToyOntzOjk6ImJnX251bWJlciI7czoxOiIzIjtzOjE2OiJ0eHRfYmxvY2tfbnVtYmVyIjtzOjE6IjEiO319","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose ppsPopupClose_[close_btn]\"></a>\r\n <div class=\"ppsInnerTblContent\">\r\n <div class=\"ppsPopupListsInner ppsPopupInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupListsLabel\">[label]</div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupClassyTxt_0 ppsPopupTxt_0\">\r\n [txt_0]\r\n </div>\r\n [endif]\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n <div class=\"ppsRightCol\">\r\n [if enb_sm]\r\n <div style=\"clear: both;\"></div>\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n </div>\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n padding: 15px;\r\n font-family: Georgia, Times, serif;\r\n font-size: 13px;\r\n line-height: 21px;\r\n font-weight: normal;\r\n color: #fff;\r\n}\r\n#ppsPopupShell_[ID], #ppsPopupShell_[ID] * {\r\n -webkit-box-sizing: content-box;\r\n -moz-box-sizing: content-box;\r\n box-sizing: content-box;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupInner {\r\n {% if popup.params.tpl.enb_subscribe or popup.params.tpl.enb_foot_note or popup.params.tpl.enb_sm %}\r\n width: 100%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%, [bg_color_0])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\', endColorstr=\'[bg_color_0]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color: #FFF;\r\n font-family: \"Myriad Pro\",\"Trebuchet MS\",\"Helvetica Neue\",Helvetica,Arial,Sans-Serif;\r\n font-size: 30px;\r\n letter-spacing: -1px;\r\n line-height: 40px;\r\n letter-spacing: -1px;\r\n font-weight: bold;\r\n text-align: center;\r\n margin-bottom: 16px;\r\n padding-left: 20px;\r\n -moz-text-shadow: 0px 0px 1px #000;\r\n -webkit-text-shadow: 0px 0px 1px #000;\r\n}\r\n#ppsPopupShell_[ID] .ppsRightCol {\r\n height: 100%;\r\n [if bg_type_1 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}), color-stop(100%, [bg_color_1])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}\', endColorstr=\'[bg_color_1]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 10% 15% 0;\r\n text-align:center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n margin-bottom: 10px;\r\n height: 40px;\r\n border: 1px solid #d1b36d;\r\n color: #888;\r\n text-shadow: 1px 1px 5px #888;\r\n padding: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n box-shadow: 2px 2px 2px #dcdcdc inset;\r\n font-size: 17px;\r\n width:100%;\r\n background-color: #fff;\r\n padding-left: 10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n text-align: left;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n background-color: transparent;\r\n height: 40px;\r\n border: none;\r\n font-size: 17px;\r\n color: #888;\r\n text-shadow: 1px 1px 5px #888;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n font-family: inherit;\r\n height: auto;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text][name=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/mail-icon.png\");\r\n background-repeat: no-repeat;\r\n background-position: 90% center;\r\n width:100%;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n border-color: #000;\r\n width: 60%;\r\n [if bg_type_2 == \'color\']\r\n background: [bg_color_2];\r\n box-shadow: -4px -4px 0px rgba(0, 0, 0, 0.1) inset;\r\n [elseif bg_type_2 == \'img\']\r\n background-image: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n color: #fff;\r\n font-size: 20px;\r\n text-shadow: 1px 1px 1px #000;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n box-shadow: 4px 4px 0px rgba(0, 0, 0, 0.1) inset;\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n float: left;\r\n width: 80%;\r\n margin-left: 10%;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_1 {\r\n float: right;\r\n [if enb_txt_0]\r\n width: 50%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n top:15px;\r\n right:10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose.ppsPopupClose_lists_black {\r\n top: 0 !important;\r\n right: 0 !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote{\r\n color: #585858;\r\n font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n font-size: x-small;\r\n font-style: italic;\r\n line-height: 14px;\r\n margin: 5px 30px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSm{\r\nmargin-top:20px;\r\n}","layered-popup.jpg","1","1","1","1","2015-01-10 18:59:43","1"),
@@ -552,9 +552,6 @@ class installerPps {
552
  if(dbPps::get('SELECT COUNT(*) AS total FROM @__popup WHERE id = 27 AND original_id = 0', 'one')) {
553
  dbPps::query('UPDATE @__popup SET label="New York",active="1",original_id="0",params="YTozOntzOjQ6Im1haW4iO2E6MzA6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNToic2hvd19vbl9jbGlja19vbl9lbF9kZWxheSI7czoxOiIwIjtzOjI3OiJzaG93X29uX3Njcm9sbF93aW5kb3dfZGVsYXkiO3M6MToiMCI7czozMzoic2hvd19vbl9zY3JvbGxfd2luZG93X3BlcmNfc2Nyb2xsIjtzOjE6IjAiO3M6Mjg6InNob3dfb25fYWZ0ZXJfaW5hY3RpdmVfdmFsdWUiO3M6MjoiMTAiO3M6MjU6InNob3dfb25fbGlua19mb2xsb3dfZGVsYXkiO3M6MToiMCI7czo4OiJjbG9zZV9vbiI7czoxMDoidXNlcl9jbG9zZSI7czoyNjoiY2xvc2Vfb25fYWZ0ZXJfYWN0aW9uX3RpbWUiO3M6MToiMSI7czoyNToiY2xvc2Vfb25fYWZ0ZXJfdGltZV92YWx1ZSI7czoxOiI1IjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czoxNDoic2hvd190aW1lX2Zyb20iO3M6NzoiMTI6MDBhbSI7czoxMjoic2hvd190aW1lX3RvIjtzOjc6IjEyOjAwYW0iO3M6MTQ6InNob3dfZGF0ZV9mcm9tIjtzOjA6IiI7czoxMjoic2hvd19kYXRlX3RvIjtzOjA6IiI7czo3OiJzaG93X3RvIjtzOjg6ImV2ZXJ5b25lIjtzOjI5OiJzaG93X3RvX2ZpcnN0X3RpbWVfdmlzaXRfZGF5cyI7czoyOiIzMCI7czozMDoic2hvd190b191bnRpbF9tYWtlX2FjdGlvbl9kYXlzIjtzOjI6IjMwIjtzOjE1OiJjb3VudF90aW1lc19udW0iO3M6MToiMSI7czoxNToiY291bnRfdGltZXNfbWVzIjtzOjM6ImRheSI7czoyMToiaGlkZV9mb3JfZGV2aWNlc19zaG93IjtzOjE6IjAiO3M6MjQ6ImhpZGVfZm9yX3Bvc3RfdHlwZXNfc2hvdyI7czoxOiIwIjtzOjE3OiJoaWRlX2Zvcl9pcHNfc2hvdyI7czoxOiIwIjtzOjEyOiJoaWRlX2Zvcl9pcHMiO3M6MDoiIjtzOjIzOiJoaWRlX2Zvcl9jb3VudHJpZXNfc2hvdyI7czoxOiIwIjtzOjIzOiJoaWRlX2Zvcl9sYW5ndWFnZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX3NlYXJjaF9lbmdpbmVzX3Nob3ciO3M6MToiMCI7czoxODoiaGlkZV9wcmVnX3VybF9zaG93IjtzOjE6IjAiO3M6MTM6ImhpZGVfcHJlZ191cmwiO3M6MDoiIjtzOjI0OiJoaWRlX2Zvcl91c2VyX3JvbGVzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjEwOTp7czo1OiJ3aWR0aCI7czozOiI4MjQiO3M6MTM6IndpZHRoX21lYXN1cmUiO3M6MjoicHgiO3M6MTg6ImJnX292ZXJsYXlfb3BhY2l0eSI7czozOiIwLjUiO3M6MTU6ImJnX292ZXJsYXlfdHlwZSI7czo1OiJjb2xvciI7czoxNjoiYmdfb3ZlcmxheV9jb2xvciI7czo0OiIjMDAwIjtzOjE0OiJiZ19vdmVybGF5X2ltZyI7czowOiIiO3M6MTg6ImJnX292ZXJsYXlfaW1nX3BvcyI7czo3OiJzdHJldGNoIjtzOjk6ImJnX3R5cGVfMCI7czo1OiJjb2xvciI7czo4OiJiZ19pbWdfMCI7czowOiIiO3M6MTA6ImJnX2NvbG9yXzAiO3M6NzoiI2ZmZmZmZiI7czo5OiJiZ190eXBlXzEiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzEiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8xIjtzOjc6IiM4YmE2ZTgiO3M6OToiYmdfdHlwZV8yIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18yIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMiI7czo3OiIjZmZjMThkIjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiI2ZmZmZmZiI7czoxMDoiZm9udF90eHRfMCI7czo3OiJkZWZhdWx0IjtzOjE3OiJ0ZXh0X2ZvbnRfY29sb3JfMCI7czo3OiIjODg4ODg4IjtzOjExOiJmb250X2Zvb3RlciI7czo3OiJkZWZhdWx0IjtzOjE3OiJmb290ZXJfZm9udF9jb2xvciI7czo3OiIjZmZmZmZmIjtzOjE1OiJyZXNwb25zaXZlX21vZGUiO3M6MzoiZGVmIjtzOjE3OiJyZWlkcmVjdF9vbl9jbG9zZSI7czowOiIiO3M6OToiY2xvc2VfYnRuIjtzOjExOiJ3aGlsZV9jbG9zZSI7czo3OiJidWxsZXRzIjtzOjEyOiJjaXJjbGVfZ3JlZW4iO3M6MTE6ImxheWVyZWRfcG9zIjtzOjM6InRvcCI7czo5OiJlbmJfbGFiZWwiO3M6MToiMSI7czo1OiJsYWJlbCI7czo2NjoiU3Vic2NyaWJlIHRvIG91ciBuZXdzbGV0dGVyIGFuZCBzdGFydCBpbmNyZWFzaW5nIHlvdXIgcHJvZml0cyBub3chIjtzOjk6ImVuYl90eHRfMCI7czoxOiIxIjtzOjEzOiJlbmJfZm9vdF9ub3RlIjtzOjE6IjEiO3M6OToiZm9vdF9ub3RlIjtzOjQ1OiJXZSBuZXZlciBzaGFyZSB5b3VyIGUtbWFpbCB3aXRoIHRoaXJkIHBhcnRpZXMiO3M6MTU6ImVuYl9zbV9mYWNlYm9vayI7czoxOiIxIjtzOjE3OiJlbmJfc21fZ29vZ2xlcGx1cyI7czoxOiIxIjtzOjE0OiJlbmJfc21fdHdpdHRlciI7czoxOiIxIjtzOjk6InNtX2Rlc2lnbiI7czo2OiJzaW1wbGUiO3M6ODoiYW5pbV9rZXkiO3M6NDoibm9uZSI7czoxMzoiYW5pbV9kdXJhdGlvbiI7czowOiIiO3M6MTM6ImVuYl9zdWJzY3JpYmUiO3M6MToiMSI7czo4OiJzdWJfZGVzdCI7czo5OiJ3b3JkcHJlc3MiO3M6MjM6InN1Yl93cF9jcmVhdGVfdXNlcl9yb2xlIjtzOjEwOiJzdWJzY3JpYmVyIjtzOjE5OiJzdWJfYXdlYmVyX2xpc3RuYW1lIjtzOjA6IiI7czoyMToic3ViX2F3ZWJlcl9hZHRyYWNraW5nIjtzOjA6IiI7czoyMToic3ViX21haWxjaGltcF9hcGlfa2V5IjtzOjA6IiI7czoyNToic3ViX21haWxjaGltcF9ncm91cHNfZnVsbCI7czowOiIiO3M6MTQ6InN1Yl9ncl9hcGlfa2V5IjtzOjA6IiI7czoxNjoic3ViX2dyX2N5Y2xlX2RheSI7czoxOiIwIjtzOjEzOiJzdWJfaWNfYXBwX2lkIjtzOjA6IiI7czoxNToic3ViX2ljX2FwcF91c2VyIjtzOjA6IiI7czoxNToic3ViX2ljX2FwcF9wYXNzIjtzOjA6IiI7czoxNDoic3ViX2FjX2FwaV91cmwiO3M6MDoiIjtzOjE0OiJzdWJfYWNfYXBpX2tleSI7czowOiIiO3M6MTg6InN1Yl9hcl9mb3JtX2FjdGlvbiI7czowOiIiO3M6MTA6InN1Yl9zZ2FfaWQiO3M6MDoiIjtzOjE1OiJzdWJfc2dhX2xpc3RfaWQiO3M6MDoiIjtzOjIxOiJzdWJfc2dhX2FjdGl2YXRlX2NvZGUiO3M6MDoiIjtzOjEzOiJzdWJfc2ZfYXBwX2lkIjtzOjA6IiI7czoxNDoic3ViX2NrX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfbWVtX2FjY19pZCI7czowOiIiO3M6MTU6InN1Yl9tZW1fcHVkX2tleSI7czowOiIiO3M6MTY6InN1Yl9tZW1fcHJpdl9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfc2JfYXBpX2tleSI7czowOiIiO3M6MTQ6InN1Yl92Nl9hcGlfa2V5IjtzOjA6IiI7czoxMjoic3ViX3Z0aWdfdXJsIjtzOjA6IiI7czoxMzoic3ViX3Z0aWdfbmFtZSI7czowOiIiO3M6MTI6InN1Yl92dGlnX2tleSI7czowOiIiO3M6MTY6InN1Yl95bWxwX2FwaV9rZXkiO3M6MDoiIjtzOjEzOiJzdWJfeW1scF9uYW1lIjtzOjA6IiI7czoxMToic3ViXzRkX25hbWUiO3M6MDoiIjtzOjExOiJzdWJfNGRfcGFzcyI7czowOiIiO3M6MTA6InN1Yl9maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjg6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo0OiJOYW1lIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMCI7czoxMDoic2V0X3ByZXNldCI7czowOiIiO31zOjU6ImVtYWlsIjthOjg6e3M6NDoibmFtZSI7czo1OiJlbWFpbCI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NjoiRS1NYWlsIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMSI7czoxMDoic2V0X3ByZXNldCI7czowOiIiO3M6MzoiZW5iIjtzOjE6IjEiO319czo5OiJibGFja2xpc3QiO3M6MDoiIjtzOjIwOiJzdWJfdHh0X2NvbmZpcm1fc2VudCI7czo2NzoiQ29uZmlybWF0aW9uIGxpbmsgd2FzIHNlbnQgdG8geW91ciBlbWFpbCBhZGRyZXNzLiBDaGVjayB5b3VyIGVtYWlsISI7czoxNToic3ViX3R4dF9zdWNjZXNzIjtzOjI0OiJUaGFuayB5b3UgZm9yIHN1YnNjcmliZSEiO3M6MjE6InN1Yl90eHRfaW52YWxpZF9lbWFpbCI7czoyMjoiRW1wdHkgb3IgaW52YWxpZCBlbWFpbCI7czoyMDoic3ViX3R4dF9leGlzdHNfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MTY6InN1Yl9yZWRpcmVjdF91cmwiO3M6MDoiIjtzOjI4OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHN1YnNjcmlwdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTc6IllvdSBzdWJzY3JpYmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHN1YnNjcmlwdGlvbi4gSWYgeW91IGRpZCBub3Qgc3Vic2NyaWJlIGhlcmUgLSBqdXN0IGlnbm9yZSB0aGlzIG1lc3NhZ2UuIjtzOjMxOiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjM3OiJbc2l0ZW5hbWVdIFlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIjtzOjI4OiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfbWVzc2FnZSI7czo2NToiVXNlcm5hbWU6IFt1c2VyX2xvZ2luXTxiciAvPlBhc3N3b3JkOiBbcGFzc3dvcmRdPGJyIC8+W2xvZ2luX3VybF0iO3M6MjU6InN1Yl9yZWRpcmVjdF9lbWFpbF9leGlzdHMiO3M6MDoiIjtzOjEzOiJzdWJfYnRuX2xhYmVsIjtzOjEzOiJTVUJTQ1JJQkUgTk9XIjtzOjEzOiJzdWJfbmV3X2VtYWlsIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoxNToic3ViX25ld19zdWJqZWN0IjtzOjI4OiJOZXcgc3Vic2NyaWJlciBvbiBbc2l0ZW5hbWVdIjtzOjE1OiJzdWJfbmV3X21lc3NhZ2UiO3M6MTI5OiJZb3UgaGF2ZSBuZXcgc3Vic2NyaWJlciBvbiB5b3VyIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LCBoZXJlIGlzIHN1YnNjcmliZXIgaW5mb3JtYXRpb246PGJyIC8+W3N1YnNjcmliZXJfZGF0YV0iO3M6ODoibG9naW5fYnkiO3M6ODoidXNlcm5hbWUiO3M6MTg6ImxvZ2luX3JlZGlyZWN0X3VybCI7czowOiIiO3M6MTU6ImxvZ2luX2J0bl9sYWJlbCI7czoxMDoi0JvQvtCz0LjQvSI7czoyMzoicmVnX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTM6InJlZ19idG5fbGFiZWwiO3M6ODoiUmVnaXN0ZXIiO3M6MTA6InJlZ19maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjc6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo2OiLQmNC80Y8iO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIwIjt9czo1OiJlbWFpbCI7YTo3OntzOjQ6Im5hbWUiO3M6NToiZW1haWwiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjY6IkUtTWFpbCI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjEiO3M6MzoiZW5iIjtzOjE6IjEiO319czoyMDoicmVnX3R4dF9jb25maXJtX3NlbnQiO3M6MTk1OiLQodGB0YvQu9C60LAg0LTQu9GPINC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPINCx0YvQuyDQvtGC0L/RgNCw0LLQu9C10L3QsCDQvdCwINCy0LDRiCDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiy4g0J/RgNC+0LLQtdGA0YzRgtC1INCy0LDRiNGDINGN0LvQtdC60YLRgNC+0L3QvdGD0Y4g0L/QvtGH0YLRgyEiO3M6MTU6InJlZ190eHRfc3VjY2VzcyI7czo0Mzoi0KHQv9Cw0YHQuNCx0L4g0LfQsCDRgNC10LPQuNGB0YLRgNCw0YbQuNGOISI7czoyMToicmVnX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjU4OiLQn9GD0YHRgtC+0Lkg0LjQu9C4INC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5IGVtYWlsIjtzOjE2OiJyZWdfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyODoicmVnX3R4dF9jb25maXJtX21haWxfc3ViamVjdCI7czo2MToi0J/QvtC00YLQstC10YDQtNC40YLQtSDRgNC10LPQuNGB0YLRgNCw0YbQuNGOINC90LAgW3NpdGVuYW1lXSI7czoyNToicmVnX3R4dF9jb25maXJtX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6Mjg6InJlZ190eHRfY29uZmlybV9tYWlsX21lc3NhZ2UiO3M6MzM0OiLQktGLINC30LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDQvdGLINC90LAg0YHQsNC50YLQtSA8YSBocmVmPVwiW3NpdGV1cmxdXCI+W3NpdGVuYW1lXTwvYT4uINCh0LvQtdC00YPQudGC0LUgIDxhIGhyZWY9XCJbY29uZmlybV9saW5rXVwiPnRoaXMgbGluazwvYT4g0LTQu9GPINC30LDQstC10YDRiNC10L3QuNGPINGA0LXQs9C40YHRgtGA0LDRhtC40LguINCV0YHQu9C4INCy0Ysg0L3QtSDQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0LvQuNGB0Ywg0LfQtNC10YHRjCAtINC/0YDQvtGB0YLQviDQuNCz0L3QvtGA0LjRgNGD0LnRgtC1INGN0YLQviDRgdC+0L7QsdGJ0LXQvdC40LUuIjtzOjMxOiJyZWdfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjQ1OiJbc2l0ZW5hbWVdICDQktCw0Ygg0LvQvtCz0LjQvSDQuCDQv9Cw0YDQvtC70YwiO3M6Mjg6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX2Zyb20iO3M6MTQ6ImFkbWluQG1haWwuY29tIjtzOjMxOiJyZWdfdHh0X3N1YnNjcmliZXJfbWFpbF9tZXNzYWdlIjtzOjcxOiLQm9C+0LPQuNC9OiBbdXNlcl9sb2dpbl08YnIgLz7Qn9Cw0YDQvtC70Yw6IFtwYXNzd29yZF08YnIgLz5bbG9naW5fdXJsXSI7czoxMzoicmVnX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InJlZ19uZXdfbWVzc2FnZSI7czoxNzc6ItCjINCy0LDRgSDQvdC+0LLRi9C5INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDQvdCwINGB0LDQudGC0LUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LCDQstC+0YIg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPOiA8YnIgLz5bc3Vic2NyaWJlcl9kYXRhXSI7czoxMjoiY29udGFjdF9mb3JtIjtzOjI6IjE5IjtzOjEyOiJzdGF0X2dhX2NvZGUiO3M6MDoiIjtzOjU6InR4dF8wIjtzOjQ4OiI8cD5bZ29vZ2xlX21hcF9lYXN5IGlkPVwiMVwiIGhlaWdodD1cIjMwMFwiXTwvcD4iO31zOjEwOiJvcHRzX2F0dHJzIjthOjI6e3M6OToiYmdfbnVtYmVyIjtzOjE6IjMiO3M6MTY6InR4dF9ibG9ja19udW1iZXIiO3M6MToiMSI7fX0=",html="<link href=\"https://fonts.googleapis.com/css?family=Lato\" rel=\"stylesheet\" type=\"text/css\" >\r\n<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose ppsPopupClose_[close_btn]\"></a>\r\n <div class=\"ppsInnerTblContent\">\r\n <div class=\"ppsPopupListsInner ppsPopupInner\">\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupClassyTxt_0 ppsPopupTxt_0\">\r\n [txt_0]\r\n </div>\r\n [endif]\r\n </div><!--\r\n --><div class=\"ppsRightCol\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupListsLabel\">[label]</div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n</div>",css="@nice-blue: #5B83AD;\r\n#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n padding: 0px;\r\n font-family: Lato;\r\n font-size: 13px;\r\n line-height: normal;\r\n font-weight: normal;\r\n color: #000;\r\n}\r\n#ppsPopupShell_[ID], #ppsPopupShell_[ID] * {\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n box-sizing: border-box;\r\n}\r\n#ppsPopupShell_[ID] .ppsInnerTblContent {\r\n display: block;\r\n text-align: right;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupInner {\r\n {% if popup.params.tpl.enb_subscribe or popup.params.tpl.enb_foot_note or popup.params.tpl.enb_sm %}\r\n width: 59%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n \r\n vertical-align: middle;\r\n display: inline-block;\r\n margin: 0px;\r\n text-align: left;\r\n \r\n [if bg_type_0 == \"color\"]\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%, [bg_color_0])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\"{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\", endColorstr=\"[bg_color_0]\",GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_0 == \"img\"]\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 20px 20px 0;\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input::-webkit-input-placeholder { /* Chrome/Opera/Safari */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input::-moz-placeholder { /* Firefox 19+ */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input:-ms-input-placeholder { /* IE 10+ */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input:-moz-placeholder { /* Firefox 18- */\r\n color: #ccc;\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea::-webkit-input-placeholder { /* Chrome/Opera/Safari */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea::-moz-placeholder { /* Firefox 19+ */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea:-ms-input-placeholder { /* IE 10+ */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea:-moz-placeholder { /* Firefox 18- */\r\n color: #ccc;\r\n}\r\n/*For all Elements*/\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"email\"],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"password\"],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"text\"],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n font-family: Lato;\r\n font-size: 16px;\r\n font-weight: normal;\r\n line-height: normal;\r\n color: #aaa;\r\n text-align:center;\r\n width: 100%;\r\n -webkit-border-radius: 5px;\r\n -moz-border-radius: 5px;\r\n border-radius: 5px;\r\n border: 0px solid transparent;\r\n display:block;\r\n \r\n margin: 10px 0 0;\r\n padding: 0 10px 0 10px;\r\n height: 40px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n height: auto;\r\n padding-top: 9px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeForm input:first-child {\r\n margin-top: 0px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell label {\r\n display: block;\r\n font-family: Lato;\r\n font-size: 16px;\r\n font-weight: normal;\r\n line-height: normal;\r\n color: #fff;\r\n \r\n margin: 10px 0 0;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell label span {\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"text\"][name=\"name\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/user-black-icon.png\");\r\n background-position: 12px center;\r\n background-repeat: no-repeat;\r\n background-size: 16px auto;\r\n padding: 0 25px 0 35px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/email-black-icon.png\");\r\n background-position: 11px center;\r\n background-repeat: no-repeat;\r\n background-size: 18px auto;\r\n padding: 0 25px 0 35px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"submit\"] {\r\n display: block;\r\n font-family: Lato;\r\n font-size: 17px;\r\n font-weight: bold;\r\n line-height: normal;\r\n color: #fff;\r\n cursor: pointer;\r\n margin: 10px 0 0;\r\n -webkit-border-radius: 5px;\r\n -moz-border-radius: 5px;\r\n border-radius: 5px;\r\n border: 0px solid transparent;\r\n width: 100%;\r\n height: 50px;\r\n \r\n [if bg_type_2 == \"color\"]\r\n background: [bg_color_2] 100%;\r\n [elseif bg_type_2 == \"img\"]\r\n background: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsRightCol {\r\n border-radius: 3px;\r\n -moz-border-radius: 3px;\r\n -webkit-border-radius: 3px;\r\n min-height: 350px;\r\n width: 40%;\r\n display: inline-block;\r\n padding: 20px;\r\n margin: 0;\r\n vertical-align: middle;\r\n \r\n [if bg_type_1 == \"color\"]\r\n background: [bg_color_1];\r\n [elseif bg_type_1 == \"img\"]\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color:#ffffff;\r\n font-family: \"Lato\";\r\n font-weight: normal;\r\n line-height: normal;\r\n font-size: 24px;\r\n letter-spacing: -1px;\r\n padding: 0px;\r\n margin: 20px 0 0;\r\n text-align: center;\r\n \r\n width: 100%;\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n float: left;\r\n width: 100%;\r\n height: 300px;\r\n line-height: normal;\r\n font-size: 14px;\r\n font-family: Lato;\r\n font-weight: 400;\r\n \r\n \r\n padding: 0px;\r\n margin: 0;\r\n \r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 p {\r\n font-size: inherit !important;\r\n font-weight: inherit !important;\r\n font-size: inherit !important;\r\n line-height: inherit !important;\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n top:-20px;\r\n right:1px;\r\n z-index:99999;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubMsg {\r\n text-align: center;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose.ppsPopupClose_lists_black {\r\n top: 0 !important;\r\n right: 0 !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote{\r\n color: #ffffff;\r\n text-align: center;\r\n font-family: Lato;\r\n font-size: x-small;\r\n font-weight: bold;\r\n line-height: 14px;\r\n margin: 10px 30px 5px;\r\n}",img_preview="230-6-new-york-prev.png",show_on="1",show_to="1",show_pages="1",type_id="1",date_created="2015-01-10 18:59:43",sort_order="1" WHERE id="27"');
554
  }
555
- if(dbPps::get('SELECT COUNT(*) AS total FROM @__popup WHERE id = 4 AND original_id = 0', 'one')) { // Update Facebook Like PopUp if it is exist
556
- dbPps::query('UPDATE @__popup SET params="YTozOntzOjQ6Im1haW4iO2E6MzA6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNToic2hvd19vbl9jbGlja19vbl9lbF9kZWxheSI7czoxOiIwIjtzOjI3OiJzaG93X29uX3Njcm9sbF93aW5kb3dfZGVsYXkiO3M6MToiMCI7czozMzoic2hvd19vbl9zY3JvbGxfd2luZG93X3BlcmNfc2Nyb2xsIjtzOjE6IjAiO3M6Mjg6InNob3dfb25fYWZ0ZXJfaW5hY3RpdmVfdmFsdWUiO3M6MjoiMTAiO3M6MjU6InNob3dfb25fbGlua19mb2xsb3dfZGVsYXkiO3M6MToiMCI7czo4OiJjbG9zZV9vbiI7czoxMDoidXNlcl9jbG9zZSI7czoyNjoiY2xvc2Vfb25fYWZ0ZXJfYWN0aW9uX3RpbWUiO3M6MToiMSI7czoyNToiY2xvc2Vfb25fYWZ0ZXJfdGltZV92YWx1ZSI7czoxOiI1IjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czoxNDoic2hvd190aW1lX2Zyb20iO3M6NzoiMTI6MDBhbSI7czoxMjoic2hvd190aW1lX3RvIjtzOjc6IjEyOjAwYW0iO3M6MTQ6InNob3dfZGF0ZV9mcm9tIjtzOjA6IiI7czoxMjoic2hvd19kYXRlX3RvIjtzOjA6IiI7czo3OiJzaG93X3RvIjtzOjg6ImV2ZXJ5b25lIjtzOjI5OiJzaG93X3RvX2ZpcnN0X3RpbWVfdmlzaXRfZGF5cyI7czoyOiIzMCI7czozMDoic2hvd190b191bnRpbF9tYWtlX2FjdGlvbl9kYXlzIjtzOjI6IjMwIjtzOjE1OiJjb3VudF90aW1lc19udW0iO3M6MToiMSI7czoxNToiY291bnRfdGltZXNfbWVzIjtzOjM6ImRheSI7czoyMToiaGlkZV9mb3JfZGV2aWNlc19zaG93IjtzOjE6IjAiO3M6MjQ6ImhpZGVfZm9yX3Bvc3RfdHlwZXNfc2hvdyI7czoxOiIwIjtzOjE3OiJoaWRlX2Zvcl9pcHNfc2hvdyI7czoxOiIwIjtzOjEyOiJoaWRlX2Zvcl9pcHMiO3M6MDoiIjtzOjIzOiJoaWRlX2Zvcl9jb3VudHJpZXNfc2hvdyI7czoxOiIwIjtzOjIzOiJoaWRlX2Zvcl9sYW5ndWFnZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX3NlYXJjaF9lbmdpbmVzX3Nob3ciO3M6MToiMCI7czoxODoiaGlkZV9wcmVnX3VybF9zaG93IjtzOjE6IjAiO3M6MTM6ImhpZGVfcHJlZ191cmwiO3M6MDoiIjtzOjI0OiJoaWRlX2Zvcl91c2VyX3JvbGVzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjIwOntzOjU6IndpZHRoIjtzOjM6IjMwMCI7czoxMzoid2lkdGhfbWVhc3VyZSI7czoyOiJweCI7czo2OiJoZWlnaHQiO3M6MDoiIjtzOjE0OiJoZWlnaHRfbWVhc3VyZSI7czoyOiJweCI7czoxMjoiZmJfbGlrZV9vcHRzIjthOjM6e3M6NDoiaHJlZiI7czo1NzoiaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3BhZ2VzL1N1cHN5c3RpYy8xMzg5MzkwMTk4MDI4OTk5IjtzOjQ6InRhYnMiO2E6MTp7aTowO3M6ODoidGltZWxpbmUiO31zOjEzOiJzaG93X2ZhY2VwaWxlIjtzOjE6IjEiO31zOjE4OiJiZ19vdmVybGF5X29wYWNpdHkiO3M6MzoiMC41IjtzOjE1OiJiZ19vdmVybGF5X3R5cGUiO3M6NToiY29sb3IiO3M6MTY6ImJnX292ZXJsYXlfY29sb3IiO3M6NDoiIzAwMCI7czoxNDoiYmdfb3ZlcmxheV9pbWciO3M6MDoiIjtzOjE4OiJiZ19vdmVybGF5X2ltZ19wb3MiO3M6Nzoic3RyZXRjaCI7czo5OiJiZ190eXBlXzAiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzAiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8wIjtzOjc6IiNmZmZmZmYiO3M6MTU6InJlc3BvbnNpdmVfbW9kZSI7czozOiJkZWYiO3M6MTc6InJlaWRyZWN0X29uX2Nsb3NlIjtzOjA6IiI7czo5OiJjbG9zZV9idG4iO3M6MTE6ImNsYXNzeV9ncmV5IjtzOjExOiJsYXllcmVkX3BvcyI7czozOiJ0b3AiO3M6ODoiYW5pbV9rZXkiO3M6NDoibm9uZSI7czoxMzoiYW5pbV9kdXJhdGlvbiI7czoxOiIxIjtzOjEyOiJzdGF0X2dhX2NvZGUiO3M6MDoiIjt9czoxMDoib3B0c19hdHRycyI7YToyOntzOjk6ImJnX251bWJlciI7czoxOiIxIjtzOjE2OiJ0eHRfYmxvY2tfbnVtYmVyIjtzOjE6IjAiO319" WHERE id = "4"');
557
- }
558
  dbPps::setAutoIncrement('@__popup', $lastAutoIncrement);
559
  }
560
  /*
493
  ("1","List Building","1","0","YTozOntzOjQ6Im1haW4iO2E6MTU6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNzoic2hvd19vbl9zY3JvbGxfd2luZG93X2RlbGF5IjtzOjE6IjAiO3M6MzM6InNob3dfb25fc2Nyb2xsX3dpbmRvd19wZXJjX3Njcm9sbCI7czoxOiIwIjtzOjg6ImNsb3NlX29uIjtzOjEwOiJ1c2VyX2Nsb3NlIjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czo3OiJzaG93X3RvIjtzOjg6ImV2ZXJ5b25lIjtzOjI5OiJzaG93X3RvX2ZpcnN0X3RpbWVfdmlzaXRfZGF5cyI7czoyOiIzMCI7czozMDoic2hvd190b191bnRpbF9tYWtlX2FjdGlvbl9kYXlzIjtzOjI6IjMwIjtzOjIxOiJoaWRlX2Zvcl9kZXZpY2VzX3Nob3ciO3M6MToiMCI7czoyNDoiaGlkZV9mb3JfcG9zdF90eXBlc19zaG93IjtzOjE6IjAiO3M6MTc6ImhpZGVfZm9yX2lwc19zaG93IjtzOjE6IjAiO3M6MTI6ImhpZGVfZm9yX2lwcyI7czowOiIiO3M6MjM6ImhpZGVfZm9yX2NvdW50cmllc19zaG93IjtzOjE6IjAiO3M6MjM6ImhpZGVfZm9yX2xhbmd1YWdlc19zaG93IjtzOjE6IjAiO31zOjM6InRwbCI7YTo1ODp7czo1OiJ3aWR0aCI7czozOiI4MjQiO3M6MTM6IndpZHRoX21lYXN1cmUiO3M6MjoicHgiO3M6MTg6ImJnX292ZXJsYXlfb3BhY2l0eSI7czozOiIwLjUiO3M6OToiYmdfdHlwZV8wIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18wIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMCI7czo3OiIjZWJlYmViIjtzOjk6ImJnX3R5cGVfMSI7czo1OiJjb2xvciI7czo4OiJiZ19pbWdfMSI7czowOiIiO3M6MTA6ImJnX2NvbG9yXzEiO3M6NzoiIzA2NmRhYiI7czo5OiJiZ190eXBlXzIiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzIiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8yIjtzOjc6IiMwMGVhZWEiO3M6MTA6ImZvbnRfbGFiZWwiO3M6NzoiZGVmYXVsdCI7czoxNjoibGFiZWxfZm9udF9jb2xvciI7czo3OiIjMDAwMDAwIjtzOjEwOiJmb250X3R4dF8wIjtzOjc6ImRlZmF1bHQiO3M6MTc6InRleHRfZm9udF9jb2xvcl8wIjtzOjc6IiMwMDAwMDAiO3M6MTA6ImZvbnRfdHh0XzEiO3M6NzoiZGVmYXVsdCI7czoxNzoidGV4dF9mb250X2NvbG9yXzEiO3M6NzoiIzAwMDAwMCI7czoxMToiZm9udF9mb290ZXIiO3M6NzoiZGVmYXVsdCI7czoxNzoiZm9vdGVyX2ZvbnRfY29sb3IiO3M6NzoiIzAwMDAwMCI7czo5OiJjbG9zZV9idG4iO3M6MTE6Imxpc3RzX2JsYWNrIjtzOjc6ImJ1bGxldHMiO3M6MTE6Imxpc3RzX2dyZWVuIjtzOjExOiJsYXllcmVkX3BvcyI7czowOiIiO3M6OToiZW5iX2xhYmVsIjtzOjE6IjEiO3M6NToibGFiZWwiO3M6MTQwOiJUaGUgQmVzdCBXb3JkUHJlc3MgPGkgc3R5bGU9XCJjb2xvcjogIzAwNjlhNztcIj5Qb3BVcCBvcHRpbiBwbHVnaW48L2k+IHRvIGhlbHAgeW91IGdhaW4gbW9yZSBzdWJzY3JpYmVycywgc29jaWFsIGZvbGxvd2VycyBvciBhZHZlcnRpc2VtZW50LiI7czo5OiJlbmJfdHh0XzAiO3M6MToiMSI7czo5OiJlbmJfdHh0XzEiO3M6MToiMSI7czoxMzoiZW5iX2Zvb3Rfbm90ZSI7czoxOiIxIjtzOjk6ImZvb3Rfbm90ZSI7czoxMTg6IldlIHJlc3BlY3QgeW91ciBwcml2YWN5LiBZb3VyIGluZm9ybWF0aW9uIHdpbGwgbm90IGJlIHNoYXJlZCB3aXRoIGFueSB0aGlyZCBwYXJ0eSBhbmQgeW91IGNhbiB1bnN1YnNjcmliZSBhdCBhbnkgdGltZSAiO3M6MTU6ImVuYl9zbV9mYWNlYm9vayI7czoxOiIxIjtzOjE3OiJlbmJfc21fZ29vZ2xlcGx1cyI7czoxOiIxIjtzOjE0OiJlbmJfc21fdHdpdHRlciI7czoxOiIxIjtzOjk6InNtX2Rlc2lnbiI7czo2OiJzaW1wbGUiO3M6ODoiYW5pbV9rZXkiO3M6NDoibm9uZSI7czoxMzoiYW5pbV9kdXJhdGlvbiI7czowOiIiO3M6MTM6ImVuYl9zdWJzY3JpYmUiO3M6MToiMSI7czo4OiJzdWJfZGVzdCI7czo5OiJ3b3JkcHJlc3MiO3M6MjM6InN1Yl93cF9jcmVhdGVfdXNlcl9yb2xlIjtzOjEwOiJzdWJzY3JpYmVyIjtzOjE5OiJzdWJfYXdlYmVyX2xpc3RuYW1lIjtzOjA6IiI7czoyMToic3ViX2F3ZWJlcl9hZHRyYWNraW5nIjtzOjA6IiI7czoyMToic3ViX21haWxjaGltcF9hcGlfa2V5IjtzOjA6IiI7czoxMDoic3ViX2ZpZWxkcyI7YToyOntzOjQ6Im5hbWUiO2E6Nzp7czozOiJlbmIiO3M6MToiMSI7czo0OiJuYW1lIjtzOjQ6Im5hbWUiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjQ6Ik5hbWUiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIwIjt9czo1OiJlbWFpbCI7YTo3OntzOjQ6Im5hbWUiO3M6NToiZW1haWwiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjY6IkUtTWFpbCI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjEiO3M6MzoiZW5iIjtzOjE6IjEiO319czoyMDoic3ViX3R4dF9jb25maXJtX3NlbnQiO3M6Njc6IkNvbmZpcm1hdGlvbiBsaW5rIHdhcyBzZW50IHRvIHlvdXIgZW1haWwgYWRkcmVzcy4gQ2hlY2sgeW91ciBlbWFpbCEiO3M6MTU6InN1Yl90eHRfc3VjY2VzcyI7czoyNDoiVGhhbmsgeW91IGZvciBzdWJzY3JpYmUhIjtzOjIxOiJzdWJfdHh0X2ludmFsaWRfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MTY6InN1Yl9yZWRpcmVjdF91cmwiO3M6MDoiIjtzOjI4OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHN1YnNjcmlwdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTc6IllvdSBzdWJzY3JpYmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHN1YnNjcmlwdGlvbi4gSWYgeW91IGRpZCBub3Qgc3Vic2NyaWJlIGhlcmUgLSBqdXN0IGlnbm9yZSB0aGlzIG1lc3NhZ2UuIjtzOjMxOiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjM3OiJbc2l0ZW5hbWVdIFlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIjtzOjI4OiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfbWVzc2FnZSI7czo2NToiVXNlcm5hbWU6IFt1c2VyX2xvZ2luXTxiciAvPlBhc3N3b3JkOiBbcGFzc3dvcmRdPGJyIC8+W2xvZ2luX3VybF0iO3M6MjU6InN1Yl9yZWRpcmVjdF9lbWFpbF9leGlzdHMiO3M6MDoiIjtzOjEzOiJzdWJfYnRuX2xhYmVsIjtzOjg6IlNpZ24tdXAhIjtzOjEzOiJzdWJfbmV3X2VtYWlsIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoxNToic3ViX25ld19tZXNzYWdlIjtzOjEyOToiWW91IGhhdmUgbmV3IHN1YnNjcmliZXIgb24geW91ciBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPiwgaGVyZSB1cyBzdWJzY3JpYmVyIGluZm9ybWF0aW9uOjxiciAvPltzdWJzY3JpYmVyX2RhdGFdIjtzOjU6InR4dF8wIjtzOjE2MDoiPHA+PGEgaHJlZj1cImh0dHA6Ly9zdXBzeXN0aWMuY29tXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGltZyBzdHlsZT1cIm1heC13aWR0aDogMjAwcHg7XCIgc3JjPVwiW1BQU19BU1NFVFNfVVJMXWltZy9hc3NldHMvc3Vwc3lzdGljX2ljb24ucG5nXCIgYWx0PVwiXCIgLz48L2E+PC9wPiI7czo1OiJ0eHRfMSI7czozMTM6IjxwPlBvcHVwIGJ5IFN1cHN5c3RpYyBsZXRzIHlvdSBlYXNpbHkgY3JlYXRlIGVsZWdhbnQgb3ZlcmxhcHBpbmcgd2luZG93cyB3aXRoIHVubGltaXRlZCBmZWF0dXJlcy4gUG9wLXVwcyB3aXRoIFNsaWRlciwgTGlnaHRib3gsIENvbnRhY3QgYW5kIFN1YnNjcmlwdGlvbiBmb3JtcyBhbmQgbW9yZTo8L3A+PHVsPjxsaT5VbmxpbWl0ZWQgQ29udGVudCBDdXN0b21pemF0aW9uPC9saT48bGk+QXV0byBPcGVuIFBvcHVwczwvbGk+PGxpPkNvbnRhY3QgRm9ybSB3aXRoIHBvcC11cDwvbGk+PGxpPlBvcHVwIE9wZW5pbmcgQW5pbWF0aW9uczwvbGk+PC91bD4iO31zOjEwOiJvcHRzX2F0dHJzIjthOjI6e3M6OToiYmdfbnVtYmVyIjtzOjE6IjMiO3M6MTY6InR4dF9ibG9ja19udW1iZXIiO3M6MToiMiI7fX0=","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose ppsPopupClose_[close_btn]\"></a>\r\n <div class=\"ppsInnerTblContent\">\r\n <div class=\"ppsPopupListsInner ppsPopupInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupListsLabel\">[label]</div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupClassyTxt_0 ppsPopupTxt_0\">\r\n [txt_0]\r\n </div>\r\n [endif]\r\n [if enb_txt_1]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupClassyTxt_1 ppsPopupTxt_1\">\r\n [txt_1]\r\n </div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n <div class=\"ppsRightCol\">\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n padding: 15px;\r\n font-family: Georgia, Times, serif;\r\n font-size: 13px;\r\n line-height: 21px;\r\n font-weight: normal;\r\n color: #000;\r\n}\r\n#ppsPopupShell_[ID], #ppsPopupShell_[ID] * {\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n box-sizing: border-box;\r\n}\r\n#ppsPopupShell_[ID] .ppsInnerTblContent {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupInner {\r\n {% if popup.params.tpl.enb_subscribe or popup.params.tpl.enb_foot_note or popup.params.tpl.enb_sm %}\r\n width: 66%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n display: table-cell;\r\n vertical-align: top;\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%, [bg_color_0])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\', endColorstr=\'[bg_color_0]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color: #000;\r\n font-family: \"Myriad Pro\",\"Trebuchet MS\",\"Helvetica Neue\",Helvetica,Arial,Sans-Serif;\r\n font-size: 30px;\r\n letter-spacing: -1px;\r\n line-height: 40px;\r\n letter-spacing: -1px;\r\n font-weight: bold;\r\n margin-top: 15px;\r\n margin-bottom: 16px;\r\n padding-left: 20px;\r\n text-shadow: 0px 0px 1px #000;\r\n -moz-text-shadow: 0px 0px 1px #000;\r\n -webkit-text-shadow: 0px 0px 1px #000;\r\n}\r\n#ppsPopupShell_[ID] .ppsRightCol {\r\n display: table-cell;\r\n width: 34%;\r\n height: 100%;\r\n [if bg_type_1 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}), color-stop(100%, [bg_color_1])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}\', endColorstr=\'[bg_color_1]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 30px 30px 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: 100%;\r\n margin-bottom: 10px;\r\n height: 40px;\r\n border: 1px solid #d1b36d;\r\n border-radius: 10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n box-shadow: 2px 2px 2px #dcdcdc inset;\r\n padding-left: 10px;\r\n font-size: 17px;\r\n background-color: #fff;\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n background-color: transparent;\r\n height: 40px;\r\n border: none;\r\n margin-left: -5px;\r\n font-size: 17px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n font-family: inherit;\r\n height: auto;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text][name=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/mail-icon.png\");\r\n background-repeat: no-repeat;\r\n background-position: 90% center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n border-color: #000;\r\n [if bg_type_2 == \'color\']\r\n background: [bg_color_2];\r\n background: -moz-linear-gradient(90deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -webkit-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -o-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -ms-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: linear-gradient(0deg, [bg_color_2]) 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n [elseif bg_type_2 == \'img\']\r\n background-image: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n color: #fff;\r\n font-size: 20px;\r\n text-shadow: 2px 2px 2px #000;\r\n cursor: pointer;\r\n padding: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n box-shadow: inset 1px 1px 3px #666;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n float: left;\r\n width: 50%;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_1 {\r\n float: right;\r\n [if enb_txt_0]\r\n width: 50%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose.ppsPopupClose_lists_black {\r\n top: 0 !important;\r\n right: 0 !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote{\r\n color: #585858;\r\n font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n font-size: x-small;\r\n font-style: italic;\r\n line-height: 14px;\r\n margin: 5px 30px;\r\n}","","1","1","1","1","2015-01-10 18:59:43","7"),
494
  ("2","Classy","1","0","YTozOntzOjQ6Im1haW4iO2E6MTc6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNzoic2hvd19vbl9zY3JvbGxfd2luZG93X2RlbGF5IjtzOjE6IjAiO3M6MzM6InNob3dfb25fc2Nyb2xsX3dpbmRvd19wZXJjX3Njcm9sbCI7czoxOiIwIjtzOjI4OiJzaG93X29uX2FmdGVyX2luYWN0aXZlX3ZhbHVlIjtzOjI6IjEwIjtzOjg6ImNsb3NlX29uIjtzOjEwOiJ1c2VyX2Nsb3NlIjtzOjI1OiJjbG9zZV9vbl9hZnRlcl90aW1lX3ZhbHVlIjtzOjE6IjUiO3M6MTA6InNob3dfcGFnZXMiO3M6MzoiYWxsIjtzOjc6InNob3dfdG8iO3M6ODoiZXZlcnlvbmUiO3M6Mjk6InNob3dfdG9fZmlyc3RfdGltZV92aXNpdF9kYXlzIjtzOjI6IjMwIjtzOjMwOiJzaG93X3RvX3VudGlsX21ha2VfYWN0aW9uX2RheXMiO3M6MjoiMzAiO3M6MjE6ImhpZGVfZm9yX2RldmljZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX2Zvcl9wb3N0X3R5cGVzX3Nob3ciO3M6MToiMCI7czoxNzoiaGlkZV9mb3JfaXBzX3Nob3ciO3M6MToiMCI7czoxMjoiaGlkZV9mb3JfaXBzIjtzOjA6IiI7czoyMzoiaGlkZV9mb3JfY291bnRyaWVzX3Nob3ciO3M6MToiMCI7czoyMzoiaGlkZV9mb3JfbGFuZ3VhZ2VzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjU5OntzOjU6IndpZHRoIjtzOjM6IjYzMCI7czoxMzoid2lkdGhfbWVhc3VyZSI7czoyOiJweCI7czoxODoiYmdfb3ZlcmxheV9vcGFjaXR5IjtzOjM6IjAuNSI7czo5OiJiZ190eXBlXzAiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzAiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8wIjtzOjc6IiNkMWQxZDEiO3M6OToiYmdfdHlwZV8xIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18xIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMSI7czo3OiIjN2ZiNmNiIjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiIzU1NTU1NSI7czoxMDoiZm9udF90eHRfMCI7czo3OiJkZWZhdWx0IjtzOjE3OiJ0ZXh0X2ZvbnRfY29sb3JfMCI7czo3OiIjNTU1NTU1IjtzOjEwOiJmb250X3R4dF8xIjtzOjc6ImRlZmF1bHQiO3M6MTc6InRleHRfZm9udF9jb2xvcl8xIjtzOjc6IiM1NTU1NTUiO3M6MTE6ImZvbnRfZm9vdGVyIjtzOjc6ImRlZmF1bHQiO3M6MTc6ImZvb3Rlcl9mb250X2NvbG9yIjtzOjc6IiM5OTk5OTkiO3M6OToiY2xvc2VfYnRuIjtzOjExOiJjbGFzc3lfZ3JleSI7czo3OiJidWxsZXRzIjtzOjExOiJjbGFzc3lfYmx1ZSI7czoxMzoiZW5iX3N1YnNjcmliZSI7czoxOiIxIjtzOjg6InN1Yl9kZXN0IjtzOjk6IndvcmRwcmVzcyI7czoyMzoic3ViX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTk6InN1Yl9hd2ViZXJfbGlzdG5hbWUiO3M6MDoiIjtzOjIxOiJzdWJfYXdlYmVyX2FkdHJhY2tpbmciO3M6MDoiIjtzOjIxOiJzdWJfbWFpbGNoaW1wX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfZ3JfYXBpX2tleSI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfdXJsIjtzOjA6IiI7czoxNDoic3ViX2FjX2FwaV9rZXkiO3M6MDoiIjtzOjE4OiJzdWJfYXJfZm9ybV9hY3Rpb24iO3M6MDoiIjtzOjEwOiJzdWJfc2dhX2lkIjtzOjA6IiI7czoxNToic3ViX3NnYV9saXN0X2lkIjtzOjA6IiI7czoyMToic3ViX3NnYV9hY3RpdmF0ZV9jb2RlIjtzOjA6IiI7czoxMDoic3ViX2ZpZWxkcyI7YToyOntzOjU6ImVtYWlsIjthOjc6e3M6NDoibmFtZSI7czo1OiJlbWFpbCI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NjoiRS1NYWlsIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMSI7czozOiJlbmIiO3M6MToiMSI7fXM6NDoibmFtZSI7YTo3OntzOjM6ImVuYiI7czoxOiIxIjtzOjQ6Im5hbWUiO3M6NDoibmFtZSI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NDoiTmFtZSI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjAiO319czoyMDoic3ViX3R4dF9jb25maXJtX3NlbnQiO3M6Njc6IkNvbmZpcm1hdGlvbiBsaW5rIHdhcyBzZW50IHRvIHlvdXIgZW1haWwgYWRkcmVzcy4gQ2hlY2sgeW91ciBlbWFpbCEiO3M6MTU6InN1Yl90eHRfc3VjY2VzcyI7czoyNDoiVGhhbmsgeW91IGZvciBzdWJzY3JpYmUhIjtzOjIxOiJzdWJfdHh0X2ludmFsaWRfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MTY6InN1Yl9yZWRpcmVjdF91cmwiO3M6MDoiIjtzOjI4OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHN1YnNjcmlwdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTc6IllvdSBzdWJzY3JpYmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHN1YnNjcmlwdGlvbi4gSWYgeW91IGRpZCBub3Qgc3Vic2NyaWJlIGhlcmUgLSBqdXN0IGlnbm9yZSB0aGlzIG1lc3NhZ2UuIjtzOjMxOiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjM3OiJbc2l0ZW5hbWVdIFlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIjtzOjI4OiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfbWVzc2FnZSI7czo2NToiVXNlcm5hbWU6IFt1c2VyX2xvZ2luXTxiciAvPlBhc3N3b3JkOiBbcGFzc3dvcmRdPGJyIC8+W2xvZ2luX3VybF0iO3M6MjU6InN1Yl9yZWRpcmVjdF9lbWFpbF9leGlzdHMiO3M6MDoiIjtzOjEzOiJzdWJfYnRuX2xhYmVsIjtzOjg6IlNpZ24tVXAhIjtzOjE1OiJlbmJfc21fZmFjZWJvb2siO3M6MToiMSI7czoxNzoiZW5iX3NtX2dvb2dsZXBsdXMiO3M6MToiMSI7czoxNDoiZW5iX3NtX3R3aXR0ZXIiO3M6MToiMSI7czo5OiJzbV9kZXNpZ24iO3M6Njoic2ltcGxlIjtzOjg6ImFuaW1fa2V5IjtzOjQ6Im5vbmUiO3M6MTM6ImFuaW1fZHVyYXRpb24iO3M6MDoiIjtzOjExOiJsYXllcmVkX3BvcyI7czozOiJ0b3AiO3M6OToiZW5iX2xhYmVsIjtzOjE6IjEiO3M6NToibGFiZWwiO3M6MTg6IlBvcFVwIGJ5IFN1cHN5c3RpYyI7czo5OiJlbmJfdHh0XzAiO3M6MToiMSI7czo5OiJlbmJfdHh0XzEiO3M6MToiMSI7czo5OiJmb290X25vdGUiO3M6MDoiIjtzOjU6InR4dF8wIjtzOjIwODoiPHA+UG9wdXAgYnkgU3Vwc3lzdGljIGxldHMgeW91IGVhc2lseSBjcmVhdGUgZWxlZ2FudCBvdmVybGFwcGluZyB3aW5kb3dzIHdpdGggdW5saW1pdGVkIGZlYXR1cmVzOjwvcD48dWw+PGxpPlVubGltaXRlZCBDb250ZW50IEN1c3RvbWl6YXRpb248L2xpPjxsaT5BdXRvIE9wZW4gUG9wdXBzPC9saT48bGk+Q29udGFjdCBGb3JtIHdpdGggcG9wLXVwPC9saT48L3VsPiI7czo1OiJ0eHRfMSI7czoxMjM6IjxwPjxpbWcgc3R5bGU9XCJtYXgtd2lkdGg6IDE4MHB4OyBtYXgtaGVpZ2h0OiBhdXRvO1wiIHNyYz1cIltQUFNfQVNTRVRTX1VSTF1pbWcvYXNzZXRzL3N1cHN5c3RpY19pY29uLnBuZ1wiIGFsdD1cIlwiIC8+PC9wPiI7fXM6MTA6Im9wdHNfYXR0cnMiO2E6Mjp7czo5OiJiZ19udW1iZXIiO3M6MToiMiI7czoxNjoidHh0X2Jsb2NrX251bWJlciI7czoxOiIyIjt9fQ==","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupClassyShell\">\r\n <a href=\"#\" class=\"ppsPopupClose\"></a>\r\n <div class=\"ppsPopupClassyInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupClassyLabel\">[label]</div>\r\n [endif]\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupTxt_0\">\r\n [txt_0]\r\n </div>\r\n [endif]\r\n [if enb_txt_1]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupTxt_1\">\r\n [txt_1]\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">[foot_note]</div>\r\n [endif]\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n [if bg_type_0 == \'color\']\r\n background-color: {{ popup.params.tpl.bg_color_0 }};\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-size: 100%;\r\n background-repeat: no-repeat;\r\n [endif]\r\n padding: 7px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyInner {\r\n padding: 15px;\r\n border: {{ adjust_brightness(popup.params.tpl.bg_color_0, 30) }};\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ popup.params.tpl.bg_color_0 }}), color-stop(100%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }})); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ popup.params.tpl.bg_color_0 }}\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }}\',GradientType=1 ); /* ie6-9 */\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n height: 48px;\r\n font-size: 27px;\r\n border: none;\r\n padding: 1px 8px 0;\r\n width: calc((100% - 70px) / 3);\r\n box-sizing: content-box;\r\n margin-top: 10px;\r\n float: left;\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n [if bg_type_0 == \'color\']\r\n -webkit-box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n -moz-box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n background-color: {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }};\r\n color: {{ adjust_brightness(popup.params.tpl.bg_color_0, -100) }};\r\n [endif]\r\n margin-right: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n height: 48px;\r\n vertical-align: middle;\r\n background-color: transparent;\r\n border: none;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select option {\r\n font-size: 27px;\r\n color: #6d6d6d;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: calc(100% - 30px);\r\n height: auto;\r\n font-family: inherit;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n color: #eee;\r\n margin-right: 0;\r\n cursor: pointer;\r\n [if bg_type_1 == \'color\']\r\n text-shadow: -1px -1px 1px {{ adjust_brightness(popup.params.tpl.bg_color_1, -80) }};\r\n border: 1px solid {{ adjust_brightness(popup.params.tpl.bg_color_1, -40) }};\r\n background: -moz-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ popup.params.tpl.bg_color_1 }}), color-stop(100%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }})); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ popup.params.tpl.bg_color_1 }}\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }}\',GradientType=1 ); /* ie6-9 */\r\n\r\n -webkit-box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n -moz-box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-size: 100%;\r\n background-repeat: no-repeat;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:disabled {\r\n color: transparent;\r\n cursor: progress;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyLabel {\r\n width: 100%;\r\n text-align: center;\r\n color: #555555;\r\n text-shadow: 1px 1px 1px #ffffff;\r\n font-size: 35px;\r\n margin-top: 26px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSuccessMsg {\r\n color: #555555;\r\n border: 1px solid #555555;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt {\r\n font-size: 20px;\r\n line-height: 160%;\r\n color: rgb(85, 85, 85);\r\n padding-top: 14px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n [if enb_txt_1]\r\n width: 70%;\r\n float: left;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_1 {\r\n float: right;\r\n width: 30%;\r\n}\r\n#ppsPopupShell_[ID] ul {\r\n margin-top: 15px;\r\n padding-left: 0;\r\n}\r\n#ppsPopupShell_[ID] ul li {\r\n list-style: inside none disc;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote {\r\n color: #999;\r\n font-size: 12px;\r\n padding-top: 10px;\r\n text-align: center;\r\n}\r\n/*SM*/\r\n#ppsPopupShell_[ID] .ppsSm {\r\n padding: 10px 10px 0 10px;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_1_435376 .ppsSm > div {\r\n vertical-align: top !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsSm .ppsSmBtn {\r\n margin-right: 5px;\r\n}","","1","1","1","1","2015-01-03 17:00:43","19"),
495
  ("3","Fastest and the Easiest","1","0","YTozOntzOjQ6Im1haW4iO2E6MTc6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNzoic2hvd19vbl9zY3JvbGxfd2luZG93X2RlbGF5IjtzOjE6IjAiO3M6MzM6InNob3dfb25fc2Nyb2xsX3dpbmRvd19wZXJjX3Njcm9sbCI7czoxOiIwIjtzOjI4OiJzaG93X29uX2FmdGVyX2luYWN0aXZlX3ZhbHVlIjtzOjI6IjEwIjtzOjg6ImNsb3NlX29uIjtzOjEwOiJ1c2VyX2Nsb3NlIjtzOjI1OiJjbG9zZV9vbl9hZnRlcl90aW1lX3ZhbHVlIjtzOjE6IjUiO3M6MTA6InNob3dfcGFnZXMiO3M6MzoiYWxsIjtzOjc6InNob3dfdG8iO3M6ODoiZXZlcnlvbmUiO3M6Mjk6InNob3dfdG9fZmlyc3RfdGltZV92aXNpdF9kYXlzIjtzOjI6IjMwIjtzOjMwOiJzaG93X3RvX3VudGlsX21ha2VfYWN0aW9uX2RheXMiO3M6MjoiMzAiO3M6MjE6ImhpZGVfZm9yX2RldmljZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX2Zvcl9wb3N0X3R5cGVzX3Nob3ciO3M6MToiMCI7czoxNzoiaGlkZV9mb3JfaXBzX3Nob3ciO3M6MToiMCI7czoxMjoiaGlkZV9mb3JfaXBzIjtzOjA6IiI7czoyMzoiaGlkZV9mb3JfY291bnRyaWVzX3Nob3ciO3M6MToiMCI7czoyMzoiaGlkZV9mb3JfbGFuZ3VhZ2VzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjYzOntzOjU6IndpZHRoIjtzOjM6Ijc3MCI7czoxMzoid2lkdGhfbWVhc3VyZSI7czoyOiJweCI7czoxODoiYmdfb3ZlcmxheV9vcGFjaXR5IjtzOjM6IjAuNSI7czo5OiJiZ190eXBlXzAiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzAiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8wIjtzOjc6IiNlNWU1ZTUiO3M6OToiYmdfdHlwZV8xIjtzOjM6ImltZyI7czo4OiJiZ19pbWdfMSI7czozOToiW1BQU19BU1NFVFNfVVJMXWltZy9hc3NldHMvYnV0dG9uLTEucG5nIjtzOjEwOiJiZ19jb2xvcl8xIjtzOjA6IiI7czo5OiJiZ190eXBlXzIiO3M6MzoiaW1nIjtzOjg6ImJnX2ltZ18yIjtzOjQyOiJbUFBTX0FTU0VUU19VUkxdaW1nL2Fzc2V0cy9iaWctYXJyb3ctMS5wbmciO3M6MTA6ImJnX2NvbG9yXzIiO3M6MDoiIjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiIzQxNDE0MSI7czoxMDoiZm9udF90eHRfMCI7czo3OiJkZWZhdWx0IjtzOjE3OiJ0ZXh0X2ZvbnRfY29sb3JfMCI7czo3OiIjMDAwMDAwIjtzOjEwOiJmb250X3R4dF8xIjtzOjc6ImRlZmF1bHQiO3M6MTc6InRleHRfZm9udF9jb2xvcl8xIjtzOjc6IiMwMDAwMDAiO3M6MTE6ImZvbnRfZm9vdGVyIjtzOjc6ImRlZmF1bHQiO3M6MTc6ImZvb3Rlcl9mb250X2NvbG9yIjtzOjc6IiM5Nzk2OTYiO3M6OToiY2xvc2VfYnRuIjtzOjExOiJsaXN0c19ibGFjayI7czo3OiJidWxsZXRzIjtzOjExOiJsaXN0c19ncmVlbiI7czoxMzoiZW5iX3N1YnNjcmliZSI7czoxOiIxIjtzOjg6InN1Yl9kZXN0IjtzOjk6IndvcmRwcmVzcyI7czoyMzoic3ViX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTk6InN1Yl9hd2ViZXJfbGlzdG5hbWUiO3M6MDoiIjtzOjIxOiJzdWJfYXdlYmVyX2FkdHJhY2tpbmciO3M6MDoiIjtzOjIxOiJzdWJfbWFpbGNoaW1wX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfZ3JfYXBpX2tleSI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfdXJsIjtzOjA6IiI7czoxNDoic3ViX2FjX2FwaV9rZXkiO3M6MDoiIjtzOjE4OiJzdWJfYXJfZm9ybV9hY3Rpb24iO3M6MDoiIjtzOjEwOiJzdWJfc2dhX2lkIjtzOjA6IiI7czoxNToic3ViX3NnYV9saXN0X2lkIjtzOjA6IiI7czoyMToic3ViX3NnYV9hY3RpdmF0ZV9jb2RlIjtzOjA6IiI7czoxMDoic3ViX2ZpZWxkcyI7YToyOntzOjU6ImVtYWlsIjthOjc6e3M6NDoibmFtZSI7czo1OiJlbWFpbCI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NjoiRS1NYWlsIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMSI7czozOiJlbmIiO3M6MToiMSI7fXM6NDoibmFtZSI7YTo3OntzOjM6ImVuYiI7czoxOiIxIjtzOjQ6Im5hbWUiO3M6NDoibmFtZSI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NDoiTmFtZSI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjAiO319czoyMDoic3ViX3R4dF9jb25maXJtX3NlbnQiO3M6Njc6IkNvbmZpcm1hdGlvbiBsaW5rIHdhcyBzZW50IHRvIHlvdXIgZW1haWwgYWRkcmVzcy4gQ2hlY2sgeW91ciBlbWFpbCEiO3M6MTU6InN1Yl90eHRfc3VjY2VzcyI7czoyNDoiVGhhbmsgeW91IGZvciBzdWJzY3JpYmUhIjtzOjIxOiJzdWJfdHh0X2ludmFsaWRfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MTY6InN1Yl9yZWRpcmVjdF91cmwiO3M6MDoiIjtzOjI4OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHN1YnNjcmlwdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTc6IllvdSBzdWJzY3JpYmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHN1YnNjcmlwdGlvbi4gSWYgeW91IGRpZCBub3Qgc3Vic2NyaWJlIGhlcmUgLSBqdXN0IGlnbm9yZSB0aGlzIG1lc3NhZ2UuIjtzOjMxOiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjM3OiJbc2l0ZW5hbWVdIFlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIjtzOjI4OiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfbWVzc2FnZSI7czo2NToiVXNlcm5hbWU6IFt1c2VyX2xvZ2luXTxiciAvPlBhc3N3b3JkOiBbcGFzc3dvcmRdPGJyIC8+W2xvZ2luX3VybF0iO3M6MjU6InN1Yl9yZWRpcmVjdF9lbWFpbF9leGlzdHMiO3M6MDoiIjtzOjEzOiJzdWJfYnRuX2xhYmVsIjtzOjU6IkpvaW4hIjtzOjE1OiJlbmJfc21fZmFjZWJvb2siO3M6MToiMSI7czoxNzoiZW5iX3NtX2dvb2dsZXBsdXMiO3M6MToiMSI7czoxNDoiZW5iX3NtX3R3aXR0ZXIiO3M6MToiMSI7czo5OiJzbV9kZXNpZ24iO3M6Njoic2ltcGxlIjtzOjg6ImFuaW1fa2V5IjtzOjQ6Im5vbmUiO3M6MTM6ImFuaW1fZHVyYXRpb24iO3M6MDoiIjtzOjExOiJsYXllcmVkX3BvcyI7czozOiJ0b3AiO3M6OToiZW5iX2xhYmVsIjtzOjE6IjEiO3M6NToibGFiZWwiO3M6NTU6IkluY3JlYXNlIHN1YnNjcmliZXJzLCBzb2NpYWwgZm9sbG93ZXJzIG9yIGFkdmVydGlzZW1lbnQiO3M6OToiZW5iX3R4dF8wIjtzOjE6IjEiO3M6OToiZW5iX3R4dF8xIjtzOjE6IjEiO3M6MTM6ImVuYl9mb290X25vdGUiO3M6MToiMSI7czo5OiJmb290X25vdGUiO3M6MTE3OiJXZSByZXNwZWN0IHlvdXIgcHJpdmFjeS4gWW91ciBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSBzaGFyZWQgd2l0aCBhbnkgdGhpcmQgcGFydHkgYW5kIHlvdSBjYW4gdW5zdWJzY3JpYmUgYXQgYW55IHRpbWUiO3M6NToidHh0XzAiO3M6NDQ6IjxwPlRoZSBCZXN0IFdvcmRQcmVzcyBQb3BVcCBvcHRpbiBwbHVnaW48L3A+IjtzOjU6InR4dF8xIjtzOjMxMzoiPHA+UG9wdXAgYnkgU3Vwc3lzdGljIGxldHMgeW91IGVhc2lseSBjcmVhdGUgZWxlZ2FudCBvdmVybGFwcGluZyB3aW5kb3dzIHdpdGggdW5saW1pdGVkIGZlYXR1cmVzLiBQb3AtdXBzIHdpdGggU2xpZGVyLCBMaWdodGJveCwgQ29udGFjdCBhbmQgU3Vic2NyaXB0aW9uIGZvcm1zIGFuZCBtb3JlOjwvcD48dWw+PGxpPlVubGltaXRlZCBDb250ZW50IEN1c3RvbWl6YXRpb248L2xpPjxsaT5BdXRvIE9wZW4gUG9wdXBzPC9saT48bGk+Q29udGFjdCBGb3JtIHdpdGggcG9wLXVwPC9saT48bGk+UG9wdXAgT3BlbmluZyBBbmltYXRpb25zPC9saT48L3VsPiI7fXM6MTA6Im9wdHNfYXR0cnMiO2E6Mjp7czo5OiJiZ19udW1iZXIiO3M6MToiMyI7czoxNjoidHh0X2Jsb2NrX251bWJlciI7czoxOiIyIjt9fQ==","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose\"></a>\r\n <div class=\"ppsPopupListsInner\">\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupTxt_0\">\r\n <div class=\"ppsTxtContent\">[txt_0]</div>\r\n </div>\r\n [endif]\r\n <div class=\"ppsPopupTblCols\">\r\n <div class=\"ppsPopupLeftCol\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel\">[label]</div>\r\n [endif]\r\n [if enb_txt_1]\r\n <div class=\"ppsPopupTxt ppsPopupTxt_1\">[txt_1]</div>\r\n [endif]\r\n </div>\r\n <div class=\"ppsPopupRightCol\">\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n <div class=\"ppsBigArrow\"></div>\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n </div>\r\n \r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n font-family: Helvetica,Arial,sans-serif;\r\n font-size: 14px;\r\n \r\n [if bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color: #414141;\r\n font-size: 28px;\r\n font-style: normal;\r\n font-weight: bold;\r\n letter-spacing: -1px;\r\n line-height: 35px;\r\n text-shadow: 0 1px 1px #000;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupListsInner {\r\n [if bg_type_0 == \'color\']\r\n background: {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}; /* Old browsers */\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* FF3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%,[bg_color_0])); /* Chrome,Safari4+ */\r\n background: -webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%,[bg_color_0] 100%); /* Chrome10+,Safari5.1+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%,[bg_color_0] 100%); /* Opera 12+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%,[bg_color_0] 100%); /* IE10+ */\r\n background: radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%,[bg_color_0] 100%); /* W3C */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\', endColorstr=\'#eaeaea\',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n width: 100%;\r\n border-bottom: 1px solid {{ adjust_brightness(popup.params.tpl.bg_color_0, -50) }};\r\n clear: both;\r\n font-size: 13px;\r\n font-weight: bold;\r\n font-family: Helvetica,Arial,sans-serif;\r\n [if bg_type_0 == \'color\']\r\n background: [bg_color_0]; /* Old browsers */\r\n background: -moz-linear-gradient(top, [bg_color_0] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* FF3.6+ */\r\n background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,[bg_color_0]), color-stop(100%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }})); /* Chrome,Safari4+ */\r\n background: -webkit-linear-gradient(top, [bg_color_0] 0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* Chrome10+,Safari5.1+ */\r\n background: -o-linear-gradient(top, [bg_color_0] 0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* Opera 11.10+ */\r\n background: -ms-linear-gradient(top, [bg_color_0] 0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* IE10+ */\r\n background: linear-gradient(to bottom, [bg_color_0] 0%,{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }} 100%); /* W3C */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'[bg_color_0]\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 20) }}\',GradientType=0 ); /* IE6-9 */\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 .ppsTxtContent {\r\n padding: 10px 10px 10px 50px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTblCols {\r\n display: table;\r\n padding: 10px 10px 10px 50px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLeftCol {\r\n display: table-cell;\r\n vertical-align: top;\r\n [if enb_subscribe]\r\n width: 64%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupRightCol {\r\n width: 36%;\r\n display: table-cell;\r\n position: relative;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 30px 30px 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: 100%;\r\n margin-bottom: 10px;\r\n height: 40px;\r\n border: 1px solid #000;\r\n border-radius: 10px;\r\n display: block;\r\n background-color: #fff;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n box-shadow: 2px 2px 2px #dcdcdc inset;\r\n padding-left: 10px;\r\n font-size: 17px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n vertical-align: middle;\r\n height: 40px;\r\n background-color: transparent;\r\n border: none;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n margin-left: -10px;\r\n font-size: 17px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n height: auto;\r\n font-family: inherit;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text][name=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/mail-icon.png\");\r\n background-repeat: no-repeat;\r\n background-position: 90% center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n border: none;\r\n [if bg_type_1 == \'color\']\r\n background: [bg_color_1];\r\n background: -moz-linear-gradient(90deg, [bg_color_1] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n background: -webkit-linear-gradient(270deg, [bg_color_1] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n background: -o-linear-gradient(270deg, [bg_color_1] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n background: -ms-linear-gradient(270deg, [bg_color_1] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n background: linear-gradient(0deg, [bg_color_1]) 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 100) }} 63%);\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n color: #000;\r\n font-size: 20px;\r\n text-shadow: 2px 2px 2px #000;\r\n cursor: pointer;\r\n max-width: 230px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n box-shadow: inset 1px 1px 3px #666;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote {\r\n color: #979696;\r\n font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n font-size: xx-small;\r\n font-style: italic;\r\n line-height: 14px;\r\n text-align: left;\r\n margin-left: 30px;\r\n}\r\n#ppsPopupShell_[ID] .ppsBigArrow {\r\n [if bg_type_2 == \'img\']\r\n position: absolute;\r\n width: 102px;\r\n height: 81px;\r\n background-image: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n top: -20px;\r\n right: 20px;\r\n z-index: 100;\r\n [else]\r\n display: none;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSuccessMsg {\r\n padding: 55px 5px 5px;\r\n}","","1","1","1","1","2015-01-13 19:22:48","13"),
496
+ ("4","Facebook Like","1","0","YTozOntzOjQ6Im1haW4iO2E6MTc6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNzoic2hvd19vbl9zY3JvbGxfd2luZG93X2RlbGF5IjtzOjE6IjAiO3M6MzM6InNob3dfb25fc2Nyb2xsX3dpbmRvd19wZXJjX3Njcm9sbCI7czoxOiIwIjtzOjI4OiJzaG93X29uX2FmdGVyX2luYWN0aXZlX3ZhbHVlIjtzOjI6IjEwIjtzOjg6ImNsb3NlX29uIjtzOjEwOiJ1c2VyX2Nsb3NlIjtzOjI1OiJjbG9zZV9vbl9hZnRlcl90aW1lX3ZhbHVlIjtzOjE6IjUiO3M6MTA6InNob3dfcGFnZXMiO3M6MzoiYWxsIjtzOjc6InNob3dfdG8iO3M6ODoiZXZlcnlvbmUiO3M6Mjk6InNob3dfdG9fZmlyc3RfdGltZV92aXNpdF9kYXlzIjtzOjI6IjMwIjtzOjMwOiJzaG93X3RvX3VudGlsX21ha2VfYWN0aW9uX2RheXMiO3M6MjoiMzAiO3M6MjE6ImhpZGVfZm9yX2RldmljZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX2Zvcl9wb3N0X3R5cGVzX3Nob3ciO3M6MToiMCI7czoxNzoiaGlkZV9mb3JfaXBzX3Nob3ciO3M6MToiMCI7czoxMjoiaGlkZV9mb3JfaXBzIjtzOjA6IiI7czoyMzoiaGlkZV9mb3JfY291bnRyaWVzX3Nob3ciO3M6MToiMCI7czoyMzoiaGlkZV9mb3JfbGFuZ3VhZ2VzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjEzOntzOjU6IndpZHRoIjtzOjM6IjMwMCI7czoxMzoid2lkdGhfbWVhc3VyZSI7czoyOiJweCI7czo2OiJoZWlnaHQiO3M6MDoiIjtzOjE0OiJoZWlnaHRfbWVhc3VyZSI7czoyOiJweCI7czoxMjoiZmJfbGlrZV9vcHRzIjthOjU6e3M6NDoiaHJlZiI7czo1NzoiaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3BhZ2VzL1N1cHN5c3RpYy8xMzg5MzkwMTk4MDI4OTk5IjtzOjExOiJjb2xvcnNjaGVtZSI7czo1OiJsaWdodCI7czo2OiJoZWFkZXIiO3M6MToiMSI7czoxMToic2hvd19ib3JkZXIiO3M6MToiMSI7czoxMDoic2hvd19mYWNlcyI7czoxOiIxIjt9czoxODoiYmdfb3ZlcmxheV9vcGFjaXR5IjtzOjM6IjAuNSI7czo5OiJiZ190eXBlXzAiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzAiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8wIjtzOjc6IiNmZmZmZmYiO3M6OToiY2xvc2VfYnRuIjtzOjExOiJjbGFzc3lfZ3JleSI7czo4OiJhbmltX2tleSI7czo0OiJub25lIjtzOjEzOiJhbmltX2R1cmF0aW9uIjtzOjE6IjEiO3M6MTE6ImxheWVyZWRfcG9zIjtzOjM6InRvcCI7fXM6MTA6Im9wdHNfYXR0cnMiO2E6Mjp7czo5OiJiZ19udW1iZXIiO3M6MToiMSI7czoxNjoidHh0X2Jsb2NrX251bWJlciI7czoxOiIwIjt9fQ==","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupFbLikeShell\">\r\n <a href=\"#\" class=\"ppsPopupClose\"></a>\r\n [fb_like_widget_html]\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n /*height: [height][height_measure];*/\r\n [if bg_type_0 == \'color\']\r\n background-color: [bg_color_0];\r\n [elseif bg_type_0 == \'img\']\r\n background-repeat: no_repeat;\r\n background-image: url(\"[bg_img_0]\");\r\n background-size: cover;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n z-index: 99;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n","","1","1","1","2","2015-01-16 19:35:51","3"),
497
  ("5","Video List","1","0","YTozOntzOjQ6Im1haW4iO2E6MTc6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNzoic2hvd19vbl9zY3JvbGxfd2luZG93X2RlbGF5IjtzOjE6IjAiO3M6MzM6InNob3dfb25fc2Nyb2xsX3dpbmRvd19wZXJjX3Njcm9sbCI7czoxOiIwIjtzOjI4OiJzaG93X29uX2FmdGVyX2luYWN0aXZlX3ZhbHVlIjtzOjI6IjEwIjtzOjg6ImNsb3NlX29uIjtzOjEwOiJ1c2VyX2Nsb3NlIjtzOjI1OiJjbG9zZV9vbl9hZnRlcl90aW1lX3ZhbHVlIjtzOjE6IjUiO3M6MTA6InNob3dfcGFnZXMiO3M6MzoiYWxsIjtzOjc6InNob3dfdG8iO3M6ODoiZXZlcnlvbmUiO3M6Mjk6InNob3dfdG9fZmlyc3RfdGltZV92aXNpdF9kYXlzIjtzOjI6IjMwIjtzOjMwOiJzaG93X3RvX3VudGlsX21ha2VfYWN0aW9uX2RheXMiO3M6MjoiMzAiO3M6MjE6ImhpZGVfZm9yX2RldmljZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX2Zvcl9wb3N0X3R5cGVzX3Nob3ciO3M6MToiMCI7czoxNzoiaGlkZV9mb3JfaXBzX3Nob3ciO3M6MToiMCI7czoxMjoiaGlkZV9mb3JfaXBzIjtzOjA6IiI7czoyMzoiaGlkZV9mb3JfY291bnRyaWVzX3Nob3ciO3M6MToiMCI7czoyMzoiaGlkZV9mb3JfbGFuZ3VhZ2VzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjU2OntzOjk6InZpZGVvX3VybCI7czo0MzoiaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1uS0l1OXllbjVuYyI7czo1OiJ3aWR0aCI7czozOiI4MjQiO3M6MTM6IndpZHRoX21lYXN1cmUiO3M6MjoicHgiO3M6NjoiaGVpZ2h0IjtzOjM6IjQwMCI7czoxNDoiaGVpZ2h0X21lYXN1cmUiO3M6MjoicHgiO3M6MTg6ImJnX292ZXJsYXlfb3BhY2l0eSI7czozOiIwLjUiO3M6OToiYmdfdHlwZV8wIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18wIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMCI7czo3OiIjZWJlYmViIjtzOjk6ImJnX3R5cGVfMSI7czo1OiJjb2xvciI7czo4OiJiZ19pbWdfMSI7czowOiIiO3M6MTA6ImJnX2NvbG9yXzEiO3M6NzoiIzA2NmRhYiI7czo5OiJiZ190eXBlXzIiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzIiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8yIjtzOjc6IiM4NTAwMDgiO3M6MTA6ImZvbnRfbGFiZWwiO3M6NzoiZGVmYXVsdCI7czoxNjoibGFiZWxfZm9udF9jb2xvciI7czo3OiIjMDAwMDAwIjtzOjExOiJmb250X2Zvb3RlciI7czo3OiJkZWZhdWx0IjtzOjE3OiJmb290ZXJfZm9udF9jb2xvciI7czo3OiIjNTg1ODU4IjtzOjk6ImNsb3NlX2J0biI7czoxMToibGlzdHNfYmxhY2siO3M6MTM6ImVuYl9zdWJzY3JpYmUiO3M6MToiMSI7czo4OiJzdWJfZGVzdCI7czo5OiJ3b3JkcHJlc3MiO3M6MjM6InN1Yl93cF9jcmVhdGVfdXNlcl9yb2xlIjtzOjEwOiJzdWJzY3JpYmVyIjtzOjE5OiJzdWJfYXdlYmVyX2xpc3RuYW1lIjtzOjA6IiI7czoyMToic3ViX2F3ZWJlcl9hZHRyYWNraW5nIjtzOjA6IiI7czoyMToic3ViX21haWxjaGltcF9hcGlfa2V5IjtzOjA6IiI7czoxNDoic3ViX2dyX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfYWNfYXBpX3VybCI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfa2V5IjtzOjA6IiI7czoxODoic3ViX2FyX2Zvcm1fYWN0aW9uIjtzOjA6IiI7czoxMDoic3ViX3NnYV9pZCI7czowOiIiO3M6MTU6InN1Yl9zZ2FfbGlzdF9pZCI7czowOiIiO3M6MjE6InN1Yl9zZ2FfYWN0aXZhdGVfY29kZSI7czowOiIiO3M6MTA6InN1Yl9maWVsZHMiO2E6Mjp7czo1OiJlbWFpbCI7YTo3OntzOjQ6Im5hbWUiO3M6NToiZW1haWwiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjY6IkUtTWFpbCI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjEiO3M6MzoiZW5iIjtzOjE6IjEiO31zOjQ6Im5hbWUiO2E6Nzp7czozOiJlbmIiO3M6MToiMSI7czo0OiJuYW1lIjtzOjQ6Im5hbWUiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjQ6Ik5hbWUiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIwIjt9fXM6MjA6InN1Yl90eHRfY29uZmlybV9zZW50IjtzOjY3OiJDb25maXJtYXRpb24gbGluayB3YXMgc2VudCB0byB5b3VyIGVtYWlsIGFkZHJlc3MuIENoZWNrIHlvdXIgZW1haWwhIjtzOjE1OiJzdWJfdHh0X3N1Y2Nlc3MiO3M6MjQ6IlRoYW5rIHlvdSBmb3Igc3Vic2NyaWJlISI7czoyMToic3ViX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjE2OiJzdWJfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfc3ViamVjdCI7czozNDoiQ29uZmlybSBzdWJzY3JpcHRpb24gb24gW3NpdGVuYW1lXSI7czoyNToic3ViX3R4dF9jb25maXJtX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6Mjg6InN1Yl90eHRfY29uZmlybV9tYWlsX21lc3NhZ2UiO3M6MTk3OiJZb3Ugc3Vic2NyaWJlZCBvbiBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPi4gRm9sbG93IDxhIGhyZWY9XCJbY29uZmlybV9saW5rXVwiPnRoaXMgbGluazwvYT4gdG8gY29tcGxldGUgeW91ciBzdWJzY3JpcHRpb24uIElmIHlvdSBkaWQgbm90IHN1YnNjcmliZSBoZXJlIC0ganVzdCBpZ25vcmUgdGhpcyBtZXNzYWdlLiI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfc3ViamVjdCI7czozNzoiW3NpdGVuYW1lXSBZb3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCI7czoyODoic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MzE6InN1Yl90eHRfc3Vic2NyaWJlcl9tYWlsX21lc3NhZ2UiO3M6NjU6IlVzZXJuYW1lOiBbdXNlcl9sb2dpbl08YnIgLz5QYXNzd29yZDogW3Bhc3N3b3JkXTxiciAvPltsb2dpbl91cmxdIjtzOjI1OiJzdWJfcmVkaXJlY3RfZW1haWxfZXhpc3RzIjtzOjA6IiI7czoxMzoic3ViX2J0bl9sYWJlbCI7czo4OiJTaWduLXVwISI7czoxNToiZW5iX3NtX2ZhY2Vib29rIjtzOjE6IjEiO3M6MTc6ImVuYl9zbV9nb29nbGVwbHVzIjtzOjE6IjEiO3M6MTQ6ImVuYl9zbV90d2l0dGVyIjtzOjE6IjEiO3M6OToic21fZGVzaWduIjtzOjY6InNpbXBsZSI7czo4OiJhbmltX2tleSI7czo0OiJub25lIjtzOjEzOiJhbmltX2R1cmF0aW9uIjtzOjA6IiI7czoxMToibGF5ZXJlZF9wb3MiO3M6MzoidG9wIjtzOjU6ImxhYmVsIjtzOjU5OiJDaGVjayB2aWRlbyBhbmQgPGkgc3R5bGU9XCJjb2xvcjogI2MyMjUyZjtcIj5zdWJzY3JpYmUhPC9pPiI7czoxMzoiZW5iX2Zvb3Rfbm90ZSI7czoxOiIxIjtzOjk6ImZvb3Rfbm90ZSI7czoxMTg6IldlIHJlc3BlY3QgeW91ciBwcml2YWN5LiBZb3VyIGluZm9ybWF0aW9uIHdpbGwgbm90IGJlIHNoYXJlZCB3aXRoIGFueSB0aGlyZCBwYXJ0eSBhbmQgeW91IGNhbiB1bnN1YnNjcmliZSBhdCBhbnkgdGltZSAiO31zOjEwOiJvcHRzX2F0dHJzIjthOjM6e3M6OToiYmdfbnVtYmVyIjtzOjE6IjMiO3M6MTY6InR4dF9ibG9ja19udW1iZXIiO3M6MToiMCI7czoyMToidmlkZW9faGVpZ2h0X2FzX3BvcHVwIjtzOjE6IjEiO319","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose ppsPopupClose_[close_btn]\"></a>\r\n <div class=\"ppsInnerTblContent\">\r\n <div class=\"ppsPopupListsInner ppsPopupInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupListsLabel\">[label]</div>\r\n <div style=\"clear: both;\"></div>\r\n [endif]\r\n <div class=\"ppsPopupVideo \">\r\n [video_html]\r\n </div>\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n <div class=\"ppsRightCol\">\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n padding: 15px;\r\n font-family: Georgia, Times, serif;\r\n font-size: 13px;\r\n line-height: 21px;\r\n font-weight: normal;\r\n color: #000;\r\n}\r\n#ppsPopupShell_[ID] iframe {\r\n width: 100% !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsInnerTblContent {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupInner {\r\n {% if popup.params.tpl.enb_subscribe or popup.params.tpl.enb_foot_note or popup.params.tpl.enb_sm %}\r\n width: 66%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n display: table-cell;\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%, [bg_color_0])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\', endColorstr=\'[bg_color_0]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color: #000;\r\n font-family: \"Myriad Pro\",\"Trebuchet MS\",\"Helvetica Neue\",Helvetica,Arial,Sans-Serif;\r\n font-size: 30px;\r\n letter-spacing: -1px;\r\n line-height: 40px;\r\n letter-spacing: -1px;\r\n font-weight: bold;\r\n margin-top: 15px;\r\n margin-bottom: 16px;\r\n padding-left: 20px;\r\n text-shadow: 0px 0px 1px #000;\r\n -moz-text-shadow: 0px 0px 1px #000;\r\n -webkit-text-shadow: 0px 0px 1px #000;\r\n}\r\n#ppsPopupShell_[ID] .ppsRightCol {\r\n display: table-cell;\r\n width: 34%;\r\n height: 100%;\r\n vertical-align: top;\r\n [if bg_type_1 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}), color-stop(100%, [bg_color_1])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}\', endColorstr=\'[bg_color_1]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 30px 30px 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: 100%;\r\n margin-bottom: 10px;\r\n height: 40px;\r\n border: 1px solid #d1b36d;\r\n border-radius: 10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n box-shadow: 2px 2px 2px #dcdcdc inset;\r\n padding-left: 10px;\r\n font-size: 17px;\r\n background-color: #fff;\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n background-color: transparent;\r\n height: 40px;\r\n border: none;\r\n margin-left: -5px;\r\n font-size: 17px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n font-family: inherit;\r\n height: auto;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text][name=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/mail-icon.png\");\r\n background-repeat: no-repeat;\r\n background-position: 90% center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n border-color: #000;\r\n [if bg_type_2 == \'color\']\r\n background: [bg_color_2];\r\n background: -moz-linear-gradient(90deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -webkit-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -o-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: -ms-linear-gradient(270deg, [bg_color_2] 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n background: linear-gradient(0deg, [bg_color_2]) 0%, {{ adjust_brightness(popup.params.tpl.bg_color_2, 100) }} 63%);\r\n [elseif bg_type_2 == \'img\']\r\n background-image: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n color: #fff;\r\n font-size: 20px;\r\n text-shadow: 2px 2px 2px #000;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n box-shadow: inset 1px 1px 3px #666;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupVideo {\r\n width: 100%;\r\n line-height: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose.ppsPopupClose_lists_black {\r\n top: 0 !important;\r\n right: 0 !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote{\r\n color: #585858;\r\n font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n font-size: x-small;\r\n font-style: italic;\r\n line-height: 14px;\r\n margin: 5px 30px;\r\n}","","1","1","1","3","2015-01-10 18:59:43","17"),
498
  ("6","Video Classy","1","0","YTozOntzOjQ6Im1haW4iO2E6MjQ6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNToic2hvd19vbl9jbGlja19vbl9lbF9kZWxheSI7czoxOiIwIjtzOjI3OiJzaG93X29uX3Njcm9sbF93aW5kb3dfZGVsYXkiO3M6MToiMCI7czozMzoic2hvd19vbl9zY3JvbGxfd2luZG93X3BlcmNfc2Nyb2xsIjtzOjE6IjAiO3M6Mjg6InNob3dfb25fYWZ0ZXJfaW5hY3RpdmVfdmFsdWUiO3M6MjoiMTAiO3M6MjU6InNob3dfb25fbGlua19mb2xsb3dfZGVsYXkiO3M6MToiMCI7czo4OiJjbG9zZV9vbiI7czoxMDoidXNlcl9jbG9zZSI7czoyNToiY2xvc2Vfb25fYWZ0ZXJfdGltZV92YWx1ZSI7czoxOiI1IjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czoxNDoic2hvd190aW1lX2Zyb20iO3M6NzoiMTI6MDBhbSI7czoxMjoic2hvd190aW1lX3RvIjtzOjc6IjEyOjAwYW0iO3M6Nzoic2hvd190byI7czo4OiJldmVyeW9uZSI7czoyOToic2hvd190b19maXJzdF90aW1lX3Zpc2l0X2RheXMiO3M6MjoiMzAiO3M6MzA6InNob3dfdG9fdW50aWxfbWFrZV9hY3Rpb25fZGF5cyI7czoyOiIzMCI7czoyMToiaGlkZV9mb3JfZGV2aWNlc19zaG93IjtzOjE6IjAiO3M6MjQ6ImhpZGVfZm9yX3Bvc3RfdHlwZXNfc2hvdyI7czoxOiIwIjtzOjE3OiJoaWRlX2Zvcl9pcHNfc2hvdyI7czoxOiIwIjtzOjEyOiJoaWRlX2Zvcl9pcHMiO3M6MDoiIjtzOjIzOiJoaWRlX2Zvcl9jb3VudHJpZXNfc2hvdyI7czoxOiIwIjtzOjIzOiJoaWRlX2Zvcl9sYW5ndWFnZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX3NlYXJjaF9lbmdpbmVzX3Nob3ciO3M6MToiMCI7czoxODoiaGlkZV9wcmVnX3VybF9zaG93IjtzOjE6IjAiO3M6MTM6ImhpZGVfcHJlZ191cmwiO3M6MDoiIjt9czozOiJ0cGwiO2E6NzE6e3M6OToidmlkZW9fdXJsIjtzOjQzOiJodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PW5LSXU5eWVuNW5jIjtzOjU6IndpZHRoIjtzOjM6IjYzMCI7czoxMzoid2lkdGhfbWVhc3VyZSI7czoyOiJweCI7czo2OiJoZWlnaHQiO3M6MzoiNDgwIjtzOjE0OiJoZWlnaHRfbWVhc3VyZSI7czoyOiJweCI7czoxODoiYmdfb3ZlcmxheV9vcGFjaXR5IjtzOjM6IjAuNSI7czo5OiJiZ190eXBlXzAiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzAiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8wIjtzOjc6IiNlY2UwZDEiO3M6OToiYmdfdHlwZV8xIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18xIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMSI7czo3OiIjN2ZiNmNiIjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiIzU1NTU1NSI7czoxMToiZm9udF9mb290ZXIiO3M6NzoiZGVmYXVsdCI7czoxNzoiZm9vdGVyX2ZvbnRfY29sb3IiO3M6NzoiIzk5OTk5OSI7czo5OiJjbG9zZV9idG4iO3M6MTE6ImNsYXNzeV9ncmV5IjtzOjExOiJsYXllcmVkX3BvcyI7czozOiJ0b3AiO3M6NToibGFiZWwiO3M6MTg6Ikxvb2sgb3VyIG5ldyB2aWRlbyI7czo5OiJmb290X25vdGUiO3M6MDoiIjtzOjE1OiJlbmJfc21fZmFjZWJvb2siO3M6MToiMSI7czoxNzoiZW5iX3NtX2dvb2dsZXBsdXMiO3M6MToiMSI7czoxNDoiZW5iX3NtX3R3aXR0ZXIiO3M6MToiMSI7czo5OiJzbV9kZXNpZ24iO3M6Njoic2ltcGxlIjtzOjg6ImFuaW1fa2V5IjtzOjQ6Im5vbmUiO3M6MTM6ImFuaW1fZHVyYXRpb24iO3M6MDoiIjtzOjg6InN1Yl9kZXN0IjtzOjk6IndvcmRwcmVzcyI7czoyMzoic3ViX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTk6InN1Yl9hd2ViZXJfbGlzdG5hbWUiO3M6MDoiIjtzOjIxOiJzdWJfYXdlYmVyX2FkdHJhY2tpbmciO3M6MDoiIjtzOjIxOiJzdWJfbWFpbGNoaW1wX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfZ3JfYXBpX2tleSI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfdXJsIjtzOjA6IiI7czoxNDoic3ViX2FjX2FwaV9rZXkiO3M6MDoiIjtzOjE4OiJzdWJfYXJfZm9ybV9hY3Rpb24iO3M6MDoiIjtzOjEwOiJzdWJfc2dhX2lkIjtzOjA6IiI7czoxNToic3ViX3NnYV9saXN0X2lkIjtzOjA6IiI7czoyMToic3ViX3NnYV9hY3RpdmF0ZV9jb2RlIjtzOjA6IiI7czoxMDoic3ViX2ZpZWxkcyI7YToyOntzOjU6ImVtYWlsIjthOjc6e3M6NDoibmFtZSI7czo1OiJlbWFpbCI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NjoiRS1NYWlsIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMSI7czozOiJlbmIiO3M6MToiMSI7fXM6NDoibmFtZSI7YTo3OntzOjM6ImVuYiI7czoxOiIxIjtzOjQ6Im5hbWUiO3M6NDoibmFtZSI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NDoiTmFtZSI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjAiO319czoyMDoic3ViX3R4dF9jb25maXJtX3NlbnQiO3M6Njc6IkNvbmZpcm1hdGlvbiBsaW5rIHdhcyBzZW50IHRvIHlvdXIgZW1haWwgYWRkcmVzcy4gQ2hlY2sgeW91ciBlbWFpbCEiO3M6MTU6InN1Yl90eHRfc3VjY2VzcyI7czoyNDoiVGhhbmsgeW91IGZvciBzdWJzY3JpYmUhIjtzOjIxOiJzdWJfdHh0X2ludmFsaWRfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MjA6InN1Yl90eHRfZXhpc3RzX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjE2OiJzdWJfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfc3ViamVjdCI7czozNDoiQ29uZmlybSBzdWJzY3JpcHRpb24gb24gW3NpdGVuYW1lXSI7czoyNToic3ViX3R4dF9jb25maXJtX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6Mjg6InN1Yl90eHRfY29uZmlybV9tYWlsX21lc3NhZ2UiO3M6MTk3OiJZb3Ugc3Vic2NyaWJlZCBvbiBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPi4gRm9sbG93IDxhIGhyZWY9XCJbY29uZmlybV9saW5rXVwiPnRoaXMgbGluazwvYT4gdG8gY29tcGxldGUgeW91ciBzdWJzY3JpcHRpb24uIElmIHlvdSBkaWQgbm90IHN1YnNjcmliZSBoZXJlIC0ganVzdCBpZ25vcmUgdGhpcyBtZXNzYWdlLiI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfc3ViamVjdCI7czozNzoiW3NpdGVuYW1lXSBZb3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCI7czoyODoic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MzE6InN1Yl90eHRfc3Vic2NyaWJlcl9tYWlsX21lc3NhZ2UiO3M6NjU6IlVzZXJuYW1lOiBbdXNlcl9sb2dpbl08YnIgLz5QYXNzd29yZDogW3Bhc3N3b3JkXTxiciAvPltsb2dpbl91cmxdIjtzOjI1OiJzdWJfcmVkaXJlY3RfZW1haWxfZXhpc3RzIjtzOjA6IiI7czoxMzoic3ViX2J0bl9sYWJlbCI7czo4OiJTaWduLVVwISI7czoxMzoic3ViX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InN1Yl9uZXdfbWVzc2FnZSI7czoxMjk6IllvdSBoYXZlIG5ldyBzdWJzY3JpYmVyIG9uIHlvdXIgc2l0ZSA8YSBocmVmPVwiW3NpdGV1cmxdXCI+W3NpdGVuYW1lXTwvYT4sIGhlcmUgdXMgc3Vic2NyaWJlciBpbmZvcm1hdGlvbjo8YnIgLz5bc3Vic2NyaWJlcl9kYXRhXSI7czoxODoibG9naW5fcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoxNToibG9naW5fYnRuX2xhYmVsIjtzOjU6IkxvZ2luIjtzOjE2OiJyZWdfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyMzoicmVnX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTM6InJlZ19idG5fbGFiZWwiO3M6ODoiUmVnaXN0ZXIiO3M6MTA6InJlZ19maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjc6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo0OiJOYW1lIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMCI7fXM6NToiZW1haWwiO2E6Nzp7czo0OiJuYW1lIjtzOjU6ImVtYWlsIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo2OiJFLU1haWwiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIxIjtzOjM6ImVuYiI7czoxOiIxIjt9fXM6MjA6InJlZ190eHRfY29uZmlybV9zZW50IjtzOjY3OiJDb25maXJtYXRpb24gbGluayB3YXMgc2VudCB0byB5b3VyIGVtYWlsIGFkZHJlc3MuIENoZWNrIHlvdXIgZW1haWwhIjtzOjE1OiJyZWdfdHh0X3N1Y2Nlc3MiO3M6Mjc6IlRoYW5rIHlvdSBmb3IgcmVnaXN0cmF0aW9uISI7czoyMToicmVnX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjI4OiJyZWdfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHJlZ2lzdHJhdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJyZWdfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoicmVnX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTY6IllvdSByZWdpc3RlcmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHJlZ2lzdHJhdGlvbi4gSWYgeW91IGRpZCBub3QgcmVnaXN0ZXIgaGVyZSAtIGp1c3QgaWdub3JlIHRoaXMgbWVzc2FnZS4iO3M6MzE6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX3N1YmplY3QiO3M6Mzc6IltzaXRlbmFtZV0gWW91ciB1c2VybmFtZSBhbmQgcGFzc3dvcmQiO3M6Mjg6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX2Zyb20iO3M6MTQ6ImFkbWluQG1haWwuY29tIjtzOjMxOiJyZWdfdHh0X3N1YnNjcmliZXJfbWFpbF9tZXNzYWdlIjtzOjY1OiJVc2VybmFtZTogW3VzZXJfbG9naW5dPGJyIC8+UGFzc3dvcmQ6IFtwYXNzd29yZF08YnIgLz5bbG9naW5fdXJsXSI7czoxMzoicmVnX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InJlZ19uZXdfbWVzc2FnZSI7czoxMjE6IllvdSBoYXZlIG5ldyBtZW1iZXIgb24geW91ciBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPiwgaGVyZSB1cyBtZW1iZXIgaW5mb3JtYXRpb246PGJyIC8+W3N1YnNjcmliZXJfZGF0YV0iO31zOjEwOiJvcHRzX2F0dHJzIjthOjQ6e3M6OToiYmdfbnVtYmVyIjtzOjE6IjIiO3M6MTY6InR4dF9ibG9ja19udW1iZXIiO3M6MToiMCI7czoyMDoidmlkZW9fd2lkdGhfYXNfcG9wdXAiO3M6MToiMSI7czoyMToidmlkZW9faGVpZ2h0X2FzX3BvcHVwIjtzOjE6IjEiO319","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupClassyShell\">\r\n <a href=\"#\" class=\"ppsPopupClose\"></a>\r\n <div class=\"ppsPopupClassyInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupClassyLabel\">[label]</div>\r\n [endif]\r\n <div class=\"ppsPopupVideo\">\r\n [video_html]\r\n </div>\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">[foot_note]</div>\r\n [endif]\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n [if bg_type_0 == \'color\']\r\n background-color: {{ popup.params.tpl.bg_color_0 }};\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-size: 100%;\r\n background-repeat: no-repeat;\r\n [endif]\r\n padding: 7px;\r\n}\r\n#ppsPopupShell_[ID], #ppsPopupShell_[ID] * {\r\n -webkit-box-sizing: content-box;\r\n -moz-box-sizing: content-box;\r\n box-sizing: content-box;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyInner {\r\n padding: 0;\r\n border: {{ adjust_brightness(popup.params.tpl.bg_color_0, 30) }};\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ popup.params.tpl.bg_color_0 }}), color-stop(100%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }})); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ popup.params.tpl.bg_color_0 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }} 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ popup.params.tpl.bg_color_0 }}\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }}\',GradientType=1 ); /* ie6-9 */\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n height: 48px;\r\n font-size: 27px;\r\n border: none;\r\n padding: 1px 8px 0;\r\n width: calc((100% - 70px) / 3);\r\n box-sizing: content-box;\r\n margin-top: 10px;\r\n float: left;\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n [if bg_type_0 == \'color\']\r\n -webkit-box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n -moz-box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n box-shadow: inset 4px 4px 4px 0px {{ adjust_brightness(popup.params.tpl.bg_color_0, -40) }};\r\n background-color: {{ adjust_brightness(popup.params.tpl.bg_color_0, -20) }};\r\n color: {{ adjust_brightness(popup.params.tpl.bg_color_0, -100) }};\r\n [endif]\r\n margin-right: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n height: 48px;\r\n vertical-align: middle;\r\n background-color: transparent;\r\n border: none;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select option {\r\n font-size: 27px;\r\n color: #6d6d6d;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n width: calc(100% - 30px);\r\n height: auto;\r\n font-family: inherit;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n color: #eee;\r\n margin-right: 0;\r\n cursor: pointer;\r\n [if bg_type_1 == \'color\']\r\n text-shadow: -1px -1px 1px {{ adjust_brightness(popup.params.tpl.bg_color_1, -80) }};\r\n border: 1px solid {{ adjust_brightness(popup.params.tpl.bg_color_1, -40) }};\r\n background: -moz-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ popup.params.tpl.bg_color_1 }}), color-stop(100%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }})); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ popup.params.tpl.bg_color_1 }} 0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }} 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ popup.params.tpl.bg_color_1 }}\', endColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, -50) }}\',GradientType=1 ); /* ie6-9 */\r\n\r\n -webkit-box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n -moz-box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n box-shadow: inset 0px 0px 2px 2px {{ adjust_brightness(popup.params.tpl.bg_color_1, 10) }};\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-size: 100%;\r\n background-repeat: no-repeat;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:disabled {\r\n color: transparent;\r\n cursor: progress;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell {\r\n padding-top: 10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyLabel {\r\n width: 100%;\r\n text-align: center;\r\n color: #555555;\r\n text-shadow: 1px 1px 1px #ffffff;\r\n font-size: 35px;\r\n margin-top: 26px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSuccessMsg {\r\n color: #555555;\r\n border: 1px solid #555555;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClassyTxt {\r\n font-size: 20px;\r\n line-height: 160%;\r\n color: rgb(85, 85, 85);\r\n padding-top: 14px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupVideo {\r\n width: 100%;\r\n line-height: 0;\r\n padding: 0;\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupVideo iframe {\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] ul {\r\n margin-top: 15px;\r\n padding-left: 0;\r\n}\r\n#ppsPopupShell_[ID] ul li {\r\n list-style: inside none disc;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote {\r\n color: #999;\r\n font-size: 12px;\r\n padding-top: 10px;\r\n text-align: center;\r\n}\r\n/*SM*/\r\n#ppsPopupShell_[ID] .ppsSm {\r\n padding: 10px 10px 0 10px;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_1_435376 .ppsSm > div {\r\n vertical-align: top !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsSm .ppsSmBtn {\r\n margin-right: 5px;\r\n}","","1","1","1","3","2015-01-03 17:00:43","16"),
499
  ("7","Layered Popup","1","0","YTozOntzOjQ6Im1haW4iO2E6MjE6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNToic2hvd19vbl9jbGlja19vbl9lbF9kZWxheSI7czoxOiIwIjtzOjI3OiJzaG93X29uX3Njcm9sbF93aW5kb3dfZGVsYXkiO3M6MToiMCI7czozMzoic2hvd19vbl9zY3JvbGxfd2luZG93X3BlcmNfc2Nyb2xsIjtzOjE6IjAiO3M6Mjg6InNob3dfb25fYWZ0ZXJfaW5hY3RpdmVfdmFsdWUiO3M6MjoiMTAiO3M6MjU6InNob3dfb25fbGlua19mb2xsb3dfZGVsYXkiO3M6MToiMCI7czo4OiJjbG9zZV9vbiI7czoxMDoidXNlcl9jbG9zZSI7czoyNToiY2xvc2Vfb25fYWZ0ZXJfdGltZV92YWx1ZSI7czoxOiI1IjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czoxNDoic2hvd190aW1lX2Zyb20iO3M6NzoiMTI6MDBhbSI7czoxMjoic2hvd190aW1lX3RvIjtzOjc6IjEyOjAwYW0iO3M6Nzoic2hvd190byI7czo4OiJldmVyeW9uZSI7czoyOToic2hvd190b19maXJzdF90aW1lX3Zpc2l0X2RheXMiO3M6MjoiMzAiO3M6MzA6InNob3dfdG9fdW50aWxfbWFrZV9hY3Rpb25fZGF5cyI7czoyOiIzMCI7czoyMToiaGlkZV9mb3JfZGV2aWNlc19zaG93IjtzOjE6IjAiO3M6MjQ6ImhpZGVfZm9yX3Bvc3RfdHlwZXNfc2hvdyI7czoxOiIwIjtzOjE3OiJoaWRlX2Zvcl9pcHNfc2hvdyI7czoxOiIwIjtzOjEyOiJoaWRlX2Zvcl9pcHMiO3M6MDoiIjtzOjIzOiJoaWRlX2Zvcl9jb3VudHJpZXNfc2hvdyI7czoxOiIwIjtzOjIzOiJoaWRlX2Zvcl9sYW5ndWFnZXNfc2hvdyI7czoxOiIwIjt9czozOiJ0cGwiO2E6ODA6e3M6NToid2lkdGgiO3M6MzoiNDAwIjtzOjEzOiJ3aWR0aF9tZWFzdXJlIjtzOjI6InB4IjtzOjE4OiJiZ19vdmVybGF5X29wYWNpdHkiO3M6MzoiMC41IjtzOjk6ImJnX3R5cGVfMCI7czo1OiJjb2xvciI7czo4OiJiZ19pbWdfMCI7czowOiIiO3M6MTA6ImJnX2NvbG9yXzAiO3M6NzoiI2YwNjIyZSI7czo5OiJiZ190eXBlXzEiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzEiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8xIjtzOjc6IiNkYWQyYmYiO3M6OToiYmdfdHlwZV8yIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18yIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMiI7czo3OiIjNTU1NTU1IjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiI2ZmZmZmZiI7czoxMDoiZm9udF90eHRfMCI7czo3OiJkZWZhdWx0IjtzOjE3OiJ0ZXh0X2ZvbnRfY29sb3JfMCI7czo3OiIjZmZmZmZmIjtzOjExOiJmb250X2Zvb3RlciI7czo3OiJkZWZhdWx0IjtzOjE3OiJmb290ZXJfZm9udF9jb2xvciI7czo3OiIjNTg1ODU4IjtzOjE1OiJyZXNwb25zaXZlX21vZGUiO3M6MzoiZGVmIjtzOjk6ImNsb3NlX2J0biI7czoxMToid2hpbGVfY2xvc2UiO3M6NzoiYnVsbGV0cyI7czoxMToibGlzdHNfZ3JlZW4iO3M6MTE6ImxheWVyZWRfcG9zIjtzOjM6InRvcCI7czo5OiJlbmJfbGFiZWwiO3M6MToiMSI7czo1OiJsYWJlbCI7czoxODoiVGhlIEJlc3QgV29yZFByZXNzIjtzOjk6ImVuYl90eHRfMCI7czoxOiIxIjtzOjEzOiJlbmJfZm9vdF9ub3RlIjtzOjE6IjEiO3M6OToiZm9vdF9ub3RlIjtzOjExODoiV2UgcmVzcGVjdCB5b3VyIHByaXZhY3kuIFlvdXIgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgc2hhcmVkIHdpdGggYW55IHRoaXJkIHBhcnR5IGFuZCB5b3UgY2FuIHVuc3Vic2NyaWJlIGF0IGFueSB0aW1lICI7czo2OiJlbmJfc20iO3M6MToiMSI7czoxNToiZW5iX3NtX2ZhY2Vib29rIjtzOjE6IjEiO3M6MTc6ImVuYl9zbV9nb29nbGVwbHVzIjtzOjE6IjEiO3M6MTQ6ImVuYl9zbV90d2l0dGVyIjtzOjE6IjEiO3M6OToic21fZGVzaWduIjtzOjQ6ImJveHkiO3M6ODoiYW5pbV9rZXkiO3M6NDoibm9uZSI7czoxMzoiYW5pbV9kdXJhdGlvbiI7czozOiI1MDAiO3M6MTM6ImVuYl9zdWJzY3JpYmUiO3M6MToiMSI7czo4OiJzdWJfZGVzdCI7czo5OiJ3b3JkcHJlc3MiO3M6MjM6InN1Yl93cF9jcmVhdGVfdXNlcl9yb2xlIjtzOjEwOiJzdWJzY3JpYmVyIjtzOjE5OiJzdWJfYXdlYmVyX2xpc3RuYW1lIjtzOjA6IiI7czoyMToic3ViX2F3ZWJlcl9hZHRyYWNraW5nIjtzOjA6IiI7czoyMToic3ViX21haWxjaGltcF9hcGlfa2V5IjtzOjA6IiI7czoxNDoic3ViX2dyX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfYWNfYXBpX3VybCI7czowOiIiO3M6MTQ6InN1Yl9hY19hcGlfa2V5IjtzOjA6IiI7czoxODoic3ViX2FyX2Zvcm1fYWN0aW9uIjtzOjA6IiI7czoxMDoic3ViX3NnYV9pZCI7czowOiIiO3M6MTU6InN1Yl9zZ2FfbGlzdF9pZCI7czowOiIiO3M6MjE6InN1Yl9zZ2FfYWN0aXZhdGVfY29kZSI7czowOiIiO3M6MTA6InN1Yl9maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjc6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo0OiJOYW1lIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMCI7fXM6NToiZW1haWwiO2E6Nzp7czo0OiJuYW1lIjtzOjU6ImVtYWlsIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo2OiJFLU1haWwiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIxIjtzOjM6ImVuYiI7czoxOiIxIjt9fXM6MjA6InN1Yl90eHRfY29uZmlybV9zZW50IjtzOjY3OiJDb25maXJtYXRpb24gbGluayB3YXMgc2VudCB0byB5b3VyIGVtYWlsIGFkZHJlc3MuIENoZWNrIHlvdXIgZW1haWwhIjtzOjE1OiJzdWJfdHh0X3N1Y2Nlc3MiO3M6MjQ6IlRoYW5rIHlvdSBmb3Igc3Vic2NyaWJlISI7czoyMToic3ViX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjE2OiJzdWJfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfc3ViamVjdCI7czozNDoiQ29uZmlybSBzdWJzY3JpcHRpb24gb24gW3NpdGVuYW1lXSI7czoyNToic3ViX3R4dF9jb25maXJtX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6Mjg6InN1Yl90eHRfY29uZmlybV9tYWlsX21lc3NhZ2UiO3M6MTk3OiJZb3Ugc3Vic2NyaWJlZCBvbiBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPi4gRm9sbG93IDxhIGhyZWY9XCJbY29uZmlybV9saW5rXVwiPnRoaXMgbGluazwvYT4gdG8gY29tcGxldGUgeW91ciBzdWJzY3JpcHRpb24uIElmIHlvdSBkaWQgbm90IHN1YnNjcmliZSBoZXJlIC0ganVzdCBpZ25vcmUgdGhpcyBtZXNzYWdlLiI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfc3ViamVjdCI7czozNzoiW3NpdGVuYW1lXSBZb3VyIHVzZXJuYW1lIGFuZCBwYXNzd29yZCI7czoyODoic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MzE6InN1Yl90eHRfc3Vic2NyaWJlcl9tYWlsX21lc3NhZ2UiO3M6NjU6IlVzZXJuYW1lOiBbdXNlcl9sb2dpbl08YnIgLz5QYXNzd29yZDogW3Bhc3N3b3JkXTxiciAvPltsb2dpbl91cmxdIjtzOjI1OiJzdWJfcmVkaXJlY3RfZW1haWxfZXhpc3RzIjtzOjA6IiI7czoxMzoic3ViX2J0bl9sYWJlbCI7czo4OiJTaWduLXVwISI7czoxMzoic3ViX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InN1Yl9uZXdfbWVzc2FnZSI7czoxMjk6IllvdSBoYXZlIG5ldyBzdWJzY3JpYmVyIG9uIHlvdXIgc2l0ZSA8YSBocmVmPVwiW3NpdGV1cmxdXCI+W3NpdGVuYW1lXTwvYT4sIGhlcmUgdXMgc3Vic2NyaWJlciBpbmZvcm1hdGlvbjo8YnIgLz5bc3Vic2NyaWJlcl9kYXRhXSI7czoxODoibG9naW5fcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoxNToibG9naW5fYnRuX2xhYmVsIjtzOjU6IkxvZ2luIjtzOjE2OiJyZWdfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyMzoicmVnX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTM6InJlZ19idG5fbGFiZWwiO3M6ODoiUmVnaXN0ZXIiO3M6MTA6InJlZ19maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjc6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo0OiJOYW1lIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMCI7fXM6NToiZW1haWwiO2E6Nzp7czo0OiJuYW1lIjtzOjU6ImVtYWlsIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo2OiJFLU1haWwiO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIxIjtzOjM6ImVuYiI7czoxOiIxIjt9fXM6MjA6InJlZ190eHRfY29uZmlybV9zZW50IjtzOjY3OiJDb25maXJtYXRpb24gbGluayB3YXMgc2VudCB0byB5b3VyIGVtYWlsIGFkZHJlc3MuIENoZWNrIHlvdXIgZW1haWwhIjtzOjE1OiJyZWdfdHh0X3N1Y2Nlc3MiO3M6Mjc6IlRoYW5rIHlvdSBmb3IgcmVnaXN0cmF0aW9uISI7czoyMToicmVnX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjIyOiJFbXB0eSBvciBpbnZhbGlkIGVtYWlsIjtzOjI4OiJyZWdfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHJlZ2lzdHJhdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJyZWdfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoicmVnX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTY6IllvdSByZWdpc3RlcmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHJlZ2lzdHJhdGlvbi4gSWYgeW91IGRpZCBub3QgcmVnaXN0ZXIgaGVyZSAtIGp1c3QgaWdub3JlIHRoaXMgbWVzc2FnZS4iO3M6MzE6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX3N1YmplY3QiO3M6Mzc6IltzaXRlbmFtZV0gWW91ciB1c2VybmFtZSBhbmQgcGFzc3dvcmQiO3M6Mjg6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX2Zyb20iO3M6MTQ6ImFkbWluQG1haWwuY29tIjtzOjMxOiJyZWdfdHh0X3N1YnNjcmliZXJfbWFpbF9tZXNzYWdlIjtzOjY1OiJVc2VybmFtZTogW3VzZXJfbG9naW5dPGJyIC8+UGFzc3dvcmQ6IFtwYXNzd29yZF08YnIgLz5bbG9naW5fdXJsXSI7czoxMzoicmVnX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InJlZ19uZXdfbWVzc2FnZSI7czoxMjE6IllvdSBoYXZlIG5ldyBtZW1iZXIgb24geW91ciBzaXRlIDxhIGhyZWY9XCJbc2l0ZXVybF1cIj5bc2l0ZW5hbWVdPC9hPiwgaGVyZSB1cyBtZW1iZXIgaW5mb3JtYXRpb246PGJyIC8+W3N1YnNjcmliZXJfZGF0YV0iO3M6NToidHh0XzAiO3M6MTcyOiI8cD5Qb3B1cCBieSBTdXBzeXN0aWMgbGV0cyB5b3UgZWFzaWx5IGNyZWF0ZSBlbGVnYW50IG92ZXJsYXBwaW5nIHdpbmRvd3Mgd2l0aCB1bmxpbWl0ZWQgZmVhdHVyZXMuIFBvcC11cHMgd2l0aCBTbGlkZXIsIExpZ2h0Ym94LCBDb250YWN0IGFuZCBTdWJzY3JpcHRpb24gZm9ybXMgYW5kIG1vcmU8L3A+Ijt9czoxMDoib3B0c19hdHRycyI7YToyOntzOjk6ImJnX251bWJlciI7czoxOiIzIjtzOjE2OiJ0eHRfYmxvY2tfbnVtYmVyIjtzOjE6IjEiO319","<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose ppsPopupClose_[close_btn]\"></a>\r\n <div class=\"ppsInnerTblContent\">\r\n <div class=\"ppsPopupListsInner ppsPopupInner\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupListsLabel\">[label]</div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupClassyTxt_0 ppsPopupTxt_0\">\r\n [txt_0]\r\n </div>\r\n [endif]\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n <div class=\"ppsRightCol\">\r\n [if enb_sm]\r\n <div style=\"clear: both;\"></div>\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n </div>\r\n</div>","#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n padding: 15px;\r\n font-family: Georgia, Times, serif;\r\n font-size: 13px;\r\n line-height: 21px;\r\n font-weight: normal;\r\n color: #fff;\r\n}\r\n#ppsPopupShell_[ID], #ppsPopupShell_[ID] * {\r\n -webkit-box-sizing: content-box;\r\n -moz-box-sizing: content-box;\r\n box-sizing: content-box;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupInner {\r\n {% if popup.params.tpl.enb_subscribe or popup.params.tpl.enb_foot_note or popup.params.tpl.enb_sm %}\r\n width: 100%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n [if bg_type_0 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%, [bg_color_0])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\', endColorstr=\'[bg_color_0]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_0 == \'img\']\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color: #FFF;\r\n font-family: \"Myriad Pro\",\"Trebuchet MS\",\"Helvetica Neue\",Helvetica,Arial,Sans-Serif;\r\n font-size: 30px;\r\n letter-spacing: -1px;\r\n line-height: 40px;\r\n letter-spacing: -1px;\r\n font-weight: bold;\r\n text-align: center;\r\n margin-bottom: 16px;\r\n padding-left: 20px;\r\n -moz-text-shadow: 0px 0px 1px #000;\r\n -webkit-text-shadow: 0px 0px 1px #000;\r\n}\r\n#ppsPopupShell_[ID] .ppsRightCol {\r\n height: 100%;\r\n [if bg_type_1 == \'color\']\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}), color-stop(100%, [bg_color_1])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }} 0%, [bg_color_1] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'{{ adjust_brightness(popup.params.tpl.bg_color_1, 50) }}\', endColorstr=\'[bg_color_1]\',GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_1 == \'img\']\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 10% 15% 0;\r\n text-align:center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n margin-bottom: 10px;\r\n height: 40px;\r\n border: 1px solid #d1b36d;\r\n color: #888;\r\n text-shadow: 1px 1px 5px #888;\r\n padding: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text],#ppsPopupShell_[ID] .ppsSubscribeShell input[type=email],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n box-shadow: 2px 2px 2px #dcdcdc inset;\r\n font-size: 17px;\r\n width:100%;\r\n background-color: #fff;\r\n padding-left: 10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelect {\r\n display: table;\r\n text-align: left;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n display: table-cell;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell .ppsSubSelectLabel {\r\n opacity: 0.5;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n width: 100%;\r\n background-color: transparent;\r\n height: 40px;\r\n border: none;\r\n font-size: 17px;\r\n color: #888;\r\n text-shadow: 1px 1px 5px #888;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n font-family: inherit;\r\n height: auto;\r\n padding-top: 5px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=text][name=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/mail-icon.png\");\r\n background-repeat: no-repeat;\r\n background-position: 90% center;\r\n width:100%;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit] {\r\n border-color: #000;\r\n width: 60%;\r\n [if bg_type_2 == \'color\']\r\n background: [bg_color_2];\r\n box-shadow: -4px -4px 0px rgba(0, 0, 0, 0.1) inset;\r\n [elseif bg_type_2 == \'img\']\r\n background-image: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n color: #fff;\r\n font-size: 20px;\r\n text-shadow: 1px 1px 1px #000;\r\n cursor: pointer;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=submit]:hover {\r\n box-shadow: 4px 4px 0px rgba(0, 0, 0, 0.1) inset;\r\n \r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n float: left;\r\n width: 80%;\r\n margin-left: 10%;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupTxt_1 {\r\n float: right;\r\n [if enb_txt_0]\r\n width: 50%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n top:15px;\r\n right:10px;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose.ppsPopupClose_lists_black {\r\n top: 0 !important;\r\n right: 0 !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote{\r\n color: #585858;\r\n font-family: \"Helvetica Neue\",Helvetica,Arial,sans-serif;\r\n font-size: x-small;\r\n font-style: italic;\r\n line-height: 14px;\r\n margin: 5px 30px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSm{\r\nmargin-top:20px;\r\n}","layered-popup.jpg","1","1","1","1","2015-01-10 18:59:43","1"),
552
  if(dbPps::get('SELECT COUNT(*) AS total FROM @__popup WHERE id = 27 AND original_id = 0', 'one')) {
553
  dbPps::query('UPDATE @__popup SET label="New York",active="1",original_id="0",params="YTozOntzOjQ6Im1haW4iO2E6MzA6e3M6Nzoic2hvd19vbiI7czo5OiJwYWdlX2xvYWQiO3M6MjM6InNob3dfb25fcGFnZV9sb2FkX2RlbGF5IjtzOjA6IiI7czoyNToic2hvd19vbl9jbGlja19vbl9lbF9kZWxheSI7czoxOiIwIjtzOjI3OiJzaG93X29uX3Njcm9sbF93aW5kb3dfZGVsYXkiO3M6MToiMCI7czozMzoic2hvd19vbl9zY3JvbGxfd2luZG93X3BlcmNfc2Nyb2xsIjtzOjE6IjAiO3M6Mjg6InNob3dfb25fYWZ0ZXJfaW5hY3RpdmVfdmFsdWUiO3M6MjoiMTAiO3M6MjU6InNob3dfb25fbGlua19mb2xsb3dfZGVsYXkiO3M6MToiMCI7czo4OiJjbG9zZV9vbiI7czoxMDoidXNlcl9jbG9zZSI7czoyNjoiY2xvc2Vfb25fYWZ0ZXJfYWN0aW9uX3RpbWUiO3M6MToiMSI7czoyNToiY2xvc2Vfb25fYWZ0ZXJfdGltZV92YWx1ZSI7czoxOiI1IjtzOjEwOiJzaG93X3BhZ2VzIjtzOjM6ImFsbCI7czoxNDoic2hvd190aW1lX2Zyb20iO3M6NzoiMTI6MDBhbSI7czoxMjoic2hvd190aW1lX3RvIjtzOjc6IjEyOjAwYW0iO3M6MTQ6InNob3dfZGF0ZV9mcm9tIjtzOjA6IiI7czoxMjoic2hvd19kYXRlX3RvIjtzOjA6IiI7czo3OiJzaG93X3RvIjtzOjg6ImV2ZXJ5b25lIjtzOjI5OiJzaG93X3RvX2ZpcnN0X3RpbWVfdmlzaXRfZGF5cyI7czoyOiIzMCI7czozMDoic2hvd190b191bnRpbF9tYWtlX2FjdGlvbl9kYXlzIjtzOjI6IjMwIjtzOjE1OiJjb3VudF90aW1lc19udW0iO3M6MToiMSI7czoxNToiY291bnRfdGltZXNfbWVzIjtzOjM6ImRheSI7czoyMToiaGlkZV9mb3JfZGV2aWNlc19zaG93IjtzOjE6IjAiO3M6MjQ6ImhpZGVfZm9yX3Bvc3RfdHlwZXNfc2hvdyI7czoxOiIwIjtzOjE3OiJoaWRlX2Zvcl9pcHNfc2hvdyI7czoxOiIwIjtzOjEyOiJoaWRlX2Zvcl9pcHMiO3M6MDoiIjtzOjIzOiJoaWRlX2Zvcl9jb3VudHJpZXNfc2hvdyI7czoxOiIwIjtzOjIzOiJoaWRlX2Zvcl9sYW5ndWFnZXNfc2hvdyI7czoxOiIwIjtzOjI0OiJoaWRlX3NlYXJjaF9lbmdpbmVzX3Nob3ciO3M6MToiMCI7czoxODoiaGlkZV9wcmVnX3VybF9zaG93IjtzOjE6IjAiO3M6MTM6ImhpZGVfcHJlZ191cmwiO3M6MDoiIjtzOjI0OiJoaWRlX2Zvcl91c2VyX3JvbGVzX3Nob3ciO3M6MToiMCI7fXM6MzoidHBsIjthOjEwOTp7czo1OiJ3aWR0aCI7czozOiI4MjQiO3M6MTM6IndpZHRoX21lYXN1cmUiO3M6MjoicHgiO3M6MTg6ImJnX292ZXJsYXlfb3BhY2l0eSI7czozOiIwLjUiO3M6MTU6ImJnX292ZXJsYXlfdHlwZSI7czo1OiJjb2xvciI7czoxNjoiYmdfb3ZlcmxheV9jb2xvciI7czo0OiIjMDAwIjtzOjE0OiJiZ19vdmVybGF5X2ltZyI7czowOiIiO3M6MTg6ImJnX292ZXJsYXlfaW1nX3BvcyI7czo3OiJzdHJldGNoIjtzOjk6ImJnX3R5cGVfMCI7czo1OiJjb2xvciI7czo4OiJiZ19pbWdfMCI7czowOiIiO3M6MTA6ImJnX2NvbG9yXzAiO3M6NzoiI2ZmZmZmZiI7czo5OiJiZ190eXBlXzEiO3M6NToiY29sb3IiO3M6ODoiYmdfaW1nXzEiO3M6MDoiIjtzOjEwOiJiZ19jb2xvcl8xIjtzOjc6IiM4YmE2ZTgiO3M6OToiYmdfdHlwZV8yIjtzOjU6ImNvbG9yIjtzOjg6ImJnX2ltZ18yIjtzOjA6IiI7czoxMDoiYmdfY29sb3JfMiI7czo3OiIjZmZjMThkIjtzOjEwOiJmb250X2xhYmVsIjtzOjc6ImRlZmF1bHQiO3M6MTY6ImxhYmVsX2ZvbnRfY29sb3IiO3M6NzoiI2ZmZmZmZiI7czoxMDoiZm9udF90eHRfMCI7czo3OiJkZWZhdWx0IjtzOjE3OiJ0ZXh0X2ZvbnRfY29sb3JfMCI7czo3OiIjODg4ODg4IjtzOjExOiJmb250X2Zvb3RlciI7czo3OiJkZWZhdWx0IjtzOjE3OiJmb290ZXJfZm9udF9jb2xvciI7czo3OiIjZmZmZmZmIjtzOjE1OiJyZXNwb25zaXZlX21vZGUiO3M6MzoiZGVmIjtzOjE3OiJyZWlkcmVjdF9vbl9jbG9zZSI7czowOiIiO3M6OToiY2xvc2VfYnRuIjtzOjExOiJ3aGlsZV9jbG9zZSI7czo3OiJidWxsZXRzIjtzOjEyOiJjaXJjbGVfZ3JlZW4iO3M6MTE6ImxheWVyZWRfcG9zIjtzOjM6InRvcCI7czo5OiJlbmJfbGFiZWwiO3M6MToiMSI7czo1OiJsYWJlbCI7czo2NjoiU3Vic2NyaWJlIHRvIG91ciBuZXdzbGV0dGVyIGFuZCBzdGFydCBpbmNyZWFzaW5nIHlvdXIgcHJvZml0cyBub3chIjtzOjk6ImVuYl90eHRfMCI7czoxOiIxIjtzOjEzOiJlbmJfZm9vdF9ub3RlIjtzOjE6IjEiO3M6OToiZm9vdF9ub3RlIjtzOjQ1OiJXZSBuZXZlciBzaGFyZSB5b3VyIGUtbWFpbCB3aXRoIHRoaXJkIHBhcnRpZXMiO3M6MTU6ImVuYl9zbV9mYWNlYm9vayI7czoxOiIxIjtzOjE3OiJlbmJfc21fZ29vZ2xlcGx1cyI7czoxOiIxIjtzOjE0OiJlbmJfc21fdHdpdHRlciI7czoxOiIxIjtzOjk6InNtX2Rlc2lnbiI7czo2OiJzaW1wbGUiO3M6ODoiYW5pbV9rZXkiO3M6NDoibm9uZSI7czoxMzoiYW5pbV9kdXJhdGlvbiI7czowOiIiO3M6MTM6ImVuYl9zdWJzY3JpYmUiO3M6MToiMSI7czo4OiJzdWJfZGVzdCI7czo5OiJ3b3JkcHJlc3MiO3M6MjM6InN1Yl93cF9jcmVhdGVfdXNlcl9yb2xlIjtzOjEwOiJzdWJzY3JpYmVyIjtzOjE5OiJzdWJfYXdlYmVyX2xpc3RuYW1lIjtzOjA6IiI7czoyMToic3ViX2F3ZWJlcl9hZHRyYWNraW5nIjtzOjA6IiI7czoyMToic3ViX21haWxjaGltcF9hcGlfa2V5IjtzOjA6IiI7czoyNToic3ViX21haWxjaGltcF9ncm91cHNfZnVsbCI7czowOiIiO3M6MTQ6InN1Yl9ncl9hcGlfa2V5IjtzOjA6IiI7czoxNjoic3ViX2dyX2N5Y2xlX2RheSI7czoxOiIwIjtzOjEzOiJzdWJfaWNfYXBwX2lkIjtzOjA6IiI7czoxNToic3ViX2ljX2FwcF91c2VyIjtzOjA6IiI7czoxNToic3ViX2ljX2FwcF9wYXNzIjtzOjA6IiI7czoxNDoic3ViX2FjX2FwaV91cmwiO3M6MDoiIjtzOjE0OiJzdWJfYWNfYXBpX2tleSI7czowOiIiO3M6MTg6InN1Yl9hcl9mb3JtX2FjdGlvbiI7czowOiIiO3M6MTA6InN1Yl9zZ2FfaWQiO3M6MDoiIjtzOjE1OiJzdWJfc2dhX2xpc3RfaWQiO3M6MDoiIjtzOjIxOiJzdWJfc2dhX2FjdGl2YXRlX2NvZGUiO3M6MDoiIjtzOjEzOiJzdWJfc2ZfYXBwX2lkIjtzOjA6IiI7czoxNDoic3ViX2NrX2FwaV9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfbWVtX2FjY19pZCI7czowOiIiO3M6MTU6InN1Yl9tZW1fcHVkX2tleSI7czowOiIiO3M6MTY6InN1Yl9tZW1fcHJpdl9rZXkiO3M6MDoiIjtzOjE0OiJzdWJfc2JfYXBpX2tleSI7czowOiIiO3M6MTQ6InN1Yl92Nl9hcGlfa2V5IjtzOjA6IiI7czoxMjoic3ViX3Z0aWdfdXJsIjtzOjA6IiI7czoxMzoic3ViX3Z0aWdfbmFtZSI7czowOiIiO3M6MTI6InN1Yl92dGlnX2tleSI7czowOiIiO3M6MTY6InN1Yl95bWxwX2FwaV9rZXkiO3M6MDoiIjtzOjEzOiJzdWJfeW1scF9uYW1lIjtzOjA6IiI7czoxMToic3ViXzRkX25hbWUiO3M6MDoiIjtzOjExOiJzdWJfNGRfcGFzcyI7czowOiIiO3M6MTA6InN1Yl9maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjg6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo0OiJOYW1lIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMCI7czoxMDoic2V0X3ByZXNldCI7czowOiIiO31zOjU6ImVtYWlsIjthOjg6e3M6NDoibmFtZSI7czo1OiJlbWFpbCI7czo0OiJodG1sIjtzOjQ6InRleHQiO3M6NToibGFiZWwiO3M6NjoiRS1NYWlsIjtzOjU6InZhbHVlIjtzOjA6IiI7czo2OiJjdXN0b20iO3M6MToiMCI7czo5OiJtYW5kYXRvcnkiO3M6MToiMSI7czoxMDoic2V0X3ByZXNldCI7czowOiIiO3M6MzoiZW5iIjtzOjE6IjEiO319czo5OiJibGFja2xpc3QiO3M6MDoiIjtzOjIwOiJzdWJfdHh0X2NvbmZpcm1fc2VudCI7czo2NzoiQ29uZmlybWF0aW9uIGxpbmsgd2FzIHNlbnQgdG8geW91ciBlbWFpbCBhZGRyZXNzLiBDaGVjayB5b3VyIGVtYWlsISI7czoxNToic3ViX3R4dF9zdWNjZXNzIjtzOjI0OiJUaGFuayB5b3UgZm9yIHN1YnNjcmliZSEiO3M6MjE6InN1Yl90eHRfaW52YWxpZF9lbWFpbCI7czoyMjoiRW1wdHkgb3IgaW52YWxpZCBlbWFpbCI7czoyMDoic3ViX3R4dF9leGlzdHNfZW1haWwiO3M6MjI6IkVtcHR5IG9yIGludmFsaWQgZW1haWwiO3M6MTY6InN1Yl9yZWRpcmVjdF91cmwiO3M6MDoiIjtzOjI4OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9zdWJqZWN0IjtzOjM0OiJDb25maXJtIHN1YnNjcmlwdGlvbiBvbiBbc2l0ZW5hbWVdIjtzOjI1OiJzdWJfdHh0X2NvbmZpcm1fbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoyODoic3ViX3R4dF9jb25maXJtX21haWxfbWVzc2FnZSI7czoxOTc6IllvdSBzdWJzY3JpYmVkIG9uIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LiBGb2xsb3cgPGEgaHJlZj1cIltjb25maXJtX2xpbmtdXCI+dGhpcyBsaW5rPC9hPiB0byBjb21wbGV0ZSB5b3VyIHN1YnNjcmlwdGlvbi4gSWYgeW91IGRpZCBub3Qgc3Vic2NyaWJlIGhlcmUgLSBqdXN0IGlnbm9yZSB0aGlzIG1lc3NhZ2UuIjtzOjMxOiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjM3OiJbc2l0ZW5hbWVdIFlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIjtzOjI4OiJzdWJfdHh0X3N1YnNjcmliZXJfbWFpbF9mcm9tIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czozMToic3ViX3R4dF9zdWJzY3JpYmVyX21haWxfbWVzc2FnZSI7czo2NToiVXNlcm5hbWU6IFt1c2VyX2xvZ2luXTxiciAvPlBhc3N3b3JkOiBbcGFzc3dvcmRdPGJyIC8+W2xvZ2luX3VybF0iO3M6MjU6InN1Yl9yZWRpcmVjdF9lbWFpbF9leGlzdHMiO3M6MDoiIjtzOjEzOiJzdWJfYnRuX2xhYmVsIjtzOjEzOiJTVUJTQ1JJQkUgTk9XIjtzOjEzOiJzdWJfbmV3X2VtYWlsIjtzOjE0OiJhZG1pbkBtYWlsLmNvbSI7czoxNToic3ViX25ld19zdWJqZWN0IjtzOjI4OiJOZXcgc3Vic2NyaWJlciBvbiBbc2l0ZW5hbWVdIjtzOjE1OiJzdWJfbmV3X21lc3NhZ2UiO3M6MTI5OiJZb3UgaGF2ZSBuZXcgc3Vic2NyaWJlciBvbiB5b3VyIHNpdGUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LCBoZXJlIGlzIHN1YnNjcmliZXIgaW5mb3JtYXRpb246PGJyIC8+W3N1YnNjcmliZXJfZGF0YV0iO3M6ODoibG9naW5fYnkiO3M6ODoidXNlcm5hbWUiO3M6MTg6ImxvZ2luX3JlZGlyZWN0X3VybCI7czowOiIiO3M6MTU6ImxvZ2luX2J0bl9sYWJlbCI7czoxMDoi0JvQvtCz0LjQvSI7czoyMzoicmVnX3dwX2NyZWF0ZV91c2VyX3JvbGUiO3M6MTA6InN1YnNjcmliZXIiO3M6MTM6InJlZ19idG5fbGFiZWwiO3M6ODoiUmVnaXN0ZXIiO3M6MTA6InJlZ19maWVsZHMiO2E6Mjp7czo0OiJuYW1lIjthOjc6e3M6MzoiZW5iIjtzOjE6IjEiO3M6NDoibmFtZSI7czo0OiJuYW1lIjtzOjQ6Imh0bWwiO3M6NDoidGV4dCI7czo1OiJsYWJlbCI7czo2OiLQmNC80Y8iO3M6NToidmFsdWUiO3M6MDoiIjtzOjY6ImN1c3RvbSI7czoxOiIwIjtzOjk6Im1hbmRhdG9yeSI7czoxOiIwIjt9czo1OiJlbWFpbCI7YTo3OntzOjQ6Im5hbWUiO3M6NToiZW1haWwiO3M6NDoiaHRtbCI7czo0OiJ0ZXh0IjtzOjU6ImxhYmVsIjtzOjY6IkUtTWFpbCI7czo1OiJ2YWx1ZSI7czowOiIiO3M6NjoiY3VzdG9tIjtzOjE6IjAiO3M6OToibWFuZGF0b3J5IjtzOjE6IjEiO3M6MzoiZW5iIjtzOjE6IjEiO319czoyMDoicmVnX3R4dF9jb25maXJtX3NlbnQiO3M6MTk1OiLQodGB0YvQu9C60LAg0LTQu9GPINC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPINCx0YvQuyDQvtGC0L/RgNCw0LLQu9C10L3QsCDQvdCwINCy0LDRiCDQsNC00YDQtdGBINGN0LvQtdC60YLRgNC+0L3QvdC+0Lkg0L/QvtGH0YLRiy4g0J/RgNC+0LLQtdGA0YzRgtC1INCy0LDRiNGDINGN0LvQtdC60YLRgNC+0L3QvdGD0Y4g0L/QvtGH0YLRgyEiO3M6MTU6InJlZ190eHRfc3VjY2VzcyI7czo0Mzoi0KHQv9Cw0YHQuNCx0L4g0LfQsCDRgNC10LPQuNGB0YLRgNCw0YbQuNGOISI7czoyMToicmVnX3R4dF9pbnZhbGlkX2VtYWlsIjtzOjU4OiLQn9GD0YHRgtC+0Lkg0LjQu9C4INC90LXQtNC10LnRgdGC0LLQuNGC0LXQu9GM0L3Ri9C5IGVtYWlsIjtzOjE2OiJyZWdfcmVkaXJlY3RfdXJsIjtzOjA6IiI7czoyODoicmVnX3R4dF9jb25maXJtX21haWxfc3ViamVjdCI7czo2MToi0J/QvtC00YLQstC10YDQtNC40YLQtSDRgNC10LPQuNGB0YLRgNCw0YbQuNGOINC90LAgW3NpdGVuYW1lXSI7czoyNToicmVnX3R4dF9jb25maXJtX21haWxfZnJvbSI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6Mjg6InJlZ190eHRfY29uZmlybV9tYWlsX21lc3NhZ2UiO3M6MzM0OiLQktGLINC30LDRgNC10LPQuNGB0YLRgNC40YDQvtCy0LDQvdGLINC90LAg0YHQsNC50YLQtSA8YSBocmVmPVwiW3NpdGV1cmxdXCI+W3NpdGVuYW1lXTwvYT4uINCh0LvQtdC00YPQudGC0LUgIDxhIGhyZWY9XCJbY29uZmlybV9saW5rXVwiPnRoaXMgbGluazwvYT4g0LTQu9GPINC30LDQstC10YDRiNC10L3QuNGPINGA0LXQs9C40YHRgtGA0LDRhtC40LguINCV0YHQu9C4INCy0Ysg0L3QtSDQt9Cw0YDQtdCz0LjRgdGC0YDQuNGA0L7QstCw0LvQuNGB0Ywg0LfQtNC10YHRjCAtINC/0YDQvtGB0YLQviDQuNCz0L3QvtGA0LjRgNGD0LnRgtC1INGN0YLQviDRgdC+0L7QsdGJ0LXQvdC40LUuIjtzOjMxOiJyZWdfdHh0X3N1YnNjcmliZXJfbWFpbF9zdWJqZWN0IjtzOjQ1OiJbc2l0ZW5hbWVdICDQktCw0Ygg0LvQvtCz0LjQvSDQuCDQv9Cw0YDQvtC70YwiO3M6Mjg6InJlZ190eHRfc3Vic2NyaWJlcl9tYWlsX2Zyb20iO3M6MTQ6ImFkbWluQG1haWwuY29tIjtzOjMxOiJyZWdfdHh0X3N1YnNjcmliZXJfbWFpbF9tZXNzYWdlIjtzOjcxOiLQm9C+0LPQuNC9OiBbdXNlcl9sb2dpbl08YnIgLz7Qn9Cw0YDQvtC70Yw6IFtwYXNzd29yZF08YnIgLz5bbG9naW5fdXJsXSI7czoxMzoicmVnX25ld19lbWFpbCI7czoxNDoiYWRtaW5AbWFpbC5jb20iO3M6MTU6InJlZ19uZXdfbWVzc2FnZSI7czoxNzc6ItCjINCy0LDRgSDQvdC+0LLRi9C5INC/0L7Qu9GM0LfQvtCy0LDRgtC10LvRjCDQvdCwINGB0LDQudGC0LUgPGEgaHJlZj1cIltzaXRldXJsXVwiPltzaXRlbmFtZV08L2E+LCDQstC+0YIg0LjQvdGE0L7RgNC80LDRhtC40Y8g0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPOiA8YnIgLz5bc3Vic2NyaWJlcl9kYXRhXSI7czoxMjoiY29udGFjdF9mb3JtIjtzOjI6IjE5IjtzOjEyOiJzdGF0X2dhX2NvZGUiO3M6MDoiIjtzOjU6InR4dF8wIjtzOjQ4OiI8cD5bZ29vZ2xlX21hcF9lYXN5IGlkPVwiMVwiIGhlaWdodD1cIjMwMFwiXTwvcD4iO31zOjEwOiJvcHRzX2F0dHJzIjthOjI6e3M6OToiYmdfbnVtYmVyIjtzOjE6IjMiO3M6MTY6InR4dF9ibG9ja19udW1iZXIiO3M6MToiMSI7fX0=",html="<link href=\"https://fonts.googleapis.com/css?family=Lato\" rel=\"stylesheet\" type=\"text/css\" >\r\n<div id=\"ppsPopupShell_[ID]\" class=\"ppsPopupShell ppsPopupListsShell\">\r\n <a href=\"#\" class=\"ppsPopupClose ppsPopupClose_[close_btn]\"></a>\r\n <div class=\"ppsInnerTblContent\">\r\n <div class=\"ppsPopupListsInner ppsPopupInner\">\r\n [if enb_txt_0]\r\n <div class=\"ppsPopupTxt ppsPopupClassyTxt ppsPopupClassyTxt_0 ppsPopupTxt_0\">\r\n [txt_0]\r\n </div>\r\n [endif]\r\n </div><!--\r\n --><div class=\"ppsRightCol\">\r\n [if enb_label]\r\n <div class=\"ppsPopupLabel ppsPopupListsLabel\">[label]</div>\r\n [endif]\r\n <div style=\"clear: both;\"></div>\r\n [if enb_subscribe]\r\n <div class=\"ppsSubscribeShell\">\r\n [sub_form_start]\r\n [sub_fields_html]\r\n <input type=\"submit\" name=\"submit\" value=\"[sub_btn_label]\" />\r\n [sub_form_end]\r\n <div style=\"clear: both;\"></div>\r\n </div>\r\n [endif]\r\n [if enb_sm]\r\n <div class=\"ppsSm\">\r\n [sm_html]\r\n </div>\r\n [endif]\r\n [if enb_foot_note]\r\n <div class=\"ppsFootNote\">\r\n [foot_note]\r\n </div>\r\n [endif]\r\n </div>\r\n </div>\r\n</div>",css="@nice-blue: #5B83AD;\r\n#ppsPopupShell_[ID] {\r\n width: [width][width_measure];\r\n padding: 0px;\r\n font-family: Lato;\r\n font-size: 13px;\r\n line-height: normal;\r\n font-weight: normal;\r\n color: #000;\r\n}\r\n#ppsPopupShell_[ID], #ppsPopupShell_[ID] * {\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n box-sizing: border-box;\r\n}\r\n#ppsPopupShell_[ID] .ppsInnerTblContent {\r\n display: block;\r\n text-align: right;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupInner {\r\n {% if popup.params.tpl.enb_subscribe or popup.params.tpl.enb_foot_note or popup.params.tpl.enb_sm %}\r\n width: 59%;\r\n [else]\r\n width: 100%;\r\n [endif]\r\n \r\n vertical-align: middle;\r\n display: inline-block;\r\n margin: 0px;\r\n text-align: left;\r\n \r\n [if bg_type_0 == \"color\"]\r\n background: -moz-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ff3.6+ */\r\n background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}), color-stop(100%, [bg_color_0])); /* safari4+,chrome */\r\n background:-webkit-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* safari5.1+,chrome10+ */\r\n background: -o-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* opera 11.10+ */\r\n background: -ms-radial-gradient(center, ellipse cover, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* ie10+ */\r\n background:radial-gradient(ellipse at center, {{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }} 0%, [bg_color_0] 100%); /* w3c */\r\n filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\"{{ adjust_brightness(popup.params.tpl.bg_color_0, 50) }}\", endColorstr=\"[bg_color_0]\",GradientType=1 ); /* ie6-9 */\r\n [elseif bg_type_0 == \"img\"]\r\n background-image: url(\"[bg_img_0]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n \r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsSubscribeShell form {\r\n padding: 20px 20px 0;\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input::-webkit-input-placeholder { /* Chrome/Opera/Safari */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input::-moz-placeholder { /* Firefox 19+ */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input:-ms-input-placeholder { /* IE 10+ */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input:-moz-placeholder { /* Firefox 18- */\r\n color: #ccc;\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea::-webkit-input-placeholder { /* Chrome/Opera/Safari */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea::-moz-placeholder { /* Firefox 19+ */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea:-ms-input-placeholder { /* IE 10+ */\r\n color: #ccc;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea:-moz-placeholder { /* Firefox 18- */\r\n color: #ccc;\r\n}\r\n/*For all Elements*/\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"email\"],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"password\"],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"text\"],\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select,\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n font-family: Lato;\r\n font-size: 16px;\r\n font-weight: normal;\r\n line-height: normal;\r\n color: #aaa;\r\n text-align:center;\r\n width: 100%;\r\n -webkit-border-radius: 5px;\r\n -moz-border-radius: 5px;\r\n border-radius: 5px;\r\n border: 0px solid transparent;\r\n display:block;\r\n \r\n margin: 10px 0 0;\r\n padding: 0 10px 0 10px;\r\n height: 40px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell textarea {\r\n height: auto;\r\n padding-top: 9px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeForm input:first-child {\r\n margin-top: 0px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell select {\r\n margin: 0;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell label {\r\n display: block;\r\n font-family: Lato;\r\n font-size: 16px;\r\n font-weight: normal;\r\n line-height: normal;\r\n color: #fff;\r\n \r\n margin: 10px 0 0;\r\n text-align: center;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell label span {\r\n display: block;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"text\"][name=\"name\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/user-black-icon.png\");\r\n background-position: 12px center;\r\n background-repeat: no-repeat;\r\n background-size: 16px auto;\r\n padding: 0 25px 0 35px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"email\"] {\r\n background-image: url(\"[PPS_ASSETS_URL]img/assets/email-black-icon.png\");\r\n background-position: 11px center;\r\n background-repeat: no-repeat;\r\n background-size: 18px auto;\r\n padding: 0 25px 0 35px;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubscribeShell input[type=\"submit\"] {\r\n display: block;\r\n font-family: Lato;\r\n font-size: 17px;\r\n font-weight: bold;\r\n line-height: normal;\r\n color: #fff;\r\n cursor: pointer;\r\n margin: 10px 0 0;\r\n -webkit-border-radius: 5px;\r\n -moz-border-radius: 5px;\r\n border-radius: 5px;\r\n border: 0px solid transparent;\r\n width: 100%;\r\n height: 50px;\r\n \r\n [if bg_type_2 == \"color\"]\r\n background: [bg_color_2] 100%;\r\n [elseif bg_type_2 == \"img\"]\r\n background: url(\"[bg_img_2]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsRightCol {\r\n border-radius: 3px;\r\n -moz-border-radius: 3px;\r\n -webkit-border-radius: 3px;\r\n min-height: 350px;\r\n width: 40%;\r\n display: inline-block;\r\n padding: 20px;\r\n margin: 0;\r\n vertical-align: middle;\r\n \r\n [if bg_type_1 == \"color\"]\r\n background: [bg_color_1];\r\n [elseif bg_type_1 == \"img\"]\r\n background-image: url(\"[bg_img_1]\");\r\n background-repeat: no-repeat;\r\n background-size: cover;\r\n [endif]\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsPopupLabel {\r\n color:#ffffff;\r\n font-family: \"Lato\";\r\n font-weight: normal;\r\n line-height: normal;\r\n font-size: 24px;\r\n letter-spacing: -1px;\r\n padding: 0px;\r\n margin: 20px 0 0;\r\n text-align: center;\r\n \r\n width: 100%;\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 {\r\n float: left;\r\n width: 100%;\r\n height: 300px;\r\n line-height: normal;\r\n font-size: 14px;\r\n font-family: Lato;\r\n font-weight: 400;\r\n \r\n \r\n padding: 0px;\r\n margin: 0;\r\n \r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsPopupTxt_0 p {\r\n font-size: inherit !important;\r\n font-weight: inherit !important;\r\n font-size: inherit !important;\r\n line-height: inherit !important;\r\n width: 100%;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\n#ppsPopupShell_[ID] .ppsPopupClose {\r\n background-repeat: no-repeat;\r\n cursor: pointer;\r\n top:-20px;\r\n right:1px;\r\n z-index:99999;\r\n}\r\n#ppsPopupShell_[ID] .ppsSubMsg {\r\n text-align: center;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose.ppsPopupClose_lists_black {\r\n top: 0 !important;\r\n right: 0 !important;\r\n}\r\n#ppsPopupShell_[ID] .ppsPopupClose:hover {\r\n opacity: 0.8;\r\n}\r\n#ppsPopupShell_[ID] .ppsFootNote{\r\n color: #ffffff;\r\n text-align: center;\r\n font-family: Lato;\r\n font-size: x-small;\r\n font-weight: bold;\r\n line-height: 14px;\r\n margin: 10px 30px 5px;\r\n}",img_preview="230-6-new-york-prev.png",show_on="1",show_to="1",show_pages="1",type_id="1",date_created="2015-01-10 18:59:43",sort_order="1" WHERE id="27"');
554
  }
 
 
 
555
  dbPps::setAutoIncrement('@__popup', $lastAutoIncrement);
556
  }
557
  /*
classes/model.php CHANGED
@@ -130,7 +130,7 @@ abstract class modelPps extends baseObjectPps {
130
  if(empty($clear) || in_array('sortOrder', $clear))
131
  $this->_sortOrder = '';
132
  if(empty($clear) || in_array('where', $clear))
133
- $this->_where = array();
134
  if(empty($clear) || in_array('selectFields', $clear))
135
  $this->_selectFields = '*';
136
  if(empty($clear) || in_array('groupBy', $clear))
130
  if(empty($clear) || in_array('sortOrder', $clear))
131
  $this->_sortOrder = '';
132
  if(empty($clear) || in_array('where', $clear))
133
+ $this->_where = '';
134
  if(empty($clear) || in_array('selectFields', $clear))
135
  $this->_selectFields = '*';
136
  if(empty($clear) || in_array('groupBy', $clear))
classes/utils.php CHANGED
@@ -183,16 +183,6 @@ class utilsPps {
183
  }
184
  return $monthsArray;
185
  }
186
- static public function getWeekDaysArray() {
187
- $timestamp = strtotime('next Sunday');
188
- $days = array();
189
- for ($i = 0; $i < 7; $i++) {
190
- $day = strftime('%A', $timestamp);
191
- $days[ strtolower($day) ] = $day;
192
- $timestamp = strtotime('+1 day', $timestamp);
193
- }
194
- return $days;
195
- }
196
  /**
197
  * Get an array with years range from current year
198
  * @param int $from - how many years from today ago
183
  }
184
  return $monthsArray;
185
  }
 
 
 
 
 
 
 
 
 
 
186
  /**
187
  * Get an array with years range from current year
188
  * @param int $from - how many years from today ago
classes/validator.php CHANGED
@@ -132,11 +132,10 @@ class validatorPps {
132
  return $res;
133
  }
134
  static public function prepareInput($input) {
135
- global $wpdb;
136
  if(is_array($input)) {
137
  return array_map(array(validator, 'prepareInput'), $input);
138
  } else
139
- return $wpdb->_real_escape($input);
140
  }
141
  }
142
 
132
  return $res;
133
  }
134
  static public function prepareInput($input) {
 
135
  if(is_array($input)) {
136
  return array_map(array(validator, 'prepareInput'), $input);
137
  } else
138
+ return mysql_escape_string($input);
139
  }
140
  }
141
 
config.php CHANGED
@@ -48,7 +48,7 @@
48
  define('PPS_EOL', "\n");
49
 
50
  define('PPS_PLUGIN_INSTALLED', true);
51
- define('PPS_VERSION', '1.8.8');
52
  define('PPS_USER', 'user');
53
 
54
  define('PPS_CLASS_PREFIX', 'ppsc');
48
  define('PPS_EOL', "\n");
49
 
50
  define('PPS_PLUGIN_INSTALLED', true);
51
+ define('PPS_VERSION', '1.8.4');
52
  define('PPS_USER', 'user');
53
 
54
  define('PPS_CLASS_PREFIX', 'ppsc');
css/supsystic-ui.css CHANGED
@@ -110,13 +110,17 @@
110
  -webkit-box-sizing: border-box;
111
  box-sizing: border-box;
112
  }
 
113
  ul.supsystic-bar-controls {
 
114
  display: inline;
115
  }
 
116
  ul.supsystic-bar-controls > li {
117
  float: left;
118
  margin-left: 5px;
119
  }
 
120
  ul.supsystic-bar-controls > li.separator {
121
  color: #ddd;
122
  margin-top: 5px;
110
  -webkit-box-sizing: border-box;
111
  box-sizing: border-box;
112
  }
113
+
114
  ul.supsystic-bar-controls {
115
+ /*margin-top: 8px;*/
116
  display: inline;
117
  }
118
+
119
  ul.supsystic-bar-controls > li {
120
  float: left;
121
  margin-left: 5px;
122
  }
123
+
124
  ul.supsystic-bar-controls > li.separator {
125
  color: #ddd;
126
  margin-top: 5px;
functions.php CHANGED
@@ -243,7 +243,7 @@ if(!function_exists('prepareFieldCodePps')) {
243
  function prepareFieldCodePps($string) {
244
  $string = preg_replace("/[^a-zA-Z0-9\s]/"," ",$string);
245
  $string = preg_replace("/\s+/", " ", $string);
246
- $string = preg_replace('/ /','',$string);
247
 
248
  $code = substr($string, 0, 8);
249
  $code = strtolower($code);
243
  function prepareFieldCodePps($string) {
244
  $string = preg_replace("/[^a-zA-Z0-9\s]/"," ",$string);
245
  $string = preg_replace("/\s+/", " ", $string);
246
+ $string = ereg_replace(' ','',$string);
247
 
248
  $code = substr($string, 0, 8);
249
  $code = strtolower($code);
js/core.js CHANGED
@@ -95,7 +95,7 @@ jQuery.fn.sendFormPps = function(params) {
95
  var url = '';
96
  if(typeof(params.url) != 'undefined')
97
  url = params.url;
98
- else if(typeof(ajaxurl) == 'undefined' || typeof(ajaxurl) !== 'string')
99
  url = PPS_DATA.ajaxurl;
100
  else
101
  url = ajaxurl;
95
  var url = '';
96
  if(typeof(params.url) != 'undefined')
97
  url = params.url;
98
+ else if(typeof(ajaxurl) == 'undefined')
99
  url = PPS_DATA.ajaxurl;
100
  else
101
  url = ajaxurl;
modules/mail/engines/PHPMailerAutoload.php DELETED
@@ -1,49 +0,0 @@
1
- <?php
2
- /**
3
- * PHPMailer SPL autoloader.
4
- * PHP Version 5
5
- * @package PHPMailer
6
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
7
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
8
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
9
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
10
- * @author Brent R. Matzelle (original founder)
11
- * @copyright 2012 - 2014 Marcus Bointon
12
- * @copyright 2010 - 2012 Jim Jagielski
13
- * @copyright 2004 - 2009 Andy Prevost
14
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
15
- * @note This program is distributed in the hope that it will be useful - WITHOUT
16
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17
- * FITNESS FOR A PARTICULAR PURPOSE.
18
- */
19
-
20
- /**
21
- * PHPMailer SPL autoloader.
22
- * @param string $classname The name of the class to load
23
- */
24
- function PHPMailerAutoload($classname)
25
- {
26
- //Can't use __DIR__ as it's only in PHP 5.3+
27
- $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php';
28
- if (is_readable($filename)) {
29
- require $filename;
30
- }
31
- }
32
-
33
- if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
34
- //SPL autoloading was introduced in PHP 5.1.2
35
- if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
36
- spl_autoload_register('PHPMailerAutoload', true, true);
37
- } else {
38
- spl_autoload_register('PHPMailerAutoload');
39
- }
40
- } else {
41
- /**
42
- * Fall back to traditional autoload for old PHP versions
43
- * @param string $classname The name of the class to load
44
- */
45
- function __autoload($classname)
46
- {
47
- PHPMailerAutoload($classname);
48
- }
49
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/mail/engines/class.phpmailer.php DELETED
@@ -1,3983 +0,0 @@
1
- <?php
2
- /**
3
- * PHPMailer - PHP email creation and transport class.
4
- * PHP Version 5
5
- * @package PHPMailer
6
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
7
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
8
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
9
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
10
- * @author Brent R. Matzelle (original founder)
11
- * @copyright 2012 - 2014 Marcus Bointon
12
- * @copyright 2010 - 2012 Jim Jagielski
13
- * @copyright 2004 - 2009 Andy Prevost
14
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
15
- * @note This program is distributed in the hope that it will be useful - WITHOUT
16
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17
- * FITNESS FOR A PARTICULAR PURPOSE.
18
- */
19
-
20
- /**
21
- * PHPMailer - PHP email creation and transport class.
22
- * @package PHPMailer
23
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
24
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
25
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
26
- * @author Brent R. Matzelle (original founder)
27
- */
28
- class PHPMailer
29
- {
30
- /**
31
- * The PHPMailer Version number.
32
- * @var string
33
- */
34
- public $Version = '5.2.17';
35
-
36
- /**
37
- * Email priority.
38
- * Options: null (default), 1 = High, 3 = Normal, 5 = low.
39
- * When null, the header is not set at all.
40
- * @var integer
41
- */
42
- public $Priority = null;
43
-
44
- /**
45
- * The character set of the message.
46
- * @var string
47
- */
48
- public $CharSet = 'iso-8859-1';
49
-
50
- /**
51
- * The MIME Content-type of the message.
52
- * @var string
53
- */
54
- public $ContentType = 'text/plain';
55
-
56
- /**
57
- * The message encoding.
58
- * Options: "8bit", "7bit", "binary", "base64", and "quoted-printable".
59
- * @var string
60
- */
61
- public $Encoding = '8bit';
62
-
63
- /**
64
- * Holds the most recent mailer error message.
65
- * @var string
66
- */
67
- public $ErrorInfo = '';
68
-
69
- /**
70
- * The From email address for the message.
71
- * @var string
72
- */
73
- public $From = 'root@localhost';
74
-
75
- /**
76
- * The From name of the message.
77
- * @var string
78
- */
79
- public $FromName = 'Root User';
80
-
81
- /**
82
- * The Sender email (Return-Path) of the message.
83
- * If not empty, will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.
84
- * @var string
85
- */
86
- public $Sender = '';
87
-
88
- /**
89
- * The Return-Path of the message.
90
- * If empty, it will be set to either From or Sender.
91
- * @var string
92
- * @deprecated Email senders should never set a return-path header;
93
- * it's the receiver's job (RFC5321 section 4.4), so this no longer does anything.
94
- * @link https://tools.ietf.org/html/rfc5321#section-4.4 RFC5321 reference
95
- */
96
- public $ReturnPath = '';
97
-
98
- /**
99
- * The Subject of the message.
100
- * @var string
101
- */
102
- public $Subject = '';
103
-
104
- /**
105
- * An HTML or plain text message body.
106
- * If HTML then call isHTML(true).
107
- * @var string
108
- */
109
- public $Body = '';
110
-
111
- /**
112
- * The plain-text message body.
113
- * This body can be read by mail clients that do not have HTML email
114
- * capability such as mutt & Eudora.
115
- * Clients that can read HTML will view the normal Body.
116
- * @var string
117
- */
118
- public $AltBody = '';
119
-
120
- /**
121
- * An iCal message part body.
122
- * Only supported in simple alt or alt_inline message types
123
- * To generate iCal events, use the bundled extras/EasyPeasyICS.php class or iCalcreator
124
- * @link http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/
125
- * @link http://kigkonsult.se/iCalcreator/
126
- * @var string
127
- */
128
- public $Ical = '';
129
-
130
- /**
131
- * The complete compiled MIME message body.
132
- * @access protected
133
- * @var string
134
- */
135
- protected $MIMEBody = '';
136
-
137
- /**
138
- * The complete compiled MIME message headers.
139
- * @var string
140
- * @access protected
141
- */
142
- protected $MIMEHeader = '';
143
-
144
- /**
145
- * Extra headers that createHeader() doesn't fold in.
146
- * @var string
147
- * @access protected
148
- */
149
- protected $mailHeader = '';
150
-
151
- /**
152
- * Word-wrap the message body to this number of chars.
153
- * Set to 0 to not wrap. A useful value here is 78, for RFC2822 section 2.1.1 compliance.
154
- * @var integer
155
- */
156
- public $WordWrap = 0;
157
-
158
- /**
159
- * Which method to use to send mail.
160
- * Options: "mail", "sendmail", or "smtp".
161
- * @var string
162
- */
163
- public $Mailer = 'mail';
164
-
165
- /**
166
- * The path to the sendmail program.
167
- * @var string
168
- */
169
- public $Sendmail = '/usr/sbin/sendmail';
170
-
171
- /**
172
- * Whether mail() uses a fully sendmail-compatible MTA.
173
- * One which supports sendmail's "-oi -f" options.
174
- * @var boolean
175
- */
176
- public $UseSendmailOptions = true;
177
-
178
- /**
179
- * Path to PHPMailer plugins.
180
- * Useful if the SMTP class is not in the PHP include path.
181
- * @var string
182
- * @deprecated Should not be needed now there is an autoloader.
183
- */
184
- public $PluginDir = '';
185
-
186
- /**
187
- * The email address that a reading confirmation should be sent to, also known as read receipt.
188
- * @var string
189
- */
190
- public $ConfirmReadingTo = '';
191
-
192
- /**
193
- * The hostname to use in the Message-ID header and as default HELO string.
194
- * If empty, PHPMailer attempts to find one with, in order,
195
- * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value
196
- * 'localhost.localdomain'.
197
- * @var string
198
- */
199
- public $Hostname = '';
200
-
201
- /**
202
- * An ID to be used in the Message-ID header.
203
- * If empty, a unique id will be generated.
204
- * You can set your own, but it must be in the format "<id@domain>",
205
- * as defined in RFC5322 section 3.6.4 or it will be ignored.
206
- * @see https://tools.ietf.org/html/rfc5322#section-3.6.4
207
- * @var string
208
- */
209
- public $MessageID = '';
210
-
211
- /**
212
- * The message Date to be used in the Date header.
213
- * If empty, the current date will be added.
214
- * @var string
215
- */
216
- public $MessageDate = '';
217
-
218
- /**
219
- * SMTP hosts.
220
- * Either a single hostname or multiple semicolon-delimited hostnames.
221
- * You can also specify a different port
222
- * for each host by using this format: [hostname:port]
223
- * (e.g. "smtp1.example.com:25;smtp2.example.com").
224
- * You can also specify encryption type, for example:
225
- * (e.g. "tls://smtp1.example.com:587;ssl://smtp2.example.com:465").
226
- * Hosts will be tried in order.
227
- * @var string
228
- */
229
- public $Host = 'localhost';
230
-
231
- /**
232
- * The default SMTP server port.
233
- * @var integer
234
- * @TODO Why is this needed when the SMTP class takes care of it?
235
- */
236
- public $Port = 25;
237
-
238
- /**
239
- * The SMTP HELO of the message.
240
- * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find
241
- * one with the same method described above for $Hostname.
242
- * @var string
243
- * @see PHPMailer::$Hostname
244
- */
245
- public $Helo = '';
246
-
247
- /**
248
- * What kind of encryption to use on the SMTP connection.
249
- * Options: '', 'ssl' or 'tls'
250
- * @var string
251
- */
252
- public $SMTPSecure = '';
253
-
254
- /**
255
- * Whether to enable TLS encryption automatically if a server supports it,
256
- * even if `SMTPSecure` is not set to 'tls'.
257
- * Be aware that in PHP >= 5.6 this requires that the server's certificates are valid.
258
- * @var boolean
259
- */
260
- public $SMTPAutoTLS = true;
261
-
262
- /**
263
- * Whether to use SMTP authentication.
264
- * Uses the Username and Password properties.
265
- * @var boolean
266
- * @see PHPMailer::$Username
267
- * @see PHPMailer::$Password
268
- */
269
- public $SMTPAuth = false;
270
-
271
- /**
272
- * Options array passed to stream_context_create when connecting via SMTP.
273
- * @var array
274
- */
275
- public $SMTPOptions = array();
276
-
277
- /**
278
- * SMTP username.
279
- * @var string
280
- */
281
- public $Username = '';
282
-
283
- /**
284
- * SMTP password.
285
- * @var string
286
- */
287
- public $Password = '';
288
-
289
- /**
290
- * SMTP auth type.
291
- * Options are CRAM-MD5, LOGIN, PLAIN, NTLM, XOAUTH2, attempted in that order if not specified
292
- * @var string
293
- */
294
- public $AuthType = '';
295
-
296
- /**
297
- * SMTP realm.
298
- * Used for NTLM auth
299
- * @var string
300
- */
301
- public $Realm = '';
302
-
303
- /**
304
- * SMTP workstation.
305
- * Used for NTLM auth
306
- * @var string
307
- */
308
- public $Workstation = '';
309
-
310
- /**
311
- * The SMTP server timeout in seconds.
312
- * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
313
- * @var integer
314
- */
315
- public $Timeout = 300;
316
-
317
- /**
318
- * SMTP class debug output mode.
319
- * Debug output level.
320
- * Options:
321
- * * `0` No output
322
- * * `1` Commands
323
- * * `2` Data and commands
324
- * * `3` As 2 plus connection status
325
- * * `4` Low-level data output
326
- * @var integer
327
- * @see SMTP::$do_debug
328
- */
329
- public $SMTPDebug = 0;
330
-
331
- /**
332
- * How to handle debug output.
333
- * Options:
334
- * * `echo` Output plain-text as-is, appropriate for CLI
335
- * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
336
- * * `error_log` Output to error log as configured in php.ini
337
- *
338
- * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
339
- * <code>
340
- * $mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
341
- * </code>
342
- * @var string|callable
343
- * @see SMTP::$Debugoutput
344
- */
345
- public $Debugoutput = 'echo';
346
-
347
- /**
348
- * Whether to keep SMTP connection open after each message.
349
- * If this is set to true then to close the connection
350
- * requires an explicit call to smtpClose().
351
- * @var boolean
352
- */
353
- public $SMTPKeepAlive = false;
354
-
355
- /**
356
- * Whether to split multiple to addresses into multiple messages
357
- * or send them all in one message.
358
- * Only supported in `mail` and `sendmail` transports, not in SMTP.
359
- * @var boolean
360
- */
361
- public $SingleTo = false;
362
-
363
- /**
364
- * Storage for addresses when SingleTo is enabled.
365
- * @var array
366
- * @TODO This should really not be public
367
- */
368
- public $SingleToArray = array();
369
-
370
- /**
371
- * Whether to generate VERP addresses on send.
372
- * Only applicable when sending via SMTP.
373
- * @link https://en.wikipedia.org/wiki/Variable_envelope_return_path
374
- * @link http://www.postfix.org/VERP_README.html Postfix VERP info
375
- * @var boolean
376
- */
377
- public $do_verp = false;
378
-
379
- /**
380
- * Whether to allow sending messages with an empty body.
381
- * @var boolean
382
- */
383
- public $AllowEmpty = false;
384
-
385
- /**
386
- * The default line ending.
387
- * @note The default remains "\n". We force CRLF where we know
388
- * it must be used via self::CRLF.
389
- * @var string
390
- */
391
- public $LE = "\n";
392
-
393
- /**
394
- * DKIM selector.
395
- * @var string
396
- */
397
- public $DKIM_selector = '';
398
-
399
- /**
400
- * DKIM Identity.
401
- * Usually the email address used as the source of the email.
402
- * @var string
403
- */
404
- public $DKIM_identity = '';
405
-
406
- /**
407
- * DKIM passphrase.
408
- * Used if your key is encrypted.
409
- * @var string
410
- */
411
- public $DKIM_passphrase = '';
412
-
413
- /**
414
- * DKIM signing domain name.
415
- * @example 'example.com'
416
- * @var string
417
- */
418
- public $DKIM_domain = '';
419
-
420
- /**
421
- * DKIM private key file path.
422
- * @var string
423
- */
424
- public $DKIM_private = '';
425
-
426
- /**
427
- * DKIM private key string.
428
- * If set, takes precedence over `$DKIM_private`.
429
- * @var string
430
- */
431
- public $DKIM_private_string = '';
432
-
433
- /**
434
- * Callback Action function name.
435
- *
436
- * The function that handles the result of the send email action.
437
- * It is called out by send() for each email sent.
438
- *
439
- * Value can be any php callable: http://www.php.net/is_callable
440
- *
441
- * Parameters:
442
- * boolean $result result of the send action
443
- * string $to email address of the recipient
444
- * string $cc cc email addresses
445
- * string $bcc bcc email addresses
446
- * string $subject the subject
447
- * string $body the email body
448
- * string $from email address of sender
449
- * @var string
450
- */
451
- public $action_function = '';
452
-
453
- /**
454
- * What to put in the X-Mailer header.
455
- * Options: An empty string for PHPMailer default, whitespace for none, or a string to use
456
- * @var string
457
- */
458
- public $XMailer = '';
459
-
460
- /**
461
- * Which validator to use by default when validating email addresses.
462
- * May be a callable to inject your own validator, but there are several built-in validators.
463
- * @see PHPMailer::validateAddress()
464
- * @var string|callable
465
- * @static
466
- */
467
- public static $validator = 'auto';
468
-
469
- /**
470
- * An instance of the SMTP sender class.
471
- * @var SMTP
472
- * @access protected
473
- */
474
- protected $smtp = null;
475
-
476
- /**
477
- * The array of 'to' names and addresses.
478
- * @var array
479
- * @access protected
480
- */
481
- protected $to = array();
482
-
483
- /**
484
- * The array of 'cc' names and addresses.
485
- * @var array
486
- * @access protected
487
- */
488
- protected $cc = array();
489
-
490
- /**
491
- * The array of 'bcc' names and addresses.
492
- * @var array
493
- * @access protected
494
- */
495
- protected $bcc = array();
496
-
497
- /**
498
- * The array of reply-to names and addresses.
499
- * @var array
500
- * @access protected
501
- */
502
- protected $ReplyTo = array();
503
-
504
- /**
505
- * An array of all kinds of addresses.
506
- * Includes all of $to, $cc, $bcc
507
- * @var array
508
- * @access protected
509
- * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc
510
- */
511
- protected $all_recipients = array();
512
-
513
- /**
514
- * An array of names and addresses queued for validation.
515
- * In send(), valid and non duplicate entries are moved to $all_recipients
516
- * and one of $to, $cc, or $bcc.
517
- * This array is used only for addresses with IDN.
518
- * @var array
519
- * @access protected
520
- * @see PHPMailer::$to @see PHPMailer::$cc @see PHPMailer::$bcc
521
- * @see PHPMailer::$all_recipients
522
- */
523
- protected $RecipientsQueue = array();
524
-
525
- /**
526
- * An array of reply-to names and addresses queued for validation.
527
- * In send(), valid and non duplicate entries are moved to $ReplyTo.
528
- * This array is used only for addresses with IDN.
529
- * @var array
530
- * @access protected
531
- * @see PHPMailer::$ReplyTo
532
- */
533
- protected $ReplyToQueue = array();
534
-
535
- /**
536
- * The array of attachments.
537
- * @var array
538
- * @access protected
539
- */
540
- protected $attachment = array();
541
-
542
- /**
543
- * The array of custom headers.
544
- * @var array
545
- * @access protected
546
- */
547
- protected $CustomHeader = array();
548
-
549
- /**
550
- * The most recent Message-ID (including angular brackets).
551
- * @var string
552
- * @access protected
553
- */
554
- protected $lastMessageID = '';
555
-
556
- /**
557
- * The message's MIME type.
558
- * @var string
559
- * @access protected
560
- */
561
- protected $message_type = '';
562
-
563
- /**
564
- * The array of MIME boundary strings.
565
- * @var array
566
- * @access protected
567
- */
568
- protected $boundary = array();
569
-
570
- /**
571
- * The array of available languages.
572
- * @var array
573
- * @access protected
574
- */
575
- protected $language = array();
576
-
577
- /**
578
- * The number of errors encountered.
579
- * @var integer
580
- * @access protected
581
- */
582
- protected $error_count = 0;
583
-
584
- /**
585
- * The S/MIME certificate file path.
586
- * @var string
587
- * @access protected
588
- */
589
- protected $sign_cert_file = '';
590
-
591
- /**
592
- * The S/MIME key file path.
593
- * @var string
594
- * @access protected
595
- */
596
- protected $sign_key_file = '';
597
-
598
- /**
599
- * The optional S/MIME extra certificates ("CA Chain") file path.
600
- * @var string
601
- * @access protected
602
- */
603
- protected $sign_extracerts_file = '';
604
-
605
- /**
606
- * The S/MIME password for the key.
607
- * Used only if the key is encrypted.
608
- * @var string
609
- * @access protected
610
- */
611
- protected $sign_key_pass = '';
612
-
613
- /**
614
- * Whether to throw exceptions for errors.
615
- * @var boolean
616
- * @access protected
617
- */
618
- protected $exceptions = false;
619
-
620
- /**
621
- * Unique ID used for message ID and boundaries.
622
- * @var string
623
- * @access protected
624
- */
625
- protected $uniqueid = '';
626
-
627
- /**
628
- * Error severity: message only, continue processing.
629
- */
630
- const STOP_MESSAGE = 0;
631
-
632
- /**
633
- * Error severity: message, likely ok to continue processing.
634
- */
635
- const STOP_CONTINUE = 1;
636
-
637
- /**
638
- * Error severity: message, plus full stop, critical error reached.
639
- */
640
- const STOP_CRITICAL = 2;
641
-
642
- /**
643
- * SMTP RFC standard line ending.
644
- */
645
- const CRLF = "\r\n";
646
-
647
- /**
648
- * The maximum line length allowed by RFC 2822 section 2.1.1
649
- * @var integer
650
- */
651
- const MAX_LINE_LENGTH = 998;
652
-
653
- /**
654
- * Constructor.
655
- * @param boolean $exceptions Should we throw external exceptions?
656
- */
657
- public function __construct($exceptions = null)
658
- {
659
- if ($exceptions !== null) {
660
- $this->exceptions = (boolean)$exceptions;
661
- }
662
- }
663
-
664
- /**
665
- * Destructor.
666
- */
667
- public function __destruct()
668
- {
669
- //Close any open SMTP connection nicely
670
- $this->smtpClose();
671
- }
672
-
673
- /**
674
- * Call mail() in a safe_mode-aware fashion.
675
- * Also, unless sendmail_path points to sendmail (or something that
676
- * claims to be sendmail), don't pass params (not a perfect fix,
677
- * but it will do)
678
- * @param string $to To
679
- * @param string $subject Subject
680
- * @param string $body Message Body
681
- * @param string $header Additional Header(s)
682
- * @param string $params Params
683
- * @access private
684
- * @return boolean
685
- */
686
- private function mailPassthru($to, $subject, $body, $header, $params)
687
- {
688
- //Check overloading of mail function to avoid double-encoding
689
- if (ini_get('mbstring.func_overload') & 1) {
690
- $subject = $this->secureHeader($subject);
691
- } else {
692
- $subject = $this->encodeHeader($this->secureHeader($subject));
693
- }
694
-
695
- //Can't use additional_parameters in safe_mode
696
- //@link http://php.net/manual/en/function.mail.php
697
- if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) {
698
- $result = @mail($to, $subject, $body, $header);
699
- } else {
700
- $result = @mail($to, $subject, $body, $header, $params);
701
- }
702
- return $result;
703
- }
704
- /**
705
- * Output debugging info via user-defined method.
706
- * Only generates output if SMTP debug output is enabled (@see SMTP::$do_debug).
707
- * @see PHPMailer::$Debugoutput
708
- * @see PHPMailer::$SMTPDebug
709
- * @param string $str
710
- */
711
- protected function edebug($str)
712
- {
713
- if ($this->SMTPDebug <= 0) {
714
- return;
715
- }
716
- //Avoid clash with built-in function names
717
- if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
718
- call_user_func($this->Debugoutput, $str, $this->SMTPDebug);
719
- return;
720
- }
721
- switch ($this->Debugoutput) {
722
- case 'error_log':
723
- //Don't output, just log
724
- error_log($str);
725
- break;
726
- case 'html':
727
- //Cleans up output a bit for a better looking, HTML-safe output
728
- echo htmlentities(
729
- preg_replace('/[\r\n]+/', '', $str),
730
- ENT_QUOTES,
731
- 'UTF-8'
732
- )
733
- . "<br>\n";
734
- break;
735
- case 'echo':
736
- default:
737
- //Normalize line breaks
738
- $str = preg_replace('/\r\n?/ms', "\n", $str);
739
- echo gmdate('Y-m-d H:i:s') . "\t" . str_replace(
740
- "\n",
741
- "\n \t ",
742
- trim($str)
743
- ) . "\n";
744
- }
745
- }
746
-
747
- /**
748
- * Sets message type to HTML or plain.
749
- * @param boolean $isHtml True for HTML mode.
750
- * @return void
751
- */
752
- public function isHTML($isHtml = true)
753
- {
754
- if ($isHtml) {
755
- $this->ContentType = 'text/html';
756
- } else {
757
- $this->ContentType = 'text/plain';
758
- }
759
- }
760
-
761
- /**
762
- * Send messages using SMTP.
763
- * @return void
764
- */
765
- public function isSMTP()
766
- {
767
- $this->Mailer = 'smtp';
768
- }
769
-
770
- /**
771
- * Send messages using PHP's mail() function.
772
- * @return void
773
- */
774
- public function isMail()
775
- {
776
- $this->Mailer = 'mail';
777
- }
778
-
779
- /**
780
- * Send messages using $Sendmail.
781
- * @return void
782
- */
783
- public function isSendmail()
784
- {
785
- $ini_sendmail_path = ini_get('sendmail_path');
786
-
787
- if (!stristr($ini_sendmail_path, 'sendmail')) {
788
- $this->Sendmail = '/usr/sbin/sendmail';
789
- } else {
790
- $this->Sendmail = $ini_sendmail_path;
791
- }
792
- $this->Mailer = 'sendmail';
793
- }
794
-
795
- /**
796
- * Send messages using qmail.
797
- * @return void
798
- */
799
- public function isQmail()
800
- {
801
- $ini_sendmail_path = ini_get('sendmail_path');
802
-
803
- if (!stristr($ini_sendmail_path, 'qmail')) {
804
- $this->Sendmail = '/var/qmail/bin/qmail-inject';
805
- } else {
806
- $this->Sendmail = $ini_sendmail_path;
807
- }
808
- $this->Mailer = 'qmail';
809
- }
810
-
811
- /**
812
- * Add a "To" address.
813
- * @param string $address The email address to send to
814
- * @param string $name
815
- * @return boolean true on success, false if address already used or invalid in some way
816
- */
817
- public function addAddress($address, $name = '')
818
- {
819
- return $this->addOrEnqueueAnAddress('to', $address, $name);
820
- }
821
-
822
- /**
823
- * Add a "CC" address.
824
- * @note: This function works with the SMTP mailer on win32, not with the "mail" mailer.
825
- * @param string $address The email address to send to
826
- * @param string $name
827
- * @return boolean true on success, false if address already used or invalid in some way
828
- */
829
- public function addCC($address, $name = '')
830
- {
831
- return $this->addOrEnqueueAnAddress('cc', $address, $name);
832
- }
833
-
834
- /**
835
- * Add a "BCC" address.
836
- * @note: This function works with the SMTP mailer on win32, not with the "mail" mailer.
837
- * @param string $address The email address to send to
838
- * @param string $name
839
- * @return boolean true on success, false if address already used or invalid in some way
840
- */
841
- public function addBCC($address, $name = '')
842
- {
843
- return $this->addOrEnqueueAnAddress('bcc', $address, $name);
844
- }
845
-
846
- /**
847
- * Add a "Reply-To" address.
848
- * @param string $address The email address to reply to
849
- * @param string $name
850
- * @return boolean true on success, false if address already used or invalid in some way
851
- */
852
- public function addReplyTo($address, $name = '')
853
- {
854
- return $this->addOrEnqueueAnAddress('Reply-To', $address, $name);
855
- }
856
-
857
- /**
858
- * Add an address to one of the recipient arrays or to the ReplyTo array. Because PHPMailer
859
- * can't validate addresses with an IDN without knowing the PHPMailer::$CharSet (that can still
860
- * be modified after calling this function), addition of such addresses is delayed until send().
861
- * Addresses that have been added already return false, but do not throw exceptions.
862
- * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
863
- * @param string $address The email address to send, resp. to reply to
864
- * @param string $name
865
- * @throws phpmailerException
866
- * @return boolean true on success, false if address already used or invalid in some way
867
- * @access protected
868
- */
869
- protected function addOrEnqueueAnAddress($kind, $address, $name)
870
- {
871
- $address = trim($address);
872
- $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
873
- if (($pos = strrpos($address, '@')) === false) {
874
- // At-sign is misssing.
875
- $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address";
876
- $this->setError($error_message);
877
- $this->edebug($error_message);
878
- if ($this->exceptions) {
879
- throw new phpmailerException($error_message);
880
- }
881
- return false;
882
- }
883
- $params = array($kind, $address, $name);
884
- // Enqueue addresses with IDN until we know the PHPMailer::$CharSet.
885
- if ($this->has8bitChars(substr($address, ++$pos)) and $this->idnSupported()) {
886
- if ($kind != 'Reply-To') {
887
- if (!array_key_exists($address, $this->RecipientsQueue)) {
888
- $this->RecipientsQueue[$address] = $params;
889
- return true;
890
- }
891
- } else {
892
- if (!array_key_exists($address, $this->ReplyToQueue)) {
893
- $this->ReplyToQueue[$address] = $params;
894
- return true;
895
- }
896
- }
897
- return false;
898
- }
899
- // Immediately add standard addresses without IDN.
900
- return call_user_func_array(array($this, 'addAnAddress'), $params);
901
- }
902
-
903
- /**
904
- * Add an address to one of the recipient arrays or to the ReplyTo array.
905
- * Addresses that have been added already return false, but do not throw exceptions.
906
- * @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
907
- * @param string $address The email address to send, resp. to reply to
908
- * @param string $name
909
- * @throws phpmailerException
910
- * @return boolean true on success, false if address already used or invalid in some way
911
- * @access protected
912
- */
913
- protected function addAnAddress($kind, $address, $name = '')
914
- {
915
- if (!in_array($kind, array('to', 'cc', 'bcc', 'Reply-To'))) {
916
- $error_message = $this->lang('Invalid recipient kind: ') . $kind;
917
- $this->setError($error_message);
918
- $this->edebug($error_message);
919
- if ($this->exceptions) {
920
- throw new phpmailerException($error_message);
921
- }
922
- return false;
923
- }
924
- if (!$this->validateAddress($address)) {
925
- $error_message = $this->lang('invalid_address') . " (addAnAddress $kind): $address";
926
- $this->setError($error_message);
927
- $this->edebug($error_message);
928
- if ($this->exceptions) {
929
- throw new phpmailerException($error_message);
930
- }
931
- return false;
932
- }
933
- if ($kind != 'Reply-To') {
934
- if (!array_key_exists(strtolower($address), $this->all_recipients)) {
935
- array_push($this->$kind, array($address, $name));
936
- $this->all_recipients[strtolower($address)] = true;
937
- return true;
938
- }
939
- } else {
940
- if (!array_key_exists(strtolower($address), $this->ReplyTo)) {
941
- $this->ReplyTo[strtolower($address)] = array($address, $name);
942
- return true;
943
- }
944
- }
945
- return false;
946
- }
947
-
948
- /**
949
- * Parse and validate a string containing one or more RFC822-style comma-separated email addresses
950
- * of the form "display name <address>" into an array of name/address pairs.
951
- * Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available.
952
- * Note that quotes in the name part are removed.
953
- * @param string $addrstr The address list string
954
- * @param bool $useimap Whether to use the IMAP extension to parse the list
955
- * @return array
956
- * @link http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation
957
- */
958
- public function parseAddresses($addrstr, $useimap = true)
959
- {
960
- $addresses = array();
961
- if ($useimap and function_exists('imap_rfc822_parse_adrlist')) {
962
- //Use this built-in parser if it's available
963
- $list = imap_rfc822_parse_adrlist($addrstr, '');
964
- foreach ($list as $address) {
965
- if ($address->host != '.SYNTAX-ERROR.') {
966
- if ($this->validateAddress($address->mailbox . '@' . $address->host)) {
967
- $addresses[] = array(
968
- 'name' => (property_exists($address, 'personal') ? $address->personal : ''),
969
- 'address' => $address->mailbox . '@' . $address->host
970
- );
971
- }
972
- }
973
- }
974
- } else {
975
- //Use this simpler parser
976
- $list = explode(',', $addrstr);
977
- foreach ($list as $address) {
978
- $address = trim($address);
979
- //Is there a separate name part?
980
- if (strpos($address, '<') === false) {
981
- //No separate name, just use the whole thing
982
- if ($this->validateAddress($address)) {
983
- $addresses[] = array(
984
- 'name' => '',
985
- 'address' => $address
986
- );
987
- }
988
- } else {
989
- list($name, $email) = explode('<', $address);
990
- $email = trim(str_replace('>', '', $email));
991
- if ($this->validateAddress($email)) {
992
- $addresses[] = array(
993
- 'name' => trim(str_replace(array('"', "'"), '', $name)),
994
- 'address' => $email
995
- );
996
- }
997
- }
998
- }
999
- }
1000
- return $addresses;
1001
- }
1002
-
1003
- /**
1004
- * Set the From and FromName properties.
1005
- * @param string $address
1006
- * @param string $name
1007
- * @param boolean $auto Whether to also set the Sender address, defaults to true
1008
- * @throws phpmailerException
1009
- * @return boolean
1010
- */
1011
- public function setFrom($address, $name = '', $auto = true)
1012
- {
1013
- $address = trim($address);
1014
- $name = trim(preg_replace('/[\r\n]+/', '', $name)); //Strip breaks and trim
1015
- // Don't validate now addresses with IDN. Will be done in send().
1016
- if (($pos = strrpos($address, '@')) === false or
1017
- (!$this->has8bitChars(substr($address, ++$pos)) or !$this->idnSupported()) and
1018
- !$this->validateAddress($address)) {
1019
- $error_message = $this->lang('invalid_address') . " (setFrom) $address";
1020
- $this->setError($error_message);
1021
- $this->edebug($error_message);
1022
- if ($this->exceptions) {
1023
- throw new phpmailerException($error_message);
1024
- }
1025
- return false;
1026
- }
1027
- $this->From = $address;
1028
- $this->FromName = $name;
1029
- if ($auto) {
1030
- if (empty($this->Sender)) {
1031
- $this->Sender = $address;
1032
- }
1033
- }
1034
- return true;
1035
- }
1036
-
1037
- /**
1038
- * Return the Message-ID header of the last email.
1039
- * Technically this is the value from the last time the headers were created,
1040
- * but it's also the message ID of the last sent message except in
1041
- * pathological cases.
1042
- * @return string
1043
- */
1044
- public function getLastMessageID()
1045
- {
1046
- return $this->lastMessageID;
1047
- }
1048
-
1049
- /**
1050
- * Check that a string looks like an email address.
1051
- * @param string $address The email address to check
1052
- * @param string|callable $patternselect A selector for the validation pattern to use :
1053
- * * `auto` Pick best pattern automatically;
1054
- * * `pcre8` Use the squiloople.com pattern, requires PCRE > 8.0, PHP >= 5.3.2, 5.2.14;
1055
- * * `pcre` Use old PCRE implementation;
1056
- * * `php` Use PHP built-in FILTER_VALIDATE_EMAIL;
1057
- * * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements.
1058
- * * `noregex` Don't use a regex: super fast, really dumb.
1059
- * Alternatively you may pass in a callable to inject your own validator, for example:
1060
- * PHPMailer::validateAddress('user@example.com', function($address) {
1061
- * return (strpos($address, '@') !== false);
1062
- * });
1063
- * You can also set the PHPMailer::$validator static to a callable, allowing built-in methods to use your validator.
1064
- * @return boolean
1065
- * @static
1066
- * @access public
1067
- */
1068
- public static function validateAddress($address, $patternselect = null)
1069
- {
1070
- if (is_null($patternselect)) {
1071
- $patternselect = self::$validator;
1072
- }
1073
- if (is_callable($patternselect)) {
1074
- return call_user_func($patternselect, $address);
1075
- }
1076
- //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321
1077
- if (strpos($address, "\n") !== false or strpos($address, "\r") !== false) {
1078
- return false;
1079
- }
1080
- if (!$patternselect or $patternselect == 'auto') {
1081
- //Check this constant first so it works when extension_loaded() is disabled by safe mode
1082
- //Constant was added in PHP 5.2.4
1083
- if (defined('PCRE_VERSION')) {
1084
- //This pattern can get stuck in a recursive loop in PCRE <= 8.0.2
1085
- if (version_compare(PCRE_VERSION, '8.0.3') >= 0) {
1086
- $patternselect = 'pcre8';
1087
- } else {
1088
- $patternselect = 'pcre';
1089
- }
1090
- } elseif (function_exists('extension_loaded') and extension_loaded('pcre')) {
1091
- //Fall back to older PCRE
1092
- $patternselect = 'pcre';
1093
- } else {
1094
- //Filter_var appeared in PHP 5.2.0 and does not require the PCRE extension
1095
- if (version_compare(PHP_VERSION, '5.2.0') >= 0) {
1096
- $patternselect = 'php';
1097
- } else {
1098
- $patternselect = 'noregex';
1099
- }
1100
- }
1101
- }
1102
- switch ($patternselect) {
1103
- case 'pcre8':
1104
- /**
1105
- * Uses the same RFC5322 regex on which FILTER_VALIDATE_EMAIL is based, but allows dotless domains.
1106
- * @link http://squiloople.com/2009/12/20/email-address-validation/
1107
- * @copyright 2009-2010 Michael Rushton
1108
- * Feel free to use and redistribute this code. But please keep this copyright notice.
1109
- */
1110
- return (boolean)preg_match(
1111
- '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){255,})(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?1)){65,}@)' .
1112
- '((?>(?>(?>((?>(?>(?>\x0D\x0A)?[\t ])+|(?>[\t ]*\x0D\x0A)?[\t ]+)?)(\((?>(?2)' .
1113
- '(?>[\x01-\x08\x0B\x0C\x0E-\'*-\[\]-\x7F]|\\\[\x00-\x7F]|(?3)))*(?2)\)))+(?2))|(?2))?)' .
1114
- '([!#-\'*+\/-9=?^-~-]+|"(?>(?2)(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\x7F]))*' .
1115
- '(?2)")(?>(?1)\.(?1)(?4))*(?1)@(?!(?1)[a-z0-9-]{64,})(?1)(?>([a-z0-9](?>[a-z0-9-]*[a-z0-9])?)' .
1116
- '(?>(?1)\.(?!(?1)[a-z0-9-]{64,})(?1)(?5)){0,126}|\[(?:(?>IPv6:(?>([a-f0-9]{1,4})(?>:(?6)){7}' .
1117
- '|(?!(?:.*[a-f0-9][:\]]){8,})((?6)(?>:(?6)){0,6})?::(?7)?))|(?>(?>IPv6:(?>(?6)(?>:(?6)){5}:' .
1118
- '|(?!(?:.*[a-f0-9]:){6,})(?8)?::(?>((?6)(?>:(?6)){0,4}):)?))?(25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
1119
- '|[1-9]?[0-9])(?>\.(?9)){3}))\])(?1)$/isD',
1120
- $address
1121
- );
1122
- case 'pcre':
1123
- //An older regex that doesn't need a recent PCRE
1124
- return (boolean)preg_match(
1125
- '/^(?!(?>"?(?>\\\[ -~]|[^"])"?){255,})(?!(?>"?(?>\\\[ -~]|[^"])"?){65,}@)(?>' .
1126
- '[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*")' .
1127
- '(?>\.(?>[!#-\'*+\/-9=?^-~-]+|"(?>(?>[\x01-\x08\x0B\x0C\x0E-!#-\[\]-\x7F]|\\\[\x00-\xFF]))*"))*' .
1128
- '@(?>(?![a-z0-9-]{64,})(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)(?>\.(?![a-z0-9-]{64,})' .
1129
- '(?>[a-z0-9](?>[a-z0-9-]*[a-z0-9])?)){0,126}|\[(?:(?>IPv6:(?>(?>[a-f0-9]{1,4})(?>:' .
1130
- '[a-f0-9]{1,4}){7}|(?!(?:.*[a-f0-9][:\]]){8,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?' .
1131
- '::(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,6})?))|(?>(?>IPv6:(?>[a-f0-9]{1,4}(?>:' .
1132
- '[a-f0-9]{1,4}){5}:|(?!(?:.*[a-f0-9]:){6,})(?>[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4})?' .
1133
- '::(?>(?:[a-f0-9]{1,4}(?>:[a-f0-9]{1,4}){0,4}):)?))?(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}' .
1134
- '|[1-9]?[0-9])(?>\.(?>25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}))\])$/isD',
1135
- $address
1136
- );
1137
- case 'html5':
1138
- /**
1139
- * This is the pattern used in the HTML5 spec for validation of 'email' type form input elements.
1140
- * @link http://www.whatwg.org/specs/web-apps/current-work/#e-mail-state-(type=email)
1141
- */
1142
- return (boolean)preg_match(
1143
- '/^[a-zA-Z0-9.!#$%&\'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}' .
1144
- '[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD',
1145
- $address
1146
- );
1147
- case 'noregex':
1148
- //No PCRE! Do something _very_ approximate!
1149
- //Check the address is 3 chars or longer and contains an @ that's not the first or last char
1150
- return (strlen($address) >= 3
1151
- and strpos($address, '@') >= 1
1152
- and strpos($address, '@') != strlen($address) - 1);
1153
- case 'php':
1154
- default:
1155
- return (boolean)filter_var($address, FILTER_VALIDATE_EMAIL);
1156
- }
1157
- }
1158
-
1159
- /**
1160
- * Tells whether IDNs (Internationalized Domain Names) are supported or not. This requires the
1161
- * "intl" and "mbstring" PHP extensions.
1162
- * @return bool "true" if required functions for IDN support are present
1163
- */
1164
- public function idnSupported()
1165
- {
1166
- // @TODO: Write our own "idn_to_ascii" function for PHP <= 5.2.
1167
- return function_exists('idn_to_ascii') and function_exists('mb_convert_encoding');
1168
- }
1169
-
1170
- /**
1171
- * Converts IDN in given email address to its ASCII form, also known as punycode, if possible.
1172
- * Important: Address must be passed in same encoding as currently set in PHPMailer::$CharSet.
1173
- * This function silently returns unmodified address if:
1174
- * - No conversion is necessary (i.e. domain name is not an IDN, or is already in ASCII form)
1175
- * - Conversion to punycode is impossible (e.g. required PHP functions are not available)
1176
- * or fails for any reason (e.g. domain has characters not allowed in an IDN)
1177
- * @see PHPMailer::$CharSet
1178
- * @param string $address The email address to convert
1179
- * @return string The encoded address in ASCII form
1180
- */
1181
- public function punyencodeAddress($address)
1182
- {
1183
- // Verify we have required functions, CharSet, and at-sign.
1184
- if ($this->idnSupported() and
1185
- !empty($this->CharSet) and
1186
- ($pos = strrpos($address, '@')) !== false) {
1187
- $domain = substr($address, ++$pos);
1188
- // Verify CharSet string is a valid one, and domain properly encoded in this CharSet.
1189
- if ($this->has8bitChars($domain) and @mb_check_encoding($domain, $this->CharSet)) {
1190
- $domain = mb_convert_encoding($domain, 'UTF-8', $this->CharSet);
1191
- if (($punycode = defined('INTL_IDNA_VARIANT_UTS46') ?
1192
- idn_to_ascii($domain, 0, INTL_IDNA_VARIANT_UTS46) :
1193
- idn_to_ascii($domain)) !== false) {
1194
- return substr($address, 0, $pos) . $punycode;
1195
- }
1196
- }
1197
- }
1198
- return $address;
1199
- }
1200
-
1201
- /**
1202
- * Create a message and send it.
1203
- * Uses the sending method specified by $Mailer.
1204
- * @throws phpmailerException
1205
- * @return boolean false on error - See the ErrorInfo property for details of the error.
1206
- */
1207
- public function send()
1208
- {
1209
- try {
1210
- if (!$this->preSend()) {
1211
- return false;
1212
- }
1213
- return $this->postSend();
1214
- } catch (phpmailerException $exc) {
1215
- $this->mailHeader = '';
1216
- $this->setError($exc->getMessage());
1217
- if ($this->exceptions) {
1218
- throw $exc;
1219
- }
1220
- return false;
1221
- }
1222
- }
1223
-
1224
- /**
1225
- * Prepare a message for sending.
1226
- * @throws phpmailerException
1227
- * @return boolean
1228
- */
1229
- public function preSend()
1230
- {
1231
- try {
1232
- $this->error_count = 0; // Reset errors
1233
- $this->mailHeader = '';
1234
-
1235
- // Dequeue recipient and Reply-To addresses with IDN
1236
- foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {
1237
- $params[1] = $this->punyencodeAddress($params[1]);
1238
- call_user_func_array(array($this, 'addAnAddress'), $params);
1239
- }
1240
- if ((count($this->to) + count($this->cc) + count($this->bcc)) < 1) {
1241
- throw new phpmailerException($this->lang('provide_address'), self::STOP_CRITICAL);
1242
- }
1243
-
1244
- // Validate From, Sender, and ConfirmReadingTo addresses
1245
- foreach (array('From', 'Sender', 'ConfirmReadingTo') as $address_kind) {
1246
- $this->$address_kind = trim($this->$address_kind);
1247
- if (empty($this->$address_kind)) {
1248
- continue;
1249
- }
1250
- $this->$address_kind = $this->punyencodeAddress($this->$address_kind);
1251
- if (!$this->validateAddress($this->$address_kind)) {
1252
- $error_message = $this->lang('invalid_address') . ' (punyEncode) ' . $this->$address_kind;
1253
- $this->setError($error_message);
1254
- $this->edebug($error_message);
1255
- if ($this->exceptions) {
1256
- throw new phpmailerException($error_message);
1257
- }
1258
- return false;
1259
- }
1260
- }
1261
-
1262
- // Set whether the message is multipart/alternative
1263
- if ($this->alternativeExists()) {
1264
- $this->ContentType = 'multipart/alternative';
1265
- }
1266
-
1267
- $this->setMessageType();
1268
- // Refuse to send an empty message unless we are specifically allowing it
1269
- if (!$this->AllowEmpty and empty($this->Body)) {
1270
- throw new phpmailerException($this->lang('empty_message'), self::STOP_CRITICAL);
1271
- }
1272
-
1273
- // Create body before headers in case body makes changes to headers (e.g. altering transfer encoding)
1274
- $this->MIMEHeader = '';
1275
- $this->MIMEBody = $this->createBody();
1276
- // createBody may have added some headers, so retain them
1277
- $tempheaders = $this->MIMEHeader;
1278
- $this->MIMEHeader = $this->createHeader();
1279
- $this->MIMEHeader .= $tempheaders;
1280
-
1281
- // To capture the complete message when using mail(), create
1282
- // an extra header list which createHeader() doesn't fold in
1283
- if ($this->Mailer == 'mail') {
1284
- if (count($this->to) > 0) {
1285
- $this->mailHeader .= $this->addrAppend('To', $this->to);
1286
- } else {
1287
- $this->mailHeader .= $this->headerLine('To', 'undisclosed-recipients:;');
1288
- }
1289
- $this->mailHeader .= $this->headerLine(
1290
- 'Subject',
1291
- $this->encodeHeader($this->secureHeader(trim($this->Subject)))
1292
- );
1293
- }
1294
-
1295
- // Sign with DKIM if enabled
1296
- if (!empty($this->DKIM_domain)
1297
- && !empty($this->DKIM_selector)
1298
- && (!empty($this->DKIM_private_string)
1299
- || (!empty($this->DKIM_private) && file_exists($this->DKIM_private))
1300
- )
1301
- ) {
1302
- $header_dkim = $this->DKIM_Add(
1303
- $this->MIMEHeader . $this->mailHeader,
1304
- $this->encodeHeader($this->secureHeader($this->Subject)),
1305
- $this->MIMEBody
1306
- );
1307
- $this->MIMEHeader = rtrim($this->MIMEHeader, "\r\n ") . self::CRLF .
1308
- str_replace("\r\n", "\n", $header_dkim) . self::CRLF;
1309
- }
1310
- return true;
1311
- } catch (phpmailerException $exc) {
1312
- $this->setError($exc->getMessage());
1313
- if ($this->exceptions) {
1314
- throw $exc;
1315
- }
1316
- return false;
1317
- }
1318
- }
1319
-
1320
- /**
1321
- * Actually send a message.
1322
- * Send the email via the selected mechanism
1323
- * @throws phpmailerException
1324
- * @return boolean
1325
- */
1326
- public function postSend()
1327
- {
1328
- try {
1329
- // Choose the mailer and send through it
1330
- switch ($this->Mailer) {
1331
- case 'sendmail':
1332
- case 'qmail':
1333
- return $this->sendmailSend($this->MIMEHeader, $this->MIMEBody);
1334
- case 'smtp':
1335
- return $this->smtpSend($this->MIMEHeader, $this->MIMEBody);
1336
- case 'mail':
1337
- return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
1338
- default:
1339
- $sendMethod = $this->Mailer.'Send';
1340
- if (method_exists($this, $sendMethod)) {
1341
- return $this->$sendMethod($this->MIMEHeader, $this->MIMEBody);
1342
- }
1343
-
1344
- return $this->mailSend($this->MIMEHeader, $this->MIMEBody);
1345
- }
1346
- } catch (phpmailerException $exc) {
1347
- $this->setError($exc->getMessage());
1348
- $this->edebug($exc->getMessage());
1349
- if ($this->exceptions) {
1350
- throw $exc;
1351
- }
1352
- }
1353
- return false;
1354
- }
1355
-
1356
- /**
1357
- * Send mail using the $Sendmail program.
1358
- * @param string $header The message headers
1359
- * @param string $body The message body
1360
- * @see PHPMailer::$Sendmail
1361
- * @throws phpmailerException
1362
- * @access protected
1363
- * @return boolean
1364
- */
1365
- protected function sendmailSend($header, $body)
1366
- {
1367
- if ($this->Sender != '') {
1368
- if ($this->Mailer == 'qmail') {
1369
- $sendmail = sprintf('%s -f%s', escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender));
1370
- } else {
1371
- $sendmail = sprintf('%s -oi -f%s -t', escapeshellcmd($this->Sendmail), escapeshellarg($this->Sender));
1372
- }
1373
- } else {
1374
- if ($this->Mailer == 'qmail') {
1375
- $sendmail = sprintf('%s', escapeshellcmd($this->Sendmail));
1376
- } else {
1377
- $sendmail = sprintf('%s -oi -t', escapeshellcmd($this->Sendmail));
1378
- }
1379
- }
1380
- if ($this->SingleTo) {
1381
- foreach ($this->SingleToArray as $toAddr) {
1382
- if (!@$mail = popen($sendmail, 'w')) {
1383
- throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
1384
- }
1385
- fputs($mail, 'To: ' . $toAddr . "\n");
1386
- fputs($mail, $header);
1387
- fputs($mail, $body);
1388
- $result = pclose($mail);
1389
- $this->doCallback(
1390
- ($result == 0),
1391
- array($toAddr),
1392
- $this->cc,
1393
- $this->bcc,
1394
- $this->Subject,
1395
- $body,
1396
- $this->From
1397
- );
1398
- if ($result != 0) {
1399
- throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
1400
- }
1401
- }
1402
- } else {
1403
- if (!@$mail = popen($sendmail, 'w')) {
1404
- throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
1405
- }
1406
- fputs($mail, $header);
1407
- fputs($mail, $body);
1408
- $result = pclose($mail);
1409
- $this->doCallback(
1410
- ($result == 0),
1411
- $this->to,
1412
- $this->cc,
1413
- $this->bcc,
1414
- $this->Subject,
1415
- $body,
1416
- $this->From
1417
- );
1418
- if ($result != 0) {
1419
- throw new phpmailerException($this->lang('execute') . $this->Sendmail, self::STOP_CRITICAL);
1420
- }
1421
- }
1422
- return true;
1423
- }
1424
-
1425
- /**
1426
- * Send mail using the PHP mail() function.
1427
- * @param string $header The message headers
1428
- * @param string $body The message body
1429
- * @link http://www.php.net/manual/en/book.mail.php
1430
- * @throws phpmailerException
1431
- * @access protected
1432
- * @return boolean
1433
- */
1434
- protected function mailSend($header, $body)
1435
- {
1436
- $toArr = array();
1437
- foreach ($this->to as $toaddr) {
1438
- $toArr[] = $this->addrFormat($toaddr);
1439
- }
1440
- $to = implode(', ', $toArr);
1441
-
1442
- $params = null;
1443
- //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
1444
- if (!empty($this->Sender)) {
1445
- $params = sprintf('-f%s', $this->Sender);
1446
- }
1447
- if ($this->Sender != '' and !ini_get('safe_mode')) {
1448
- $old_from = ini_get('sendmail_from');
1449
- ini_set('sendmail_from', $this->Sender);
1450
- }
1451
- $result = false;
1452
- if ($this->SingleTo and count($toArr) > 1) {
1453
- foreach ($toArr as $toAddr) {
1454
- $result = $this->mailPassthru($toAddr, $this->Subject, $body, $header, $params);
1455
- $this->doCallback($result, array($toAddr), $this->cc, $this->bcc, $this->Subject, $body, $this->From);
1456
- }
1457
- } else {
1458
- $result = $this->mailPassthru($to, $this->Subject, $body, $header, $params);
1459
- $this->doCallback($result, $this->to, $this->cc, $this->bcc, $this->Subject, $body, $this->From);
1460
- }
1461
- if (isset($old_from)) {
1462
- ini_set('sendmail_from', $old_from);
1463
- }
1464
- if (!$result) {
1465
- throw new phpmailerException($this->lang('instantiate'), self::STOP_CRITICAL);
1466
- }
1467
- return true;
1468
- }
1469
-
1470
- /**
1471
- * Get an instance to use for SMTP operations.
1472
- * Override this function to load your own SMTP implementation
1473
- * @return SMTP
1474
- */
1475
- public function getSMTPInstance()
1476
- {
1477
- if (!is_object($this->smtp)) {
1478
- $this->smtp = new SMTP;
1479
- }
1480
- return $this->smtp;
1481
- }
1482
-
1483
- /**
1484
- * Send mail via SMTP.
1485
- * Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
1486
- * Uses the PHPMailerSMTP class by default.
1487
- * @see PHPMailer::getSMTPInstance() to use a different class.
1488
- * @param string $header The message headers
1489
- * @param string $body The message body
1490
- * @throws phpmailerException
1491
- * @uses SMTP
1492
- * @access protected
1493
- * @return boolean
1494
- */
1495
- protected function smtpSend($header, $body)
1496
- {
1497
- $bad_rcpt = array();
1498
- if (!$this->smtpConnect($this->SMTPOptions)) {
1499
- throw new phpmailerException($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
1500
- }
1501
- if ('' == $this->Sender) {
1502
- $smtp_from = $this->From;
1503
- } else {
1504
- $smtp_from = $this->Sender;
1505
- }
1506
- if (!$this->smtp->mail($smtp_from)) {
1507
- $this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
1508
- throw new phpmailerException($this->ErrorInfo, self::STOP_CRITICAL);
1509
- }
1510
-
1511
- // Attempt to send to all recipients
1512
- foreach (array($this->to, $this->cc, $this->bcc) as $togroup) {
1513
- foreach ($togroup as $to) {
1514
- if (!$this->smtp->recipient($to[0])) {
1515
- $error = $this->smtp->getError();
1516
- $bad_rcpt[] = array('to' => $to[0], 'error' => $error['detail']);
1517
- $isSent = false;
1518
- } else {
1519
- $isSent = true;
1520
- }
1521
- $this->doCallback($isSent, array($to[0]), array(), array(), $this->Subject, $body, $this->From);
1522
- }
1523
- }
1524
-
1525
- // Only send the DATA command if we have viable recipients
1526
- if ((count($this->all_recipients) > count($bad_rcpt)) and !$this->smtp->data($header . $body)) {
1527
- throw new phpmailerException($this->lang('data_not_accepted'), self::STOP_CRITICAL);
1528
- }
1529
- if ($this->SMTPKeepAlive) {
1530
- $this->smtp->reset();
1531
- } else {
1532
- $this->smtp->quit();
1533
- $this->smtp->close();
1534
- }
1535
- //Create error message for any bad addresses
1536
- if (count($bad_rcpt) > 0) {
1537
- $errstr = '';
1538
- foreach ($bad_rcpt as $bad) {
1539
- $errstr .= $bad['to'] . ': ' . $bad['error'];
1540
- }
1541
- throw new phpmailerException(
1542
- $this->lang('recipients_failed') . $errstr,
1543
- self::STOP_CONTINUE
1544
- );
1545
- }
1546
- return true;
1547
- }
1548
-
1549
- /**
1550
- * Initiate a connection to an SMTP server.
1551
- * Returns false if the operation failed.
1552
- * @param array $options An array of options compatible with stream_context_create()
1553
- * @uses SMTP
1554
- * @access public
1555
- * @throws phpmailerException
1556
- * @return boolean
1557
- */
1558
- public function smtpConnect($options = null)
1559
- {
1560
- if (is_null($this->smtp)) {
1561
- $this->smtp = $this->getSMTPInstance();
1562
- }
1563
-
1564
- //If no options are provided, use whatever is set in the instance
1565
- if (is_null($options)) {
1566
- $options = $this->SMTPOptions;
1567
- }
1568
-
1569
- // Already connected?
1570
- if ($this->smtp->connected()) {
1571
- return true;
1572
- }
1573
-
1574
- $this->smtp->setTimeout($this->Timeout);
1575
- $this->smtp->setDebugLevel($this->SMTPDebug);
1576
- $this->smtp->setDebugOutput($this->Debugoutput);
1577
- $this->smtp->setVerp($this->do_verp);
1578
- $hosts = explode(';', $this->Host);
1579
- $lastexception = null;
1580
-
1581
- foreach ($hosts as $hostentry) {
1582
- $hostinfo = array();
1583
- if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) {
1584
- // Not a valid host entry
1585
- continue;
1586
- }
1587
- // $hostinfo[2]: optional ssl or tls prefix
1588
- // $hostinfo[3]: the hostname
1589
- // $hostinfo[4]: optional port number
1590
- // The host string prefix can temporarily override the current setting for SMTPSecure
1591
- // If it's not specified, the default value is used
1592
- $prefix = '';
1593
- $secure = $this->SMTPSecure;
1594
- $tls = ($this->SMTPSecure == 'tls');
1595
- if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) {
1596
- $prefix = 'ssl://';
1597
- $tls = false; // Can't have SSL and TLS at the same time
1598
- $secure = 'ssl';
1599
- } elseif ($hostinfo[2] == 'tls') {
1600
- $tls = true;
1601
- // tls doesn't use a prefix
1602
- $secure = 'tls';
1603
- }
1604
- //Do we need the OpenSSL extension?
1605
- $sslext = defined('OPENSSL_ALGO_SHA1');
1606
- if ('tls' === $secure or 'ssl' === $secure) {
1607
- //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
1608
- if (!$sslext) {
1609
- throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL);
1610
- }
1611
- }
1612
- $host = $hostinfo[3];
1613
- $port = $this->Port;
1614
- $tport = (integer)$hostinfo[4];
1615
- if ($tport > 0 and $tport < 65536) {
1616
- $port = $tport;
1617
- }
1618
- if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
1619
- try {
1620
- if ($this->Helo) {
1621
- $hello = $this->Helo;
1622
- } else {
1623
- $hello = $this->serverHostname();
1624
- }
1625
- $this->smtp->hello($hello);
1626
- //Automatically enable TLS encryption if:
1627
- // * it's not disabled
1628
- // * we have openssl extension
1629
- // * we are not already using SSL
1630
- // * the server offers STARTTLS
1631
- if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) {
1632
- $tls = true;
1633
- }
1634
- if ($tls) {
1635
- if (!$this->smtp->startTLS()) {
1636
- throw new phpmailerException($this->lang('connect_host'));
1637
- }
1638
- // We must resend EHLO after TLS negotiation
1639
- $this->smtp->hello($hello);
1640
- }
1641
- if ($this->SMTPAuth) {
1642
- if (!$this->smtp->authenticate(
1643
- $this->Username,
1644
- $this->Password,
1645
- $this->AuthType,
1646
- $this->Realm,
1647
- $this->Workstation
1648
- )
1649
- ) {
1650
- throw new phpmailerException($this->lang('authenticate'));
1651
- }
1652
- }
1653
- return true;
1654
- } catch (phpmailerException $exc) {
1655
- $lastexception = $exc;
1656
- $this->edebug($exc->getMessage());
1657
- // We must have connected, but then failed TLS or Auth, so close connection nicely
1658
- $this->smtp->quit();
1659
- }
1660
- }
1661
- }
1662
- // If we get here, all connection attempts have failed, so close connection hard
1663
- $this->smtp->close();
1664
- // As we've caught all exceptions, just report whatever the last one was
1665
- if ($this->exceptions and !is_null($lastexception)) {
1666
- throw $lastexception;
1667
- }
1668
- return false;
1669
- }
1670
-
1671
- /**
1672
- * Close the active SMTP session if one exists.
1673
- * @return void
1674
- */
1675
- public function smtpClose()
1676
- {
1677
- if (is_a($this->smtp, 'SMTP')) {
1678
- if ($this->smtp->connected()) {
1679
- $this->smtp->quit();
1680
- $this->smtp->close();
1681
- }
1682
- }
1683
- }
1684
-
1685
- /**
1686
- * Set the language for error messages.
1687
- * Returns false if it cannot load the language file.
1688
- * The default language is English.
1689
- * @param string $langcode ISO 639-1 2-character language code (e.g. French is "fr")
1690
- * @param string $lang_path Path to the language file directory, with trailing separator (slash)
1691
- * @return boolean
1692
- * @access public
1693
- */
1694
- public function setLanguage($langcode = 'en', $lang_path = '')
1695
- {
1696
- // Backwards compatibility for renamed language codes
1697
- $renamed_langcodes = array(
1698
- 'br' => 'pt_br',
1699
- 'cz' => 'cs',
1700
- 'dk' => 'da',
1701
- 'no' => 'nb',
1702
- 'se' => 'sv',
1703
- );
1704
-
1705
- if (isset($renamed_langcodes[$langcode])) {
1706
- $langcode = $renamed_langcodes[$langcode];
1707
- }
1708
-
1709
- // Define full set of translatable strings in English
1710
- $PHPMAILER_LANG = array(
1711
- 'authenticate' => 'SMTP Error: Could not authenticate.',
1712
- 'connect_host' => 'SMTP Error: Could not connect to SMTP host.',
1713
- 'data_not_accepted' => 'SMTP Error: data not accepted.',
1714
- 'empty_message' => 'Message body empty',
1715
- 'encoding' => 'Unknown encoding: ',
1716
- 'execute' => 'Could not execute: ',
1717
- 'file_access' => 'Could not access file: ',
1718
- 'file_open' => 'File Error: Could not open file: ',
1719
- 'from_failed' => 'The following From address failed: ',
1720
- 'instantiate' => 'Could not instantiate mail function.',
1721
- 'invalid_address' => 'Invalid address: ',
1722
- 'mailer_not_supported' => ' mailer is not supported.',
1723
- 'provide_address' => 'You must provide at least one recipient email address.',
1724
- 'recipients_failed' => 'SMTP Error: The following recipients failed: ',
1725
- 'signing' => 'Signing Error: ',
1726
- 'smtp_connect_failed' => 'SMTP connect() failed.',
1727
- 'smtp_error' => 'SMTP server error: ',
1728
- 'variable_set' => 'Cannot set or reset variable: ',
1729
- 'extension_missing' => 'Extension missing: '
1730
- );
1731
- if (empty($lang_path)) {
1732
- // Calculate an absolute path so it can work if CWD is not here
1733
- $lang_path = dirname(__FILE__). DIRECTORY_SEPARATOR . 'language'. DIRECTORY_SEPARATOR;
1734
- }
1735
- //Validate $langcode
1736
- if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/', $langcode)) {
1737
- $langcode = 'en';
1738
- }
1739
- $foundlang = true;
1740
- $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php';
1741
- // There is no English translation file
1742
- if ($langcode != 'en') {
1743
- // Make sure language file path is readable
1744
- if (!is_readable($lang_file)) {
1745
- $foundlang = false;
1746
- } else {
1747
- // Overwrite language-specific strings.
1748
- // This way we'll never have missing translation keys.
1749
- $foundlang = include $lang_file;
1750
- }
1751
- }
1752
- $this->language = $PHPMAILER_LANG;
1753
- return (boolean)$foundlang; // Returns false if language not found
1754
- }
1755
-
1756
- /**
1757
- * Get the array of strings for the current language.
1758
- * @return array
1759
- */
1760
- public function getTranslations()
1761
- {
1762
- return $this->language;
1763
- }
1764
-
1765
- /**
1766
- * Create recipient headers.
1767
- * @access public
1768
- * @param string $type
1769
- * @param array $addr An array of recipient,
1770
- * where each recipient is a 2-element indexed array with element 0 containing an address
1771
- * and element 1 containing a name, like:
1772
- * array(array('joe@example.com', 'Joe User'), array('zoe@example.com', 'Zoe User'))
1773
- * @return string
1774
- */
1775
- public function addrAppend($type, $addr)
1776
- {
1777
- $addresses = array();
1778
- foreach ($addr as $address) {
1779
- $addresses[] = $this->addrFormat($address);
1780
- }
1781
- return $type . ': ' . implode(', ', $addresses) . $this->LE;
1782
- }
1783
-
1784
- /**
1785
- * Format an address for use in a message header.
1786
- * @access public
1787
- * @param array $addr A 2-element indexed array, element 0 containing an address, element 1 containing a name
1788
- * like array('joe@example.com', 'Joe User')
1789
- * @return string
1790
- */
1791
- public function addrFormat($addr)
1792
- {
1793
- if (empty($addr[1])) { // No name provided
1794
- return $this->secureHeader($addr[0]);
1795
- } else {
1796
- return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') . ' <' . $this->secureHeader(
1797
- $addr[0]
1798
- ) . '>';
1799
- }
1800
- }
1801
-
1802
- /**
1803
- * Word-wrap message.
1804
- * For use with mailers that do not automatically perform wrapping
1805
- * and for quoted-printable encoded messages.
1806
- * Original written by philippe.
1807
- * @param string $message The message to wrap
1808
- * @param integer $length The line length to wrap to
1809
- * @param boolean $qp_mode Whether to run in Quoted-Printable mode
1810
- * @access public
1811
- * @return string
1812
- */
1813
- public function wrapText($message, $length, $qp_mode = false)
1814
- {
1815
- if ($qp_mode) {
1816
- $soft_break = sprintf(' =%s', $this->LE);
1817
- } else {
1818
- $soft_break = $this->LE;
1819
- }
1820
- // If utf-8 encoding is used, we will need to make sure we don't
1821
- // split multibyte characters when we wrap
1822
- $is_utf8 = (strtolower($this->CharSet) == 'utf-8');
1823
- $lelen = strlen($this->LE);
1824
- $crlflen = strlen(self::CRLF);
1825
-
1826
- $message = $this->fixEOL($message);
1827
- //Remove a trailing line break
1828
- if (substr($message, -$lelen) == $this->LE) {
1829
- $message = substr($message, 0, -$lelen);
1830
- }
1831
-
1832
- //Split message into lines
1833
- $lines = explode($this->LE, $message);
1834
- //Message will be rebuilt in here
1835
- $message = '';
1836
- foreach ($lines as $line) {
1837
- $words = explode(' ', $line);
1838
- $buf = '';
1839
- $firstword = true;
1840
- foreach ($words as $word) {
1841
- if ($qp_mode and (strlen($word) > $length)) {
1842
- $space_left = $length - strlen($buf) - $crlflen;
1843
- if (!$firstword) {
1844
- if ($space_left > 20) {
1845
- $len = $space_left;
1846
- if ($is_utf8) {
1847
- $len = $this->utf8CharBoundary($word, $len);
1848
- } elseif (substr($word, $len - 1, 1) == '=') {
1849
- $len--;
1850
- } elseif (substr($word, $len - 2, 1) == '=') {
1851
- $len -= 2;
1852
- }
1853
- $part = substr($word, 0, $len);
1854
- $word = substr($word, $len);
1855
- $buf .= ' ' . $part;
1856
- $message .= $buf . sprintf('=%s', self::CRLF);
1857
- } else {
1858
- $message .= $buf . $soft_break;
1859
- }
1860
- $buf = '';
1861
- }
1862
- while (strlen($word) > 0) {
1863
- if ($length <= 0) {
1864
- break;
1865
- }
1866
- $len = $length;
1867
- if ($is_utf8) {
1868
- $len = $this->utf8CharBoundary($word, $len);
1869
- } elseif (substr($word, $len - 1, 1) == '=') {
1870
- $len--;
1871
- } elseif (substr($word, $len - 2, 1) == '=') {
1872
- $len -= 2;
1873
- }
1874
- $part = substr($word, 0, $len);
1875
- $word = substr($word, $len);
1876
-
1877
- if (strlen($word) > 0) {
1878
- $message .= $part . sprintf('=%s', self::CRLF);
1879
- } else {
1880
- $buf = $part;
1881
- }
1882
- }
1883
- } else {
1884
- $buf_o = $buf;
1885
- if (!$firstword) {
1886
- $buf .= ' ';
1887
- }
1888
- $buf .= $word;
1889
-
1890
- if (strlen($buf) > $length and $buf_o != '') {
1891
- $message .= $buf_o . $soft_break;
1892
- $buf = $word;
1893
- }
1894
- }
1895
- $firstword = false;
1896
- }
1897
- $message .= $buf . self::CRLF;
1898
- }
1899
-
1900
- return $message;
1901
- }
1902
-
1903
- /**
1904
- * Find the last character boundary prior to $maxLength in a utf-8
1905
- * quoted-printable encoded string.
1906
- * Original written by Colin Brown.
1907
- * @access public
1908
- * @param string $encodedText utf-8 QP text
1909
- * @param integer $maxLength Find the last character boundary prior to this length
1910
- * @return integer
1911
- */
1912
- public function utf8CharBoundary($encodedText, $maxLength)
1913
- {
1914
- $foundSplitPos = false;
1915
- $lookBack = 3;
1916
- while (!$foundSplitPos) {
1917
- $lastChunk = substr($encodedText, $maxLength - $lookBack, $lookBack);
1918
- $encodedCharPos = strpos($lastChunk, '=');
1919
- if (false !== $encodedCharPos) {
1920
- // Found start of encoded character byte within $lookBack block.
1921
- // Check the encoded byte value (the 2 chars after the '=')
1922
- $hex = substr($encodedText, $maxLength - $lookBack + $encodedCharPos + 1, 2);
1923
- $dec = hexdec($hex);
1924
- if ($dec < 128) {
1925
- // Single byte character.
1926
- // If the encoded char was found at pos 0, it will fit
1927
- // otherwise reduce maxLength to start of the encoded char
1928
- if ($encodedCharPos > 0) {
1929
- $maxLength = $maxLength - ($lookBack - $encodedCharPos);
1930
- }
1931
- $foundSplitPos = true;
1932
- } elseif ($dec >= 192) {
1933
- // First byte of a multi byte character
1934
- // Reduce maxLength to split at start of character
1935
- $maxLength = $maxLength - ($lookBack - $encodedCharPos);
1936
- $foundSplitPos = true;
1937
- } elseif ($dec < 192) {
1938
- // Middle byte of a multi byte character, look further back
1939
- $lookBack += 3;
1940
- }
1941
- } else {
1942
- // No encoded character found
1943
- $foundSplitPos = true;
1944
- }
1945
- }
1946
- return $maxLength;
1947
- }
1948
-
1949
- /**
1950
- * Apply word wrapping to the message body.
1951
- * Wraps the message body to the number of chars set in the WordWrap property.
1952
- * You should only do this to plain-text bodies as wrapping HTML tags may break them.
1953
- * This is called automatically by createBody(), so you don't need to call it yourself.
1954
- * @access public
1955
- * @return void
1956
- */
1957
- public function setWordWrap()
1958
- {
1959
- if ($this->WordWrap < 1) {
1960
- return;
1961
- }
1962
-
1963
- switch ($this->message_type) {
1964
- case 'alt':
1965
- case 'alt_inline':
1966
- case 'alt_attach':
1967
- case 'alt_inline_attach':
1968
- $this->AltBody = $this->wrapText($this->AltBody, $this->WordWrap);
1969
- break;
1970
- default:
1971
- $this->Body = $this->wrapText($this->Body, $this->WordWrap);
1972
- break;
1973
- }
1974
- }
1975
-
1976
- /**
1977
- * Assemble message headers.
1978
- * @access public
1979
- * @return string The assembled headers
1980
- */
1981
- public function createHeader()
1982
- {
1983
- $result = '';
1984
-
1985
- if ($this->MessageDate == '') {
1986
- $this->MessageDate = self::rfcDate();
1987
- }
1988
- $result .= $this->headerLine('Date', $this->MessageDate);
1989
-
1990
- // To be created automatically by mail()
1991
- if ($this->SingleTo) {
1992
- if ($this->Mailer != 'mail') {
1993
- foreach ($this->to as $toaddr) {
1994
- $this->SingleToArray[] = $this->addrFormat($toaddr);
1995
- }
1996
- }
1997
- } else {
1998
- if (count($this->to) > 0) {
1999
- if ($this->Mailer != 'mail') {
2000
- $result .= $this->addrAppend('To', $this->to);
2001
- }
2002
- } elseif (count($this->cc) == 0) {
2003
- $result .= $this->headerLine('To', 'undisclosed-recipients:;');
2004
- }
2005
- }
2006
-
2007
- $result .= $this->addrAppend('From', array(array(trim($this->From), $this->FromName)));
2008
-
2009
- // sendmail and mail() extract Cc from the header before sending
2010
- if (count($this->cc) > 0) {
2011
- $result .= $this->addrAppend('Cc', $this->cc);
2012
- }
2013
-
2014
- // sendmail and mail() extract Bcc from the header before sending
2015
- if ((
2016
- $this->Mailer == 'sendmail' or $this->Mailer == 'qmail' or $this->Mailer == 'mail'
2017
- )
2018
- and count($this->bcc) > 0
2019
- ) {
2020
- $result .= $this->addrAppend('Bcc', $this->bcc);
2021
- }
2022
-
2023
- if (count($this->ReplyTo) > 0) {
2024
- $result .= $this->addrAppend('Reply-To', $this->ReplyTo);
2025
- }
2026
-
2027
- // mail() sets the subject itself
2028
- if ($this->Mailer != 'mail') {
2029
- $result .= $this->headerLine('Subject', $this->encodeHeader($this->secureHeader($this->Subject)));
2030
- }
2031
-
2032
- // Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4
2033
- // https://tools.ietf.org/html/rfc5322#section-3.6.4
2034
- if ('' != $this->MessageID and preg_match('/^<.*@.*>$/', $this->MessageID)) {
2035
- $this->lastMessageID = $this->MessageID;
2036
- } else {
2037
- $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname());
2038
- }
2039
- $result .= $this->headerLine('Message-ID', $this->lastMessageID);
2040
- if (!is_null($this->Priority)) {
2041
- $result .= $this->headerLine('X-Priority', $this->Priority);
2042
- }
2043
- if ($this->XMailer == '') {
2044
- $result .= $this->headerLine(
2045
- 'X-Mailer',
2046
- 'PHPMailer ' . $this->Version . ' (https://github.com/PHPMailer/PHPMailer)'
2047
- );
2048
- } else {
2049
- $myXmailer = trim($this->XMailer);
2050
- if ($myXmailer) {
2051
- $result .= $this->headerLine('X-Mailer', $myXmailer);
2052
- }
2053
- }
2054
-
2055
- if ($this->ConfirmReadingTo != '') {
2056
- $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>');
2057
- }
2058
-
2059
- // Add custom headers
2060
- foreach ($this->CustomHeader as $header) {
2061
- $result .= $this->headerLine(
2062
- trim($header[0]),
2063
- $this->encodeHeader(trim($header[1]))
2064
- );
2065
- }
2066
- if (!$this->sign_key_file) {
2067
- $result .= $this->headerLine('MIME-Version', '1.0');
2068
- $result .= $this->getMailMIME();
2069
- }
2070
-
2071
- return $result;
2072
- }
2073
-
2074
- /**
2075
- * Get the message MIME type headers.
2076
- * @access public
2077
- * @return string
2078
- */
2079
- public function getMailMIME()
2080
- {
2081
- $result = '';
2082
- $ismultipart = true;
2083
- switch ($this->message_type) {
2084
- case 'inline':
2085
- $result .= $this->headerLine('Content-Type', 'multipart/related;');
2086
- $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
2087
- break;
2088
- case 'attach':
2089
- case 'inline_attach':
2090
- case 'alt_attach':
2091
- case 'alt_inline_attach':
2092
- $result .= $this->headerLine('Content-Type', 'multipart/mixed;');
2093
- $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
2094
- break;
2095
- case 'alt':
2096
- case 'alt_inline':
2097
- $result .= $this->headerLine('Content-Type', 'multipart/alternative;');
2098
- $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"');
2099
- break;
2100
- default:
2101
- // Catches case 'plain': and case '':
2102
- $result .= $this->textLine('Content-Type: ' . $this->ContentType . '; charset=' . $this->CharSet);
2103
- $ismultipart = false;
2104
- break;
2105
- }
2106
- // RFC1341 part 5 says 7bit is assumed if not specified
2107
- if ($this->Encoding != '7bit') {
2108
- // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE
2109
- if ($ismultipart) {
2110
- if ($this->Encoding == '8bit') {
2111
- $result .= $this->headerLine('Content-Transfer-Encoding', '8bit');
2112
- }
2113
- // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible
2114
- } else {
2115
- $result .= $this->headerLine('Content-Transfer-Encoding', $this->Encoding);
2116
- }
2117
- }
2118
-
2119
- if ($this->Mailer != 'mail') {
2120
- $result .= $this->LE;
2121
- }
2122
-
2123
- return $result;
2124
- }
2125
-
2126
- /**
2127
- * Returns the whole MIME message.
2128
- * Includes complete headers and body.
2129
- * Only valid post preSend().
2130
- * @see PHPMailer::preSend()
2131
- * @access public
2132
- * @return string
2133
- */
2134
- public function getSentMIMEMessage()
2135
- {
2136
- return rtrim($this->MIMEHeader . $this->mailHeader, "\n\r") . self::CRLF . self::CRLF . $this->MIMEBody;
2137
- }
2138
-
2139
- /**
2140
- * Create unique ID
2141
- * @return string
2142
- */
2143
- protected function generateId() {
2144
- return md5(uniqid(time()));
2145
- }
2146
-
2147
- /**
2148
- * Assemble the message body.
2149
- * Returns an empty string on failure.
2150
- * @access public
2151
- * @throws phpmailerException
2152
- * @return string The assembled message body
2153
- */
2154
- public function createBody()
2155
- {
2156
- $body = '';
2157
- //Create unique IDs and preset boundaries
2158
- $this->uniqueid = $this->generateId();
2159
- $this->boundary[1] = 'b1_' . $this->uniqueid;
2160
- $this->boundary[2] = 'b2_' . $this->uniqueid;
2161
- $this->boundary[3] = 'b3_' . $this->uniqueid;
2162
-
2163
- if ($this->sign_key_file) {
2164
- $body .= $this->getMailMIME() . $this->LE;
2165
- }
2166
-
2167
- $this->setWordWrap();
2168
-
2169
- $bodyEncoding = $this->Encoding;
2170
- $bodyCharSet = $this->CharSet;
2171
- //Can we do a 7-bit downgrade?
2172
- if ($bodyEncoding == '8bit' and !$this->has8bitChars($this->Body)) {
2173
- $bodyEncoding = '7bit';
2174
- //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
2175
- $bodyCharSet = 'us-ascii';
2176
- }
2177
- //If lines are too long, and we're not already using an encoding that will shorten them,
2178
- //change to quoted-printable transfer encoding for the body part only
2179
- if ('base64' != $this->Encoding and self::hasLineLongerThanMax($this->Body)) {
2180
- $bodyEncoding = 'quoted-printable';
2181
- }
2182
-
2183
- $altBodyEncoding = $this->Encoding;
2184
- $altBodyCharSet = $this->CharSet;
2185
- //Can we do a 7-bit downgrade?
2186
- if ($altBodyEncoding == '8bit' and !$this->has8bitChars($this->AltBody)) {
2187
- $altBodyEncoding = '7bit';
2188
- //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
2189
- $altBodyCharSet = 'us-ascii';
2190
- }
2191
- //If lines are too long, and we're not already using an encoding that will shorten them,
2192
- //change to quoted-printable transfer encoding for the alt body part only
2193
- if ('base64' != $altBodyEncoding and self::hasLineLongerThanMax($this->AltBody)) {
2194
- $altBodyEncoding = 'quoted-printable';
2195
- }
2196
- //Use this as a preamble in all multipart message types
2197
- $mimepre = "This is a multi-part message in MIME format." . $this->LE . $this->LE;
2198
- switch ($this->message_type) {
2199
- case 'inline':
2200
- $body .= $mimepre;
2201
- $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
2202
- $body .= $this->encodeString($this->Body, $bodyEncoding);
2203
- $body .= $this->LE . $this->LE;
2204
- $body .= $this->attachAll('inline', $this->boundary[1]);
2205
- break;
2206
- case 'attach':
2207
- $body .= $mimepre;
2208
- $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, '', $bodyEncoding);
2209
- $body .= $this->encodeString($this->Body, $bodyEncoding);
2210
- $body .= $this->LE . $this->LE;
2211
- $body .= $this->attachAll('attachment', $this->boundary[1]);
2212
- break;
2213
- case 'inline_attach':
2214
- $body .= $mimepre;
2215
- $body .= $this->textLine('--' . $this->boundary[1]);
2216
- $body .= $this->headerLine('Content-Type', 'multipart/related;');
2217
- $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
2218
- $body .= $this->LE;
2219
- $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding);
2220
- $body .= $this->encodeString($this->Body, $bodyEncoding);
2221
- $body .= $this->LE . $this->LE;
2222
- $body .= $this->attachAll('inline', $this->boundary[2]);
2223
- $body .= $this->LE;
2224
- $body .= $this->attachAll('attachment', $this->boundary[1]);
2225
- break;
2226
- case 'alt':
2227
- $body .= $mimepre;
2228
- $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding);
2229
- $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
2230
- $body .= $this->LE . $this->LE;
2231
- $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, 'text/html', $bodyEncoding);
2232
- $body .= $this->encodeString($this->Body, $bodyEncoding);
2233
- $body .= $this->LE . $this->LE;
2234
- if (!empty($this->Ical)) {
2235
- $body .= $this->getBoundary($this->boundary[1], '', 'text/calendar; method=REQUEST', '');
2236
- $body .= $this->encodeString($this->Ical, $this->Encoding);
2237
- $body .= $this->LE . $this->LE;
2238
- }
2239
- $body .= $this->endBoundary($this->boundary[1]);
2240
- break;
2241
- case 'alt_inline':
2242
- $body .= $mimepre;
2243
- $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, 'text/plain', $altBodyEncoding);
2244
- $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
2245
- $body .= $this->LE . $this->LE;
2246
- $body .= $this->textLine('--' . $this->boundary[1]);
2247
- $body .= $this->headerLine('Content-Type', 'multipart/related;');
2248
- $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
2249
- $body .= $this->LE;
2250
- $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding);
2251
- $body .= $this->encodeString($this->Body, $bodyEncoding);
2252
- $body .= $this->LE . $this->LE;
2253
- $body .= $this->attachAll('inline', $this->boundary[2]);
2254
- $body .= $this->LE;
2255
- $body .= $this->endBoundary($this->boundary[1]);
2256
- break;
2257
- case 'alt_attach':
2258
- $body .= $mimepre;
2259
- $body .= $this->textLine('--' . $this->boundary[1]);
2260
- $body .= $this->headerLine('Content-Type', 'multipart/alternative;');
2261
- $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
2262
- $body .= $this->LE;
2263
- $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding);
2264
- $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
2265
- $body .= $this->LE . $this->LE;
2266
- $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, 'text/html', $bodyEncoding);
2267
- $body .= $this->encodeString($this->Body, $bodyEncoding);
2268
- $body .= $this->LE . $this->LE;
2269
- $body .= $this->endBoundary($this->boundary[2]);
2270
- $body .= $this->LE;
2271
- $body .= $this->attachAll('attachment', $this->boundary[1]);
2272
- break;
2273
- case 'alt_inline_attach':
2274
- $body .= $mimepre;
2275
- $body .= $this->textLine('--' . $this->boundary[1]);
2276
- $body .= $this->headerLine('Content-Type', 'multipart/alternative;');
2277
- $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"');
2278
- $body .= $this->LE;
2279
- $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, 'text/plain', $altBodyEncoding);
2280
- $body .= $this->encodeString($this->AltBody, $altBodyEncoding);
2281
- $body .= $this->LE . $this->LE;
2282
- $body .= $this->textLine('--' . $this->boundary[2]);
2283
- $body .= $this->headerLine('Content-Type', 'multipart/related;');
2284
- $body .= $this->textLine("\tboundary=\"" . $this->boundary[3] . '"');
2285
- $body .= $this->LE;
2286
- $body .= $this->getBoundary($this->boundary[3], $bodyCharSet, 'text/html', $bodyEncoding);
2287
- $body .= $this->encodeString($this->Body, $bodyEncoding);
2288
- $body .= $this->LE . $this->LE;
2289
- $body .= $this->attachAll('inline', $this->boundary[3]);
2290
- $body .= $this->LE;
2291
- $body .= $this->endBoundary($this->boundary[2]);
2292
- $body .= $this->LE;
2293
- $body .= $this->attachAll('attachment', $this->boundary[1]);
2294
- break;
2295
- default:
2296
- // Catch case 'plain' and case '', applies to simple `text/plain` and `text/html` body content types
2297
- //Reset the `Encoding` property in case we changed it for line length reasons
2298
- $this->Encoding = $bodyEncoding;
2299
- $body .= $this->encodeString($this->Body, $this->Encoding);
2300
- break;
2301
- }
2302
-
2303
- if ($this->isError()) {
2304
- $body = '';
2305
- } elseif ($this->sign_key_file) {
2306
- try {
2307
- if (!defined('PKCS7_TEXT')) {
2308
- throw new phpmailerException($this->lang('extension_missing') . 'openssl');
2309
- }
2310
- // @TODO would be nice to use php://temp streams here, but need to wrap for PHP < 5.1
2311
- $file = tempnam(sys_get_temp_dir(), 'mail');
2312
- if (false === file_put_contents($file, $body)) {
2313
- throw new phpmailerException($this->lang('signing') . ' Could not write temp file');
2314
- }
2315
- $signed = tempnam(sys_get_temp_dir(), 'signed');
2316
- //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197
2317
- if (empty($this->sign_extracerts_file)) {
2318
- $sign = @openssl_pkcs7_sign(
2319
- $file,
2320
- $signed,
2321
- 'file://' . realpath($this->sign_cert_file),
2322
- array('file://' . realpath($this->sign_key_file), $this->sign_key_pass),
2323
- null
2324
- );
2325
- } else {
2326
- $sign = @openssl_pkcs7_sign(
2327
- $file,
2328
- $signed,
2329
- 'file://' . realpath($this->sign_cert_file),
2330
- array('file://' . realpath($this->sign_key_file), $this->sign_key_pass),
2331
- null,
2332
- PKCS7_DETACHED,
2333
- $this->sign_extracerts_file
2334
- );
2335
- }
2336
- if ($sign) {
2337
- @unlink($file);
2338
- $body = file_get_contents($signed);
2339
- @unlink($signed);
2340
- //The message returned by openssl contains both headers and body, so need to split them up
2341
- $parts = explode("\n\n", $body, 2);
2342
- $this->MIMEHeader .= $parts[0] . $this->LE . $this->LE;
2343
- $body = $parts[1];
2344
- } else {
2345
- @unlink($file);
2346
- @unlink($signed);
2347
- throw new phpmailerException($this->lang('signing') . openssl_error_string());
2348
- }
2349
- } catch (phpmailerException $exc) {
2350
- $body = '';
2351
- if ($this->exceptions) {
2352
- throw $exc;
2353
- }
2354
- }
2355
- }
2356
- return $body;
2357
- }
2358
-
2359
- /**
2360
- * Return the start of a message boundary.
2361
- * @access protected
2362
- * @param string $boundary
2363
- * @param string $charSet
2364
- * @param string $contentType
2365
- * @param string $encoding
2366
- * @return string
2367
- */
2368
- protected function getBoundary($boundary, $charSet, $contentType, $encoding)
2369
- {
2370
- $result = '';
2371
- if ($charSet == '') {
2372
- $charSet = $this->CharSet;
2373
- }
2374
- if ($contentType == '') {
2375
- $contentType = $this->ContentType;
2376
- }
2377
- if ($encoding == '') {
2378
- $encoding = $this->Encoding;
2379
- }
2380
- $result .= $this->textLine('--' . $boundary);
2381
- $result .= sprintf('Content-Type: %s; charset=%s', $contentType, $charSet);
2382
- $result .= $this->LE;
2383
- // RFC1341 part 5 says 7bit is assumed if not specified
2384
- if ($encoding != '7bit') {
2385
- $result .= $this->headerLine('Content-Transfer-Encoding', $encoding);
2386
- }
2387
- $result .= $this->LE;
2388
-
2389
- return $result;
2390
- }
2391
-
2392
- /**
2393
- * Return the end of a message boundary.
2394
- * @access protected
2395
- * @param string $boundary
2396
- * @return string
2397
- */
2398
- protected function endBoundary($boundary)
2399
- {
2400
- return $this->LE . '--' . $boundary . '--' . $this->LE;
2401
- }
2402
-
2403
- /**
2404
- * Set the message type.
2405
- * PHPMailer only supports some preset message types, not arbitrary MIME structures.
2406
- * @access protected
2407
- * @return void
2408
- */
2409
- protected function setMessageType()
2410
- {
2411
- $type = array();
2412
- if ($this->alternativeExists()) {
2413
- $type[] = 'alt';
2414
- }
2415
- if ($this->inlineImageExists()) {
2416
- $type[] = 'inline';
2417
- }
2418
- if ($this->attachmentExists()) {
2419
- $type[] = 'attach';
2420
- }
2421
- $this->message_type = implode('_', $type);
2422
- if ($this->message_type == '') {
2423
- //The 'plain' message_type refers to the message having a single body element, not that it is plain-text
2424
- $this->message_type = 'plain';
2425
- }
2426
- }
2427
-
2428
- /**
2429
- * Format a header line.
2430
- * @access public
2431
- * @param string $name
2432
- * @param string $value
2433
- * @return string
2434
- */
2435
- public function headerLine($name, $value)
2436
- {
2437
- return $name . ': ' . $value . $this->LE;
2438
- }
2439
-
2440
- /**
2441
- * Return a formatted mail line.
2442
- * @access public
2443
- * @param string $value
2444
- * @return string
2445
- */
2446
- public function textLine($value)
2447
- {
2448
- return $value . $this->LE;
2449
- }
2450
-
2451
- /**
2452
- * Add an attachment from a path on the filesystem.
2453
- * Returns false if the file could not be found or read.
2454
- * @param string $path Path to the attachment.
2455
- * @param string $name Overrides the attachment name.
2456
- * @param string $encoding File encoding (see $Encoding).
2457
- * @param string $type File extension (MIME) type.
2458
- * @param string $disposition Disposition to use
2459
- * @throws phpmailerException
2460
- * @return boolean
2461
- */
2462
- public function addAttachment($path, $name = '', $encoding = 'base64', $type = '', $disposition = 'attachment')
2463
- {
2464
- try {
2465
- if (!@is_file($path)) {
2466
- throw new phpmailerException($this->lang('file_access') . $path, self::STOP_CONTINUE);
2467
- }
2468
-
2469
- // If a MIME type is not specified, try to work it out from the file name
2470
- if ($type == '') {
2471
- $type = self::filenameToType($path);
2472
- }
2473
-
2474
- $filename = basename($path);
2475
- if ($name == '') {
2476
- $name = $filename;
2477
- }
2478
-
2479
- $this->attachment[] = array(
2480
- 0 => $path,
2481
- 1 => $filename,
2482
- 2 => $name,
2483
- 3 => $encoding,
2484
- 4 => $type,
2485
- 5 => false, // isStringAttachment
2486
- 6 => $disposition,
2487
- 7 => 0
2488
- );
2489
-
2490
- } catch (phpmailerException $exc) {
2491
- $this->setError($exc->getMessage());
2492
- $this->edebug($exc->getMessage());
2493
- if ($this->exceptions) {
2494
- throw $exc;
2495
- }
2496
- return false;
2497
- }
2498
- return true;
2499
- }
2500
-
2501
- /**
2502
- * Return the array of attachments.
2503
- * @return array
2504
- */
2505
- public function getAttachments()
2506
- {
2507
- return $this->attachment;
2508
- }
2509
-
2510
- /**
2511
- * Attach all file, string, and binary attachments to the message.
2512
- * Returns an empty string on failure.
2513
- * @access protected
2514
- * @param string $disposition_type
2515
- * @param string $boundary
2516
- * @return string
2517
- */
2518
- protected function attachAll($disposition_type, $boundary)
2519
- {
2520
- // Return text of body
2521
- $mime = array();
2522
- $cidUniq = array();
2523
- $incl = array();
2524
-
2525
- // Add all attachments
2526
- foreach ($this->attachment as $attachment) {
2527
- // Check if it is a valid disposition_filter
2528
- if ($attachment[6] == $disposition_type) {
2529
- // Check for string attachment
2530
- $string = '';
2531
- $path = '';
2532
- $bString = $attachment[5];
2533
- if ($bString) {
2534
- $string = $attachment[0];
2535
- } else {
2536
- $path = $attachment[0];
2537
- }
2538
-
2539
- $inclhash = md5(serialize($attachment));
2540
- if (in_array($inclhash, $incl)) {
2541
- continue;
2542
- }
2543
- $incl[] = $inclhash;
2544
- $name = $attachment[2];
2545
- $encoding = $attachment[3];
2546
- $type = $attachment[4];
2547
- $disposition = $attachment[6];
2548
- $cid = $attachment[7];
2549
- if ($disposition == 'inline' && array_key_exists($cid, $cidUniq)) {
2550
- continue;
2551
- }
2552
- $cidUniq[$cid] = true;
2553
-
2554
- $mime[] = sprintf('--%s%s', $boundary, $this->LE);
2555
- //Only include a filename property if we have one
2556
- if (!empty($name)) {
2557
- $mime[] = sprintf(
2558
- 'Content-Type: %s; name="%s"%s',
2559
- $type,
2560
- $this->encodeHeader($this->secureHeader($name)),
2561
- $this->LE
2562
- );
2563
- } else {
2564
- $mime[] = sprintf(
2565
- 'Content-Type: %s%s',
2566
- $type,
2567
- $this->LE
2568
- );
2569
- }
2570
- // RFC1341 part 5 says 7bit is assumed if not specified
2571
- if ($encoding != '7bit') {
2572
- $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, $this->LE);
2573
- }
2574
-
2575
- if ($disposition == 'inline') {
2576
- $mime[] = sprintf('Content-ID: <%s>%s', $cid, $this->LE);
2577
- }
2578
-
2579
- // If a filename contains any of these chars, it should be quoted,
2580
- // but not otherwise: RFC2183 & RFC2045 5.1
2581
- // Fixes a warning in IETF's msglint MIME checker
2582
- // Allow for bypassing the Content-Disposition header totally
2583
- if (!(empty($disposition))) {
2584
- $encoded_name = $this->encodeHeader($this->secureHeader($name));
2585
- if (preg_match('/[ \(\)<>@,;:\\"\/\[\]\?=]/', $encoded_name)) {
2586
- $mime[] = sprintf(
2587
- 'Content-Disposition: %s; filename="%s"%s',
2588
- $disposition,
2589
- $encoded_name,
2590
- $this->LE . $this->LE
2591
- );
2592
- } else {
2593
- if (!empty($encoded_name)) {
2594
- $mime[] = sprintf(
2595
- 'Content-Disposition: %s; filename=%s%s',
2596
- $disposition,
2597
- $encoded_name,
2598
- $this->LE . $this->LE
2599
- );
2600
- } else {
2601
- $mime[] = sprintf(
2602
- 'Content-Disposition: %s%s',
2603
- $disposition,
2604
- $this->LE . $this->LE
2605
- );
2606
- }
2607
- }
2608
- } else {
2609
- $mime[] = $this->LE;
2610
- }
2611
-
2612
- // Encode as string attachment
2613
- if ($bString) {
2614
- $mime[] = $this->encodeString($string, $encoding);
2615
- if ($this->isError()) {
2616
- return '';
2617
- }
2618
- $mime[] = $this->LE . $this->LE;
2619
- } else {
2620
- $mime[] = $this->encodeFile($path, $encoding);
2621
- if ($this->isError()) {
2622
- return '';
2623
- }
2624
- $mime[] = $this->LE . $this->LE;
2625
- }
2626
- }
2627
- }
2628
-
2629
- $mime[] = sprintf('--%s--%s', $boundary, $this->LE);
2630
-
2631
- return implode('', $mime);
2632
- }
2633
-
2634
- /**
2635
- * Encode a file attachment in requested format.
2636
- * Returns an empty string on failure.
2637
- * @param string $path The full path to the file
2638
- * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
2639
- * @throws phpmailerException
2640
- * @access protected
2641
- * @return string
2642
- */
2643
- protected function encodeFile($path, $encoding = 'base64')
2644
- {
2645
- try {
2646
- if (!is_readable($path)) {
2647
- throw new phpmailerException($this->lang('file_open') . $path, self::STOP_CONTINUE);
2648
- }
2649
- $magic_quotes = get_magic_quotes_runtime();
2650
- if ($magic_quotes) {
2651
- if (version_compare(PHP_VERSION, '5.3.0', '<')) {
2652
- set_magic_quotes_runtime(false);
2653
- } else {
2654
- //Doesn't exist in PHP 5.4, but we don't need to check because
2655
- //get_magic_quotes_runtime always returns false in 5.4+
2656
- //so it will never get here
2657
- ini_set('magic_quotes_runtime', false);
2658
- }
2659
- }
2660
- $file_buffer = file_get_contents($path);
2661
- $file_buffer = $this->encodeString($file_buffer, $encoding);
2662
- if ($magic_quotes) {
2663
- if (version_compare(PHP_VERSION, '5.3.0', '<')) {
2664
- set_magic_quotes_runtime($magic_quotes);
2665
- } else {
2666
- ini_set('magic_quotes_runtime', $magic_quotes);
2667
- }
2668
- }
2669
- return $file_buffer;
2670
- } catch (Exception $exc) {
2671
- $this->setError($exc->getMessage());
2672
- return '';
2673
- }
2674
- }
2675
-
2676
- /**
2677
- * Encode a string in requested format.
2678
- * Returns an empty string on failure.
2679
- * @param string $str The text to encode
2680
- * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable'
2681
- * @access public
2682
- * @return string
2683
- */
2684
- public function encodeString($str, $encoding = 'base64')
2685
- {
2686
- $encoded = '';
2687
- switch (strtolower($encoding)) {
2688
- case 'base64':
2689
- $encoded = chunk_split(base64_encode($str), 76, $this->LE);
2690
- break;
2691
- case '7bit':
2692
- case '8bit':
2693
- $encoded = $this->fixEOL($str);
2694
- // Make sure it ends with a line break
2695
- if (substr($encoded, -(strlen($this->LE))) != $this->LE) {
2696
- $encoded .= $this->LE;
2697
- }
2698
- break;
2699
- case 'binary':
2700
- $encoded = $str;
2701
- break;
2702
- case 'quoted-printable':
2703
- $encoded = $this->encodeQP($str);
2704
- break;
2705
- default:
2706
- $this->setError($this->lang('encoding') . $encoding);
2707
- break;
2708
- }
2709
- return $encoded;
2710
- }
2711
-
2712
- /**
2713
- * Encode a header string optimally.
2714
- * Picks shortest of Q, B, quoted-printable or none.
2715
- * @access public
2716
- * @param string $str
2717
- * @param string $position
2718
- * @return string
2719
- */
2720
- public function encodeHeader($str, $position = 'text')
2721
- {
2722
- $matchcount = 0;
2723
- switch (strtolower($position)) {
2724
- case 'phrase':
2725
- if (!preg_match('/[\200-\377]/', $str)) {
2726
- // Can't use addslashes as we don't know the value of magic_quotes_sybase
2727
- $encoded = addcslashes($str, "\0..\37\177\\\"");
2728
- if (($str == $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) {
2729
- return ($encoded);
2730
- } else {
2731
- return ("\"$encoded\"");
2732
- }
2733
- }
2734
- $matchcount = preg_match_all('/[^\040\041\043-\133\135-\176]/', $str, $matches);
2735
- break;
2736
- /** @noinspection PhpMissingBreakStatementInspection */
2737
- case 'comment':
2738
- $matchcount = preg_match_all('/[()"]/', $str, $matches);
2739
- // Intentional fall-through
2740
- case 'text':
2741
- default:
2742
- $matchcount += preg_match_all('/[\000-\010\013\014\016-\037\177-\377]/', $str, $matches);
2743
- break;
2744
- }
2745
-
2746
- //There are no chars that need encoding
2747
- if ($matchcount == 0) {
2748
- return ($str);
2749
- }
2750
-
2751
- $maxlen = 75 - 7 - strlen($this->CharSet);
2752
- // Try to select the encoding which should produce the shortest output
2753
- if ($matchcount > strlen($str) / 3) {
2754
- // More than a third of the content will need encoding, so B encoding will be most efficient
2755
- $encoding = 'B';
2756
- if (function_exists('mb_strlen') && $this->hasMultiBytes($str)) {
2757
- // Use a custom function which correctly encodes and wraps long
2758
- // multibyte strings without breaking lines within a character
2759
- $encoded = $this->base64EncodeWrapMB($str, "\n");
2760
- } else {
2761
- $encoded = base64_encode($str);
2762
- $maxlen -= $maxlen % 4;
2763
- $encoded = trim(chunk_split($encoded, $maxlen, "\n"));
2764
- }
2765
- } else {
2766
- $encoding = 'Q';
2767
- $encoded = $this->encodeQ($str, $position);
2768
- $encoded = $this->wrapText($encoded, $maxlen, true);
2769
- $encoded = str_replace('=' . self::CRLF, "\n", trim($encoded));
2770
- }
2771
-
2772
- $encoded = preg_replace('/^(.*)$/m', ' =?' . $this->CharSet . "?$encoding?\\1?=", $encoded);
2773
- $encoded = trim(str_replace("\n", $this->LE, $encoded));
2774
-
2775
- return $encoded;
2776
- }
2777
-
2778
- /**
2779
- * Check if a string contains multi-byte characters.
2780
- * @access public
2781
- * @param string $str multi-byte text to wrap encode
2782
- * @return boolean
2783
- */
2784
- public function hasMultiBytes($str)
2785
- {
2786
- if (function_exists('mb_strlen')) {
2787
- return (strlen($str) > mb_strlen($str, $this->CharSet));
2788
- } else { // Assume no multibytes (we can't handle without mbstring functions anyway)
2789
- return false;
2790
- }
2791
- }
2792
-
2793
- /**
2794
- * Does a string contain any 8-bit chars (in any charset)?
2795
- * @param string $text
2796
- * @return boolean
2797
- */
2798
- public function has8bitChars($text)
2799
- {
2800
- return (boolean)preg_match('/[\x80-\xFF]/', $text);
2801
- }
2802
-
2803
- /**
2804
- * Encode and wrap long multibyte strings for mail headers
2805
- * without breaking lines within a character.
2806
- * Adapted from a function by paravoid
2807
- * @link http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
2808
- * @access public
2809
- * @param string $str multi-byte text to wrap encode
2810
- * @param string $linebreak string to use as linefeed/end-of-line
2811
- * @return string
2812
- */
2813
- public function base64EncodeWrapMB($str, $linebreak = null)
2814
- {
2815
- $start = '=?' . $this->CharSet . '?B?';
2816
- $end = '?=';
2817
- $encoded = '';
2818
- if ($linebreak === null) {
2819
- $linebreak = $this->LE;
2820
- }
2821
-
2822
- $mb_length = mb_strlen($str, $this->CharSet);
2823
- // Each line must have length <= 75, including $start and $end
2824
- $length = 75 - strlen($start) - strlen($end);
2825
- // Average multi-byte ratio
2826
- $ratio = $mb_length / strlen($str);
2827
- // Base64 has a 4:3 ratio
2828
- $avgLength = floor($length * $ratio * .75);
2829
-
2830
- for ($i = 0; $i < $mb_length; $i += $offset) {
2831
- $lookBack = 0;
2832
- do {
2833
- $offset = $avgLength - $lookBack;
2834
- $chunk = mb_substr($str, $i, $offset, $this->CharSet);
2835
- $chunk = base64_encode($chunk);
2836
- $lookBack++;
2837
- } while (strlen($chunk) > $length);
2838
- $encoded .= $chunk . $linebreak;
2839
- }
2840
-
2841
- // Chomp the last linefeed
2842
- $encoded = substr($encoded, 0, -strlen($linebreak));
2843
- return $encoded;
2844
- }
2845
-
2846
- /**
2847
- * Encode a string in quoted-printable format.
2848
- * According to RFC2045 section 6.7.
2849
- * @access public
2850
- * @param string $string The text to encode
2851
- * @param integer $line_max Number of chars allowed on a line before wrapping
2852
- * @return string
2853
- * @link http://www.php.net/manual/en/function.quoted-printable-decode.php#89417 Adapted from this comment
2854
- */
2855
- public function encodeQP($string, $line_max = 76)
2856
- {
2857
- // Use native function if it's available (>= PHP5.3)
2858
- if (function_exists('quoted_printable_encode')) {
2859
- return quoted_printable_encode($string);
2860
- }
2861
- // Fall back to a pure PHP implementation
2862
- $string = str_replace(
2863
- array('%20', '%0D%0A.', '%0D%0A', '%'),
2864
- array(' ', "\r\n=2E", "\r\n", '='),
2865
- rawurlencode($string)
2866
- );
2867
- return preg_replace('/[^\r\n]{' . ($line_max - 3) . '}[^=\r\n]{2}/', "$0=\r\n", $string);
2868
- }
2869
-
2870
- /**
2871
- * Backward compatibility wrapper for an old QP encoding function that was removed.
2872
- * @see PHPMailer::encodeQP()
2873
- * @access public
2874
- * @param string $string
2875
- * @param integer $line_max
2876
- * @param boolean $space_conv
2877
- * @return string
2878
- * @deprecated Use encodeQP instead.
2879
- */
2880
- public function encodeQPphp(
2881
- $string,
2882
- $line_max = 76,
2883
- /** @noinspection PhpUnusedParameterInspection */ $space_conv = false
2884
- ) {
2885
- return $this->encodeQP($string, $line_max);
2886
- }
2887
-
2888
- /**
2889
- * Encode a string using Q encoding.
2890
- * @link http://tools.ietf.org/html/rfc2047
2891
- * @param string $str the text to encode
2892
- * @param string $position Where the text is going to be used, see the RFC for what that means
2893
- * @access public
2894
- * @return string
2895
- */
2896
- public function encodeQ($str, $position = 'text')
2897
- {
2898
- // There should not be any EOL in the string
2899
- $pattern = '';
2900
- $encoded = str_replace(array("\r", "\n"), '', $str);
2901
- switch (strtolower($position)) {
2902
- case 'phrase':
2903
- // RFC 2047 section 5.3
2904
- $pattern = '^A-Za-z0-9!*+\/ -';
2905
- break;
2906
- /** @noinspection PhpMissingBreakStatementInspection */
2907
- case 'comment':
2908
- // RFC 2047 section 5.2
2909
- $pattern = '\(\)"';
2910
- // intentional fall-through
2911
- // for this reason we build the $pattern without including delimiters and []
2912
- case 'text':
2913
- default:
2914
- // RFC 2047 section 5.1
2915
- // Replace every high ascii, control, =, ? and _ characters
2916
- $pattern = '\000-\011\013\014\016-\037\075\077\137\177-\377' . $pattern;
2917
- break;
2918
- }
2919
- $matches = array();
2920
- if (preg_match_all("/[{$pattern}]/", $encoded, $matches)) {
2921
- // If the string contains an '=', make sure it's the first thing we replace
2922
- // so as to avoid double-encoding
2923
- $eqkey = array_search('=', $matches[0]);
2924
- if (false !== $eqkey) {
2925
- unset($matches[0][$eqkey]);
2926
- array_unshift($matches[0], '=');
2927
- }
2928
- foreach (array_unique($matches[0]) as $char) {
2929
- $encoded = str_replace($char, '=' . sprintf('%02X', ord($char)), $encoded);
2930
- }
2931
- }
2932
- // Replace every spaces to _ (more readable than =20)
2933
- return str_replace(' ', '_', $encoded);
2934
- }
2935
-
2936
- /**
2937
- * Add a string or binary attachment (non-filesystem).
2938
- * This method can be used to attach ascii or binary data,
2939
- * such as a BLOB record from a database.
2940
- * @param string $string String attachment data.
2941
- * @param string $filename Name of the attachment.
2942
- * @param string $encoding File encoding (see $Encoding).
2943
- * @param string $type File extension (MIME) type.
2944
- * @param string $disposition Disposition to use
2945
- * @return void
2946
- */
2947
- public function addStringAttachment(
2948
- $string,
2949
- $filename,
2950
- $encoding = 'base64',
2951
- $type = '',
2952
- $disposition = 'attachment'
2953
- ) {
2954
- // If a MIME type is not specified, try to work it out from the file name
2955
- if ($type == '') {
2956
- $type = self::filenameToType($filename);
2957
- }
2958
- // Append to $attachment array
2959
- $this->attachment[] = array(
2960
- 0 => $string,
2961
- 1 => $filename,
2962
- 2 => basename($filename),
2963
- 3 => $encoding,
2964
- 4 => $type,
2965
- 5 => true, // isStringAttachment
2966
- 6 => $disposition,
2967
- 7 => 0
2968
- );
2969
- }
2970
-
2971
- /**
2972
- * Add an embedded (inline) attachment from a file.
2973
- * This can include images, sounds, and just about any other document type.
2974
- * These differ from 'regular' attachments in that they are intended to be
2975
- * displayed inline with the message, not just attached for download.
2976
- * This is used in HTML messages that embed the images
2977
- * the HTML refers to using the $cid value.
2978
- * @param string $path Path to the attachment.
2979
- * @param string $cid Content ID of the attachment; Use this to reference
2980
- * the content when using an embedded image in HTML.
2981
- * @param string $name Overrides the attachment name.
2982
- * @param string $encoding File encoding (see $Encoding).
2983
- * @param string $type File MIME type.
2984
- * @param string $disposition Disposition to use
2985
- * @return boolean True on successfully adding an attachment
2986
- */
2987
- public function addEmbeddedImage($path, $cid, $name = '', $encoding = 'base64', $type = '', $disposition = 'inline')
2988
- {
2989
- if (!@is_file($path)) {
2990
- $this->setError($this->lang('file_access') . $path);
2991
- return false;
2992
- }
2993
-
2994
- // If a MIME type is not specified, try to work it out from the file name
2995
- if ($type == '') {
2996
- $type = self::filenameToType($path);
2997
- }
2998
-
2999
- $filename = basename($path);
3000
- if ($name == '') {
3001
- $name = $filename;
3002
- }
3003
-
3004
- // Append to $attachment array
3005
- $this->attachment[] = array(
3006
- 0 => $path,
3007
- 1 => $filename,
3008
- 2 => $name,
3009
- 3 => $encoding,
3010
- 4 => $type,
3011
- 5 => false, // isStringAttachment
3012
- 6 => $disposition,
3013
- 7 => $cid
3014
- );
3015
- return true;
3016
- }
3017
-
3018
- /**
3019
- * Add an embedded stringified attachment.
3020
- * This can include images, sounds, and just about any other document type.
3021
- * Be sure to set the $type to an image type for images:
3022
- * JPEG images use 'image/jpeg', GIF uses 'image/gif', PNG uses 'image/png'.
3023
- * @param string $string The attachment binary data.
3024
- * @param string $cid Content ID of the attachment; Use this to reference
3025
- * the content when using an embedded image in HTML.
3026
- * @param string $name
3027
- * @param string $encoding File encoding (see $Encoding).
3028
- * @param string $type MIME type.
3029
- * @param string $disposition Disposition to use
3030
- * @return boolean True on successfully adding an attachment
3031
- */
3032
- public function addStringEmbeddedImage(
3033
- $string,
3034
- $cid,
3035
- $name = '',
3036
- $encoding = 'base64',
3037
- $type = '',
3038
- $disposition = 'inline'
3039
- ) {
3040
- // If a MIME type is not specified, try to work it out from the name
3041
- if ($type == '' and !empty($name)) {
3042
- $type = self::filenameToType($name);
3043
- }
3044
-
3045
- // Append to $attachment array
3046
- $this->attachment[] = array(
3047
- 0 => $string,
3048
- 1 => $name,
3049
- 2 => $name,
3050
- 3 => $encoding,
3051
- 4 => $type,
3052
- 5 => true, // isStringAttachment
3053
- 6 => $disposition,
3054
- 7 => $cid
3055
- );
3056
- return true;
3057
- }
3058
-
3059
- /**
3060
- * Check if an inline attachment is present.
3061
- * @access public
3062
- * @return boolean
3063
- */
3064
- public function inlineImageExists()
3065
- {
3066
- foreach ($this->attachment as $attachment) {
3067
- if ($attachment[6] == 'inline') {
3068
- return true;
3069
- }
3070
- }
3071
- return false;
3072
- }
3073
-
3074
- /**
3075
- * Check if an attachment (non-inline) is present.
3076
- * @return boolean
3077
- */
3078
- public function attachmentExists()
3079
- {
3080
- foreach ($this->attachment as $attachment) {
3081
- if ($attachment[6] == 'attachment') {
3082
- return true;
3083
- }
3084
- }
3085
- return false;
3086
- }
3087
-
3088
- /**
3089
- * Check if this message has an alternative body set.
3090
- * @return boolean
3091
- */
3092
- public function alternativeExists()
3093
- {
3094
- return !empty($this->AltBody);
3095
- }
3096
-
3097
- /**
3098
- * Clear queued addresses of given kind.
3099
- * @access protected
3100
- * @param string $kind 'to', 'cc', or 'bcc'
3101
- * @return void
3102
- */
3103
- public function clearQueuedAddresses($kind)
3104
- {
3105
- $RecipientsQueue = $this->RecipientsQueue;
3106
- foreach ($RecipientsQueue as $address => $params) {
3107
- if ($params[0] == $kind) {
3108
- unset($this->RecipientsQueue[$address]);
3109
- }
3110
- }
3111
- }
3112
-
3113
- /**
3114
- * Clear all To recipients.
3115
- * @return void
3116
- */
3117
- public function clearAddresses()
3118
- {
3119
- foreach ($this->to as $to) {
3120
- unset($this->all_recipients[strtolower($to[0])]);
3121
- }
3122
- $this->to = array();
3123
- $this->clearQueuedAddresses('to');
3124
- }
3125
-
3126
- /**
3127
- * Clear all CC recipients.
3128
- * @return void
3129
- */
3130
- public function clearCCs()
3131
- {
3132
- foreach ($this->cc as $cc) {
3133
- unset($this->all_recipients[strtolower($cc[0])]);
3134
- }
3135
- $this->cc = array();
3136
- $this->clearQueuedAddresses('cc');
3137
- }
3138
-
3139
- /**
3140
- * Clear all BCC recipients.
3141
- * @return void
3142
- */
3143
- public function clearBCCs()
3144
- {
3145
- foreach ($this->bcc as $bcc) {
3146
- unset($this->all_recipients[strtolower($bcc[0])]);
3147
- }
3148
- $this->bcc = array();
3149
- $this->clearQueuedAddresses('bcc');
3150
- }
3151
-
3152
- /**
3153
- * Clear all ReplyTo recipients.
3154
- * @return void
3155
- */
3156
- public function clearReplyTos()
3157
- {
3158
- $this->ReplyTo = array();
3159
- $this->ReplyToQueue = array();
3160
- }
3161
-
3162
- /**
3163
- * Clear all recipient types.
3164
- * @return void
3165
- */
3166
- public function clearAllRecipients()
3167
- {
3168
- $this->to = array();
3169
- $this->cc = array();
3170
- $this->bcc = array();
3171
- $this->all_recipients = array();
3172
- $this->RecipientsQueue = array();
3173
- }
3174
-
3175
- /**
3176
- * Clear all filesystem, string, and binary attachments.
3177
- * @return void
3178
- */
3179
- public function clearAttachments()
3180
- {
3181
- $this->attachment = array();
3182
- }
3183
-
3184
- /**
3185
- * Clear all custom headers.
3186
- * @return void
3187
- */
3188
- public function clearCustomHeaders()
3189
- {
3190
- $this->CustomHeader = array();
3191
- }
3192
-
3193
- /**
3194
- * Add an error message to the error container.
3195
- * @access protected
3196
- * @param string $msg
3197
- * @return void
3198
- */
3199
- protected function setError($msg)
3200
- {
3201
- $this->error_count++;
3202
- if ($this->Mailer == 'smtp' and !is_null($this->smtp)) {
3203
- $lasterror = $this->smtp->getError();
3204
- if (!empty($lasterror['error'])) {
3205
- $msg .= $this->lang('smtp_error') . $lasterror['error'];
3206
- if (!empty($lasterror['detail'])) {
3207
- $msg .= ' Detail: '. $lasterror['detail'];
3208
- }
3209
- if (!empty($lasterror['smtp_code'])) {
3210
- $msg .= ' SMTP code: ' . $lasterror['smtp_code'];
3211
- }
3212
- if (!empty($lasterror['smtp_code_ex'])) {
3213
- $msg .= ' Additional SMTP info: ' . $lasterror['smtp_code_ex'];
3214
- }
3215
- }
3216
- }
3217
- $this->ErrorInfo = $msg;
3218
- }
3219
-
3220
- /**
3221
- * Return an RFC 822 formatted date.
3222
- * @access public
3223
- * @return string
3224
- * @static
3225
- */
3226
- public static function rfcDate()
3227
- {
3228
- // Set the time zone to whatever the default is to avoid 500 errors
3229
- // Will default to UTC if it's not set properly in php.ini
3230
- date_default_timezone_set(@date_default_timezone_get());
3231
- return date('D, j M Y H:i:s O');
3232
- }
3233
-
3234
- /**
3235
- * Get the server hostname.
3236
- * Returns 'localhost.localdomain' if unknown.
3237
- * @access protected
3238
- * @return string
3239
- */
3240
- protected function serverHostname()
3241
- {
3242
- $result = 'localhost.localdomain';
3243
- if (!empty($this->Hostname)) {
3244
- $result = $this->Hostname;
3245
- } elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER) and !empty($_SERVER['SERVER_NAME'])) {
3246
- $result = $_SERVER['SERVER_NAME'];
3247
- } elseif (function_exists('gethostname') && gethostname() !== false) {
3248
- $result = gethostname();
3249
- } elseif (php_uname('n') !== false) {
3250
- $result = php_uname('n');
3251
- }
3252
- return $result;
3253
- }
3254
-
3255
- /**
3256
- * Get an error message in the current language.
3257
- * @access protected
3258
- * @param string $key
3259
- * @return string
3260
- */
3261
- protected function lang($key)
3262
- {
3263
- if (count($this->language) < 1) {
3264
- $this->setLanguage('en'); // set the default language
3265
- }
3266
-
3267
- if (array_key_exists($key, $this->language)) {
3268
- if ($key == 'smtp_connect_failed') {
3269
- //Include a link to troubleshooting docs on SMTP connection failure
3270
- //this is by far the biggest cause of support questions
3271
- //but it's usually not PHPMailer's fault.
3272
- return $this->language[$key] . ' https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting';
3273
- }
3274
- return $this->language[$key];
3275
- } else {
3276
- //Return the key as a fallback
3277
- return $key;
3278
- }
3279
- }
3280
-
3281
- /**
3282
- * Check if an error occurred.
3283
- * @access public
3284
- * @return boolean True if an error did occur.
3285
- */
3286
- public function isError()
3287
- {
3288
- return ($this->error_count > 0);
3289
- }
3290
-
3291
- /**
3292
- * Ensure consistent line endings in a string.
3293
- * Changes every end of line from CRLF, CR or LF to $this->LE.
3294
- * @access public
3295
- * @param string $str String to fixEOL
3296
- * @return string
3297
- */
3298
- public function fixEOL($str)
3299
- {
3300
- // Normalise to \n
3301
- $nstr = str_replace(array("\r\n", "\r"), "\n", $str);
3302
- // Now convert LE as needed
3303
- if ($this->LE !== "\n") {
3304
- $nstr = str_replace("\n", $this->LE, $nstr);
3305
- }
3306
- return $nstr;
3307
- }
3308
-
3309
- /**
3310
- * Add a custom header.
3311
- * $name value can be overloaded to contain
3312
- * both header name and value (name:value)
3313
- * @access public
3314
- * @param string $name Custom header name
3315
- * @param string $value Header value
3316
- * @return void
3317
- */
3318
- public function addCustomHeader($name, $value = null)
3319
- {
3320
- if ($value === null) {
3321
- // Value passed in as name:value
3322
- $this->CustomHeader[] = explode(':', $name, 2);
3323
- } else {
3324
- $this->CustomHeader[] = array($name, $value);
3325
- }
3326
- }
3327
-
3328
- /**
3329
- * Returns all custom headers.
3330
- * @return array
3331
- */
3332
- public function getCustomHeaders()
3333
- {
3334
- return $this->CustomHeader;
3335
- }
3336
-
3337
- /**
3338
- * Create a message body from an HTML string.
3339
- * Automatically inlines images and creates a plain-text version by converting the HTML,
3340
- * overwriting any existing values in Body and AltBody.
3341
- * $basedir is used when handling relative image paths, e.g. <img src="images/a.png">
3342
- * will look for an image file in $basedir/images/a.png and convert it to inline.
3343
- * If you don't want to apply these transformations to your HTML, just set Body and AltBody yourself.
3344
- * @access public
3345
- * @param string $message HTML message string
3346
- * @param string $basedir base directory for relative paths to images
3347
- * @param boolean|callable $advanced Whether to use the internal HTML to text converter
3348
- * or your own custom converter @see PHPMailer::html2text()
3349
- * @return string $message The transformed message Body
3350
- */
3351
- public function msgHTML($message, $basedir = '', $advanced = false)
3352
- {
3353
- preg_match_all('/(src|background)=["\'](.*)["\']/Ui', $message, $images);
3354
- if (array_key_exists(2, $images)) {
3355
- foreach ($images[2] as $imgindex => $url) {
3356
- // Convert data URIs into embedded images
3357
- if (preg_match('#^data:(image[^;,]*)(;base64)?,#', $url, $match)) {
3358
- $data = substr($url, strpos($url, ','));
3359
- if ($match[2]) {
3360
- $data = base64_decode($data);
3361
- } else {
3362
- $data = rawurldecode($data);
3363
- }
3364
- $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2
3365
- if ($this->addStringEmbeddedImage($data, $cid, 'embed' . $imgindex, 'base64', $match[1])) {
3366
- $message = str_replace(
3367
- $images[0][$imgindex],
3368
- $images[1][$imgindex] . '="cid:' . $cid . '"',
3369
- $message
3370
- );
3371
- }
3372
- } elseif (substr($url, 0, 4) !== 'cid:' && !preg_match('#^[a-z][a-z0-9+.-]*://#i', $url)) {
3373
- // Do not change urls for absolute images (thanks to corvuscorax)
3374
- // Do not change urls that are already inline images
3375
- $filename = basename($url);
3376
- $directory = dirname($url);
3377
- if ($directory == '.') {
3378
- $directory = '';
3379
- }
3380
- $cid = md5($url) . '@phpmailer.0'; // RFC2392 S 2
3381
- if (strlen($basedir) > 1 && substr($basedir, -1) != '/') {
3382
- $basedir .= '/';
3383
- }
3384
- if (strlen($directory) > 1 && substr($directory, -1) != '/') {
3385
- $directory .= '/';
3386
- }
3387
- if ($this->addEmbeddedImage(
3388
- $basedir . $directory . $filename,
3389
- $cid,
3390
- $filename,
3391
- 'base64',
3392
- self::_mime_types((string)self::mb_pathinfo($filename, PATHINFO_EXTENSION))
3393
- )
3394
- ) {
3395
- $message = preg_replace(
3396
- '/' . $images[1][$imgindex] . '=["\']' . preg_quote($url, '/') . '["\']/Ui',
3397
- $images[1][$imgindex] . '="cid:' . $cid . '"',
3398
- $message
3399
- );
3400
- }
3401
- }
3402
- }
3403
- }
3404
- $this->isHTML(true);
3405
- // Convert all message body line breaks to CRLF, makes quoted-printable encoding work much better
3406
- $this->Body = $this->normalizeBreaks($message);
3407
- $this->AltBody = $this->normalizeBreaks($this->html2text($message, $advanced));
3408
- if (!$this->alternativeExists()) {
3409
- $this->AltBody = 'To view this email message, open it in a program that understands HTML!' .
3410
- self::CRLF . self::CRLF;
3411
- }
3412
- return $this->Body;
3413
- }
3414
-
3415
- /**
3416
- * Convert an HTML string into plain text.
3417
- * This is used by msgHTML().
3418
- * Note - older versions of this function used a bundled advanced converter
3419
- * which was been removed for license reasons in #232.
3420
- * Example usage:
3421
- * <code>
3422
- * // Use default conversion
3423
- * $plain = $mail->html2text($html);
3424
- * // Use your own custom converter
3425
- * $plain = $mail->html2text($html, function($html) {
3426
- * $converter = new MyHtml2text($html);
3427
- * return $converter->get_text();
3428
- * });
3429
- * </code>
3430
- * @param string $html The HTML text to convert
3431
- * @param boolean|callable $advanced Any boolean value to use the internal converter,
3432
- * or provide your own callable for custom conversion.
3433
- * @return string
3434
- */
3435
- public function html2text($html, $advanced = false)
3436
- {
3437
- if (is_callable($advanced)) {
3438
- return call_user_func($advanced, $html);
3439
- }
3440
- return html_entity_decode(
3441
- trim(strip_tags(preg_replace('/<(head|title|style|script)[^>]*>.*?<\/\\1>/si', '', $html))),
3442
- ENT_QUOTES,
3443
- $this->CharSet
3444
- );
3445
- }
3446
-
3447
- /**
3448
- * Get the MIME type for a file extension.
3449
- * @param string $ext File extension
3450
- * @access public
3451
- * @return string MIME type of file.
3452
- * @static
3453
- */
3454
- public static function _mime_types($ext = '')
3455
- {
3456
- $mimes = array(
3457
- 'xl' => 'application/excel',
3458
- 'js' => 'application/javascript',
3459
- 'hqx' => 'application/mac-binhex40',
3460
- 'cpt' => 'application/mac-compactpro',
3461
- 'bin' => 'application/macbinary',
3462
- 'doc' => 'application/msword',
3463
- 'word' => 'application/msword',
3464
- 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
3465
- 'xltx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
3466
- 'potx' => 'application/vnd.openxmlformats-officedocument.presentationml.template',
3467
- 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
3468
- 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
3469
- 'sldx' => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
3470
- 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
3471
- 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
3472
- 'xlam' => 'application/vnd.ms-excel.addin.macroEnabled.12',
3473
- 'xlsb' => 'application/vnd.ms-excel.sheet.binary.macroEnabled.12',
3474
- 'class' => 'application/octet-stream',
3475
- 'dll' => 'application/octet-stream',
3476
- 'dms' => 'application/octet-stream',
3477
- 'exe' => 'application/octet-stream',
3478
- 'lha' => 'application/octet-stream',
3479
- 'lzh' => 'application/octet-stream',
3480
- 'psd' => 'application/octet-stream',
3481
- 'sea' => 'application/octet-stream',
3482
- 'so' => 'application/octet-stream',
3483
- 'oda' => 'application/oda',
3484
- 'pdf' => 'application/pdf',
3485
- 'ai' => 'application/postscript',
3486
- 'eps' => 'application/postscript',
3487
- 'ps' => 'application/postscript',
3488
- 'smi' => 'application/smil',
3489
- 'smil' => 'application/smil',
3490
- 'mif' => 'application/vnd.mif',
3491
- 'xls' => 'application/vnd.ms-excel',
3492
- 'ppt' => 'application/vnd.ms-powerpoint',
3493
- 'wbxml' => 'application/vnd.wap.wbxml',
3494
- 'wmlc' => 'application/vnd.wap.wmlc',
3495
- 'dcr' => 'application/x-director',
3496
- 'dir' => 'application/x-director',
3497
- 'dxr' => 'application/x-director',
3498
- 'dvi' => 'application/x-dvi',
3499
- 'gtar' => 'application/x-gtar',
3500
- 'php3' => 'application/x-httpd-php',
3501
- 'php4' => 'application/x-httpd-php',
3502
- 'php' => 'application/x-httpd-php',
3503
- 'phtml' => 'application/x-httpd-php',
3504
- 'phps' => 'application/x-httpd-php-source',
3505
- 'swf' => 'application/x-shockwave-flash',
3506
- 'sit' => 'application/x-stuffit',
3507
- 'tar' => 'application/x-tar',
3508
- 'tgz' => 'application/x-tar',
3509
- 'xht' => 'application/xhtml+xml',
3510
- 'xhtml' => 'application/xhtml+xml',
3511
- 'zip' => 'application/zip',
3512
- 'mid' => 'audio/midi',
3513
- 'midi' => 'audio/midi',
3514
- 'mp2' => 'audio/mpeg',
3515
- 'mp3' => 'audio/mpeg',
3516
- 'mpga' => 'audio/mpeg',
3517
- 'aif' => 'audio/x-aiff',
3518
- 'aifc' => 'audio/x-aiff',
3519
- 'aiff' => 'audio/x-aiff',
3520
- 'ram' => 'audio/x-pn-realaudio',
3521
- 'rm' => 'audio/x-pn-realaudio',
3522
- 'rpm' => 'audio/x-pn-realaudio-plugin',
3523
- 'ra' => 'audio/x-realaudio',
3524
- 'wav' => 'audio/x-wav',
3525
- 'bmp' => 'image/bmp',
3526
- 'gif' => 'image/gif',
3527
- 'jpeg' => 'image/jpeg',
3528
- 'jpe' => 'image/jpeg',
3529
- 'jpg' => 'image/jpeg',
3530
- 'png' => 'image/png',
3531
- 'tiff' => 'image/tiff',
3532
- 'tif' => 'image/tiff',
3533
- 'eml' => 'message/rfc822',
3534
- 'css' => 'text/css',
3535
- 'html' => 'text/html',
3536
- 'htm' => 'text/html',
3537
- 'shtml' => 'text/html',
3538
- 'log' => 'text/plain',
3539
- 'text' => 'text/plain',
3540
- 'txt' => 'text/plain',
3541
- 'rtx' => 'text/richtext',
3542
- 'rtf' => 'text/rtf',
3543
- 'vcf' => 'text/vcard',
3544
- 'vcard' => 'text/vcard',
3545
- 'xml' => 'text/xml',
3546
- 'xsl' => 'text/xml',
3547
- 'mpeg' => 'video/mpeg',
3548
- 'mpe' => 'video/mpeg',
3549
- 'mpg' => 'video/mpeg',
3550
- 'mov' => 'video/quicktime',
3551
- 'qt' => 'video/quicktime',
3552
- 'rv' => 'video/vnd.rn-realvideo',
3553
- 'avi' => 'video/x-msvideo',
3554
- 'movie' => 'video/x-sgi-movie'
3555
- );
3556
- if (array_key_exists(strtolower($ext), $mimes)) {
3557
- return $mimes[strtolower($ext)];
3558
- }
3559
- return 'application/octet-stream';
3560
- }
3561
-
3562
- /**
3563
- * Map a file name to a MIME type.
3564
- * Defaults to 'application/octet-stream', i.e.. arbitrary binary data.
3565
- * @param string $filename A file name or full path, does not need to exist as a file
3566
- * @return string
3567
- * @static
3568
- */
3569
- public static function filenameToType($filename)
3570
- {
3571
- // In case the path is a URL, strip any query string before getting extension
3572
- $qpos = strpos($filename, '?');
3573
- if (false !== $qpos) {
3574
- $filename = substr($filename, 0, $qpos);
3575
- }
3576
- $pathinfo = self::mb_pathinfo($filename);
3577
- return self::_mime_types($pathinfo['extension']);
3578
- }
3579
-
3580
- /**
3581
- * Multi-byte-safe pathinfo replacement.
3582
- * Drop-in replacement for pathinfo(), but multibyte-safe, cross-platform-safe, old-version-safe.
3583
- * Works similarly to the one in PHP >= 5.2.0
3584
- * @link http://www.php.net/manual/en/function.pathinfo.php#107461
3585
- * @param string $path A filename or path, does not need to exist as a file
3586
- * @param integer|string $options Either a PATHINFO_* constant,
3587
- * or a string name to return only the specified piece, allows 'filename' to work on PHP < 5.2
3588
- * @return string|array
3589
- * @static
3590
- */
3591
- public static function mb_pathinfo($path, $options = null)
3592
- {
3593
- $ret = array('dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '');
3594
- $pathinfo = array();
3595
- if (preg_match('%^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$%im', $path, $pathinfo)) {
3596
- if (array_key_exists(1, $pathinfo)) {
3597
- $ret['dirname'] = $pathinfo[1];
3598
- }
3599
- if (array_key_exists(2, $pathinfo)) {
3600
- $ret['basename'] = $pathinfo[2];
3601
- }
3602
- if (array_key_exists(5, $pathinfo)) {
3603
- $ret['extension'] = $pathinfo[5];
3604
- }
3605
- if (array_key_exists(3, $pathinfo)) {
3606
- $ret['filename'] = $pathinfo[3];
3607
- }
3608
- }
3609
- switch ($options) {
3610
- case PATHINFO_DIRNAME:
3611
- case 'dirname':
3612
- return $ret['dirname'];
3613
- case PATHINFO_BASENAME:
3614
- case 'basename':
3615
- return $ret['basename'];
3616
- case PATHINFO_EXTENSION:
3617
- case 'extension':
3618
- return $ret['extension'];
3619
- case PATHINFO_FILENAME:
3620
- case 'filename':
3621
- return $ret['filename'];
3622
- default:
3623
- return $ret;
3624
- }
3625
- }
3626
-
3627
- /**
3628
- * Set or reset instance properties.
3629
- * You should avoid this function - it's more verbose, less efficient, more error-prone and
3630
- * harder to debug than setting properties directly.
3631
- * Usage Example:
3632
- * `$mail->set('SMTPSecure', 'tls');`
3633
- * is the same as:
3634
- * `$mail->SMTPSecure = 'tls';`
3635
- * @access public
3636
- * @param string $name The property name to set
3637
- * @param mixed $value The value to set the property to
3638
- * @return boolean
3639
- * @TODO Should this not be using the __set() magic function?
3640
- */
3641
- public function set($name, $value = '')
3642
- {
3643
- if (property_exists($this, $name)) {
3644
- $this->$name = $value;
3645
- return true;
3646
- } else {
3647
- $this->setError($this->lang('variable_set') . $name);
3648
- return false;
3649
- }
3650
- }
3651
-
3652
- /**
3653
- * Strip newlines to prevent header injection.
3654
- * @access public
3655
- * @param string $str
3656
- * @return string
3657
- */
3658
- public function secureHeader($str)
3659
- {
3660
- return trim(str_replace(array("\r", "\n"), '', $str));
3661
- }
3662
-
3663
- /**
3664
- * Normalize line breaks in a string.
3665
- * Converts UNIX LF, Mac CR and Windows CRLF line breaks into a single line break format.
3666
- * Defaults to CRLF (for message bodies) and preserves consecutive breaks.
3667
- * @param string $text
3668
- * @param string $breaktype What kind of line break to use, defaults to CRLF
3669
- * @return string
3670
- * @access public
3671
- * @static
3672
- */
3673
- public static function normalizeBreaks($text, $breaktype = "\r\n")
3674
- {
3675
- return preg_replace('/(\r\n|\r|\n)/ms', $breaktype, $text);
3676
- }
3677
-
3678
- /**
3679
- * Set the public and private key files and password for S/MIME signing.
3680
- * @access public
3681
- * @param string $cert_filename
3682
- * @param string $key_filename
3683
- * @param string $key_pass Password for private key
3684
- * @param string $extracerts_filename Optional path to chain certificate
3685
- */
3686
- public function sign($cert_filename, $key_filename, $key_pass, $extracerts_filename = '')
3687
- {
3688
- $this->sign_cert_file = $cert_filename;
3689
- $this->sign_key_file = $key_filename;
3690
- $this->sign_key_pass = $key_pass;
3691
- $this->sign_extracerts_file = $extracerts_filename;
3692
- }
3693
-
3694
- /**
3695
- * Quoted-Printable-encode a DKIM header.
3696
- * @access public
3697
- * @param string $txt
3698
- * @return string
3699
- */
3700
- public function DKIM_QP($txt)
3701
- {
3702
- $line = '';
3703
- for ($i = 0; $i < strlen($txt); $i++) {
3704
- $ord = ord($txt[$i]);
3705
- if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord == 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) {
3706
- $line .= $txt[$i];
3707
- } else {
3708
- $line .= '=' . sprintf('%02X', $ord);
3709
- }
3710
- }
3711
- return $line;
3712
- }
3713
-
3714
- /**
3715
- * Generate a DKIM signature.
3716
- * @access public
3717
- * @param string $signHeader
3718
- * @throws phpmailerException
3719
- * @return string The DKIM signature value
3720
- */
3721
- public function DKIM_Sign($signHeader)
3722
- {
3723
- if (!defined('PKCS7_TEXT')) {
3724
- if ($this->exceptions) {
3725
- throw new phpmailerException($this->lang('extension_missing') . 'openssl');
3726
- }
3727
- return '';
3728
- }
3729
- $privKeyStr = !empty($this->DKIM_private_string) ? $this->DKIM_private_string : file_get_contents($this->DKIM_private);
3730
- if ('' != $this->DKIM_passphrase) {
3731
- $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase);
3732
- } else {
3733
- $privKey = openssl_pkey_get_private($privKeyStr);
3734
- }
3735
- //Workaround for missing digest algorithms in old PHP & OpenSSL versions
3736
- //@link http://stackoverflow.com/a/11117338/333340
3737
- if (version_compare(PHP_VERSION, '5.3.0') >= 0 and
3738
- in_array('sha256WithRSAEncryption', openssl_get_md_methods(true))) {
3739
- if (openssl_sign($signHeader, $signature, $privKey, 'sha256WithRSAEncryption')) {
3740
- openssl_pkey_free($privKey);
3741
- return base64_encode($signature);
3742
- }
3743
- } else {
3744
- $pinfo = openssl_pkey_get_details($privKey);
3745
- $hash = hash('sha256', $signHeader);
3746
- //'Magic' constant for SHA256 from RFC3447
3747
- //@link https://tools.ietf.org/html/rfc3447#page-43
3748
- $t = '3031300d060960864801650304020105000420' . $hash;
3749
- $pslen = $pinfo['bits'] / 8 - (strlen($t) / 2 + 3);
3750
- $eb = pack('H*', '0001' . str_repeat('FF', $pslen) . '00' . $t);
3751
-
3752
- if (openssl_private_encrypt($eb, $signature, $privKey, OPENSSL_NO_PADDING)) {
3753
- openssl_pkey_free($privKey);
3754
- return base64_encode($signature);
3755
- }
3756
- }
3757
- openssl_pkey_free($privKey);
3758
- return '';
3759
- }
3760
-
3761
- /**
3762
- * Generate a DKIM canonicalization header.
3763
- * @access public
3764
- * @param string $signHeader Header
3765
- * @return string
3766
- */
3767
- public function DKIM_HeaderC($signHeader)
3768
- {
3769
- $signHeader = preg_replace('/\r\n\s+/', ' ', $signHeader);
3770
- $lines = explode("\r\n", $signHeader);
3771
- foreach ($lines as $key => $line) {
3772
- list($heading, $value) = explode(':', $line, 2);
3773
- $heading = strtolower($heading);
3774
- $value = preg_replace('/\s{2,}/', ' ', $value); // Compress useless spaces
3775
- $lines[$key] = $heading . ':' . trim($value); // Don't forget to remove WSP around the value
3776
- }
3777
- $signHeader = implode("\r\n", $lines);
3778
- return $signHeader;
3779
- }
3780
-
3781
- /**
3782
- * Generate a DKIM canonicalization body.
3783
- * @access public
3784
- * @param string $body Message Body
3785
- * @return string
3786
- */
3787
- public function DKIM_BodyC($body)
3788
- {
3789
- if ($body == '') {
3790
- return "\r\n";
3791
- }
3792
- // stabilize line endings
3793
- $body = str_replace("\r\n", "\n", $body);
3794
- $body = str_replace("\n", "\r\n", $body);
3795
- // END stabilize line endings
3796
- while (substr($body, strlen($body) - 4, 4) == "\r\n\r\n") {
3797
- $body = substr($body, 0, strlen($body) - 2);
3798
- }
3799
- return $body;
3800
- }
3801
-
3802
- /**
3803
- * Create the DKIM header and body in a new message header.
3804
- * @access public
3805
- * @param string $headers_line Header lines
3806
- * @param string $subject Subject
3807
- * @param string $body Body
3808
- * @return string
3809
- */
3810
- public function DKIM_Add($headers_line, $subject, $body)
3811
- {
3812
- $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms
3813
- $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body
3814
- $DKIMquery = 'dns/txt'; // Query method
3815
- $DKIMtime = time(); // Signature Timestamp = seconds since 00:00:00 - Jan 1, 1970 (UTC time zone)
3816
- $subject_header = "Subject: $subject";
3817
- $headers = explode($this->LE, $headers_line);
3818
- $from_header = '';
3819
- $to_header = '';
3820
- $date_header = '';
3821
- $current = '';
3822
- foreach ($headers as $header) {
3823
- if (strpos($header, 'From:') === 0) {
3824
- $from_header = $header;
3825
- $current = 'from_header';
3826
- } elseif (strpos($header, 'To:') === 0) {
3827
- $to_header = $header;
3828
- $current = 'to_header';
3829
- } elseif (strpos($header, 'Date:') === 0) {
3830
- $date_header = $header;
3831
- $current = 'date_header';
3832
- } else {
3833
- if (!empty($$current) && strpos($header, ' =?') === 0) {
3834
- $$current .= $header;
3835
- } else {
3836
- $current = '';
3837
- }
3838
- }
3839
- }
3840
- $from = str_replace('|', '=7C', $this->DKIM_QP($from_header));
3841
- $to = str_replace('|', '=7C', $this->DKIM_QP($to_header));
3842
- $date = str_replace('|', '=7C', $this->DKIM_QP($date_header));
3843
- $subject = str_replace(
3844
- '|',
3845
- '=7C',
3846
- $this->DKIM_QP($subject_header)
3847
- ); // Copied header fields (dkim-quoted-printable)
3848
- $body = $this->DKIM_BodyC($body);
3849
- $DKIMlen = strlen($body); // Length of body
3850
- $DKIMb64 = base64_encode(pack('H*', hash('sha256', $body))); // Base64 of packed binary SHA-256 hash of body
3851
- if ('' == $this->DKIM_identity) {
3852
- $ident = '';
3853
- } else {
3854
- $ident = ' i=' . $this->DKIM_identity . ';';
3855
- }
3856
- $dkimhdrs = 'DKIM-Signature: v=1; a=' .
3857
- $DKIMsignatureType . '; q=' .
3858
- $DKIMquery . '; l=' .
3859
- $DKIMlen . '; s=' .
3860
- $this->DKIM_selector .
3861
- ";\r\n" .
3862
- "\tt=" . $DKIMtime . '; c=' . $DKIMcanonicalization . ";\r\n" .
3863
- "\th=From:To:Date:Subject;\r\n" .
3864
- "\td=" . $this->DKIM_domain . ';' . $ident . "\r\n" .
3865
- "\tz=$from\r\n" .
3866
- "\t|$to\r\n" .
3867
- "\t|$date\r\n" .
3868
- "\t|$subject;\r\n" .
3869
- "\tbh=" . $DKIMb64 . ";\r\n" .
3870
- "\tb=";
3871
- $toSign = $this->DKIM_HeaderC(
3872
- $from_header . "\r\n" .
3873
- $to_header . "\r\n" .
3874
- $date_header . "\r\n" .
3875
- $subject_header . "\r\n" .
3876
- $dkimhdrs
3877
- );
3878
- $signed = $this->DKIM_Sign($toSign);
3879
- return $dkimhdrs . $signed . "\r\n";
3880
- }
3881
-
3882
- /**
3883
- * Detect if a string contains a line longer than the maximum line length allowed.
3884
- * @param string $str
3885
- * @return boolean
3886
- * @static
3887
- */
3888
- public static function hasLineLongerThanMax($str)
3889
- {
3890
- //+2 to include CRLF line break for a 1000 total
3891
- return (boolean)preg_match('/^(.{'.(self::MAX_LINE_LENGTH + 2).',})/m', $str);
3892
- }
3893
-
3894
- /**
3895
- * Allows for public read access to 'to' property.
3896
- * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
3897
- * @access public
3898
- * @return array
3899
- */
3900
- public function getToAddresses()
3901
- {
3902
- return $this->to;
3903
- }
3904
-
3905
- /**
3906
- * Allows for public read access to 'cc' property.
3907
- * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
3908
- * @access public
3909
- * @return array
3910
- */
3911
- public function getCcAddresses()
3912
- {
3913
- return $this->cc;
3914
- }
3915
-
3916
- /**
3917
- * Allows for public read access to 'bcc' property.
3918
- * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
3919
- * @access public
3920
- * @return array
3921
- */
3922
- public function getBccAddresses()
3923
- {
3924
- return $this->bcc;
3925
- }
3926
-
3927
- /**
3928
- * Allows for public read access to 'ReplyTo' property.
3929
- * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
3930
- * @access public
3931
- * @return array
3932
- */
3933
- public function getReplyToAddresses()
3934
- {
3935
- return $this->ReplyTo;
3936
- }
3937
-
3938
- /**
3939
- * Allows for public read access to 'all_recipients' property.
3940
- * @note: Before the send() call, queued addresses (i.e. with IDN) are not yet included.
3941
- * @access public
3942
- * @return array
3943
- */
3944
- public function getAllRecipientAddresses()
3945
- {
3946
- return $this->all_recipients;
3947
- }
3948
-
3949
- /**
3950
- * Perform a callback.
3951
- * @param boolean $isSent
3952
- * @param array $to
3953
- * @param array $cc
3954
- * @param array $bcc
3955
- * @param string $subject
3956
- * @param string $body
3957
- * @param string $from
3958
- */
3959
- protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from)
3960
- {
3961
- if (!empty($this->action_function) && is_callable($this->action_function)) {
3962
- $params = array($isSent, $to, $cc, $bcc, $subject, $body, $from);
3963
- call_user_func_array($this->action_function, $params);
3964
- }
3965
- }
3966
- }
3967
-
3968
- /**
3969
- * PHPMailer exception handler
3970
- * @package PHPMailer
3971
- */
3972
- class phpmailerException extends Exception
3973
- {
3974
- /**
3975
- * Prettify error message output
3976
- * @return string
3977
- */
3978
- public function errorMessage()
3979
- {
3980
- $errorMsg = '<strong>' . $this->getMessage() . "</strong><br />\n";
3981
- return $errorMsg;
3982
- }
3983
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/mail/engines/class.phpmaileroauth.php DELETED
@@ -1,197 +0,0 @@
1
- <?php
2
- /**
3
- * PHPMailer - PHP email creation and transport class.
4
- * PHP Version 5.4
5
- * @package PHPMailer
6
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
7
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
8
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
9
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
10
- * @author Brent R. Matzelle (original founder)
11
- * @copyright 2012 - 2014 Marcus Bointon
12
- * @copyright 2010 - 2012 Jim Jagielski
13
- * @copyright 2004 - 2009 Andy Prevost
14
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
15
- * @note This program is distributed in the hope that it will be useful - WITHOUT
16
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17
- * FITNESS FOR A PARTICULAR PURPOSE.
18
- */
19
-
20
- /**
21
- * PHPMailerOAuth - PHPMailer subclass adding OAuth support.
22
- * @package PHPMailer
23
- * @author @sherryl4george
24
- * @author Marcus Bointon (@Synchro) <phpmailer@synchromedia.co.uk>
25
- */
26
- class PHPMailerOAuth extends PHPMailer
27
- {
28
- /**
29
- * The OAuth user's email address
30
- * @var string
31
- */
32
- public $oauthUserEmail = '';
33
-
34
- /**
35
- * The OAuth refresh token
36
- * @var string
37
- */
38
- public $oauthRefreshToken = '';
39
-
40
- /**
41
- * The OAuth client ID
42
- * @var string
43
- */
44
- public $oauthClientId = '';
45
-
46
- /**
47
- * The OAuth client secret
48
- * @var string
49
- */
50
- public $oauthClientSecret = '';
51
-
52
- /**
53
- * An instance of the PHPMailerOAuthGoogle class.
54
- * @var PHPMailerOAuthGoogle
55
- * @access protected
56
- */
57
- protected $oauth = null;
58
-
59
- /**
60
- * Get a PHPMailerOAuthGoogle instance to use.
61
- * @return PHPMailerOAuthGoogle
62
- */
63
- public function getOAUTHInstance()
64
- {
65
- if (!is_object($this->oauth)) {
66
- $this->oauth = new PHPMailerOAuthGoogle(
67
- $this->oauthUserEmail,
68
- $this->oauthClientSecret,
69
- $this->oauthClientId,
70
- $this->oauthRefreshToken
71
- );
72
- }
73
- return $this->oauth;
74
- }
75
-
76
- /**
77
- * Initiate a connection to an SMTP server.
78
- * Overrides the original smtpConnect method to add support for OAuth.
79
- * @param array $options An array of options compatible with stream_context_create()
80
- * @uses SMTP
81
- * @access public
82
- * @return bool
83
- * @throws phpmailerException
84
- */
85
- public function smtpConnect($options = array())
86
- {
87
- if (is_null($this->smtp)) {
88
- $this->smtp = $this->getSMTPInstance();
89
- }
90
-
91
- if (is_null($this->oauth)) {
92
- $this->oauth = $this->getOAUTHInstance();
93
- }
94
-
95
- // Already connected?
96
- if ($this->smtp->connected()) {
97
- return true;
98
- }
99
-
100
- $this->smtp->setTimeout($this->Timeout);
101
- $this->smtp->setDebugLevel($this->SMTPDebug);
102
- $this->smtp->setDebugOutput($this->Debugoutput);
103
- $this->smtp->setVerp($this->do_verp);
104
- $hosts = explode(';', $this->Host);
105
- $lastexception = null;
106
-
107
- foreach ($hosts as $hostentry) {
108
- $hostinfo = array();
109
- if (!preg_match('/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*):?([0-9]*)$/', trim($hostentry), $hostinfo)) {
110
- // Not a valid host entry
111
- continue;
112
- }
113
- // $hostinfo[2]: optional ssl or tls prefix
114
- // $hostinfo[3]: the hostname
115
- // $hostinfo[4]: optional port number
116
- // The host string prefix can temporarily override the current setting for SMTPSecure
117
- // If it's not specified, the default value is used
118
- $prefix = '';
119
- $secure = $this->SMTPSecure;
120
- $tls = ($this->SMTPSecure == 'tls');
121
- if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) {
122
- $prefix = 'ssl://';
123
- $tls = false; // Can't have SSL and TLS at the same time
124
- $secure = 'ssl';
125
- } elseif ($hostinfo[2] == 'tls') {
126
- $tls = true;
127
- // tls doesn't use a prefix
128
- $secure = 'tls';
129
- }
130
- //Do we need the OpenSSL extension?
131
- $sslext = defined('OPENSSL_ALGO_SHA1');
132
- if ('tls' === $secure or 'ssl' === $secure) {
133
- //Check for an OpenSSL constant rather than using extension_loaded, which is sometimes disabled
134
- if (!$sslext) {
135
- throw new phpmailerException($this->lang('extension_missing').'openssl', self::STOP_CRITICAL);
136
- }
137
- }
138
- $host = $hostinfo[3];
139
- $port = $this->Port;
140
- $tport = (integer)$hostinfo[4];
141
- if ($tport > 0 and $tport < 65536) {
142
- $port = $tport;
143
- }
144
- if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) {
145
- try {
146
- if ($this->Helo) {
147
- $hello = $this->Helo;
148
- } else {
149
- $hello = $this->serverHostname();
150
- }
151
- $this->smtp->hello($hello);
152
- //Automatically enable TLS encryption if:
153
- // * it's not disabled
154
- // * we have openssl extension
155
- // * we are not already using SSL
156
- // * the server offers STARTTLS
157
- if ($this->SMTPAutoTLS and $sslext and $secure != 'ssl' and $this->smtp->getServerExt('STARTTLS')) {
158
- $tls = true;
159
- }
160
- if ($tls) {
161
- if (!$this->smtp->startTLS()) {
162
- throw new phpmailerException($this->lang('connect_host'));
163
- }
164
- // We must resend HELO after tls negotiation
165
- $this->smtp->hello($hello);
166
- }
167
- if ($this->SMTPAuth) {
168
- if (!$this->smtp->authenticate(
169
- $this->Username,
170
- $this->Password,
171
- $this->AuthType,
172
- $this->Realm,
173
- $this->Workstation,
174
- $this->oauth
175
- )
176
- ) {
177
- throw new phpmailerException($this->lang('authenticate'));
178
- }
179
- }
180
- return true;
181
- } catch (phpmailerException $exc) {
182
- $lastexception = $exc;
183
- $this->edebug($exc->getMessage());
184
- // We must have connected, but then failed TLS or Auth, so close connection nicely
185
- $this->smtp->quit();
186
- }
187
- }
188
- }
189
- // If we get here, all connection attempts have failed, so close connection hard
190
- $this->smtp->close();
191
- // As we've caught all exceptions, just report whatever the last one was
192
- if ($this->exceptions and !is_null($lastexception)) {
193
- throw $lastexception;
194
- }
195
- return false;
196
- }
197
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/mail/engines/class.phpmaileroauthgoogle.php DELETED
@@ -1,77 +0,0 @@
1
- <?php
2
- /**
3
- * PHPMailer - PHP email creation and transport class.
4
- * PHP Version 5.4
5
- * @package PHPMailer
6
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
7
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
8
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
9
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
10
- * @author Brent R. Matzelle (original founder)
11
- * @copyright 2012 - 2014 Marcus Bointon
12
- * @copyright 2010 - 2012 Jim Jagielski
13
- * @copyright 2004 - 2009 Andy Prevost
14
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
15
- * @note This program is distributed in the hope that it will be useful - WITHOUT
16
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17
- * FITNESS FOR A PARTICULAR PURPOSE.
18
- */
19
-
20
- /**
21
- * PHPMailerOAuthGoogle - Wrapper for League OAuth2 Google provider.
22
- * @package PHPMailer
23
- * @author @sherryl4george
24
- * @author Marcus Bointon (@Synchro) <phpmailer@synchromedia.co.uk>
25
- * @link https://github.com/thephpleague/oauth2-client
26
- */
27
- class PHPMailerOAuthGoogle
28
- {
29
- private $oauthUserEmail = '';
30
- private $oauthRefreshToken = '';
31
- private $oauthClientId = '';
32
- private $oauthClientSecret = '';
33
-
34
- /**
35
- * @param string $UserEmail
36
- * @param string $ClientSecret
37
- * @param string $ClientId
38
- * @param string $RefreshToken
39
- */
40
- public function __construct(
41
- $UserEmail,
42
- $ClientSecret,
43
- $ClientId,
44
- $RefreshToken
45
- ) {
46
- $this->oauthClientId = $ClientId;
47
- $this->oauthClientSecret = $ClientSecret;
48
- $this->oauthRefreshToken = $RefreshToken;
49
- $this->oauthUserEmail = $UserEmail;
50
- }
51
-
52
- private function getProvider()
53
- {
54
- return new League\OAuth2\Client\Provider\Google([
55
- 'clientId' => $this->oauthClientId,
56
- 'clientSecret' => $this->oauthClientSecret
57
- ]);
58
- }
59
-
60
- private function getGrant()
61
- {
62
- return new \League\OAuth2\Client\Grant\RefreshToken();
63
- }
64
-
65
- private function getToken()
66
- {
67
- $provider = $this->getProvider();
68
- $grant = $this->getGrant();
69
- return $provider->getAccessToken($grant, ['refresh_token' => $this->oauthRefreshToken]);
70
- }
71
-
72
- public function getOauth64()
73
- {
74
- $token = $this->getToken();
75
- return base64_encode("user=" . $this->oauthUserEmail . "\001auth=Bearer " . $token . "\001\001");
76
- }
77
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/mail/engines/class.pop3.php DELETED
@@ -1,407 +0,0 @@
1
- <?php
2
- /**
3
- * PHPMailer POP-Before-SMTP Authentication Class.
4
- * PHP Version 5
5
- * @package PHPMailer
6
- * @link https://github.com/PHPMailer/PHPMailer/
7
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
8
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
9
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
10
- * @author Brent R. Matzelle (original founder)
11
- * @copyright 2012 - 2014 Marcus Bointon
12
- * @copyright 2010 - 2012 Jim Jagielski
13
- * @copyright 2004 - 2009 Andy Prevost
14
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
15
- * @note This program is distributed in the hope that it will be useful - WITHOUT
16
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17
- * FITNESS FOR A PARTICULAR PURPOSE.
18
- */
19
-
20
- /**
21
- * PHPMailer POP-Before-SMTP Authentication Class.
22
- * Specifically for PHPMailer to use for RFC1939 POP-before-SMTP authentication.
23
- * Does not support APOP.
24
- * @package PHPMailer
25
- * @author Richard Davey (original author) <rich@corephp.co.uk>
26
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
27
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
28
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
29
- */
30
- class POP3
31
- {
32
- /**
33
- * The POP3 PHPMailer Version number.
34
- * @var string
35
- * @access public
36
- */
37
- public $Version = '5.2.17';
38
-
39
- /**
40
- * Default POP3 port number.
41
- * @var integer
42
- * @access public
43
- */
44
- public $POP3_PORT = 110;
45
-
46
- /**
47
- * Default timeout in seconds.
48
- * @var integer
49
- * @access public
50
- */
51
- public $POP3_TIMEOUT = 30;
52
-
53
- /**
54
- * POP3 Carriage Return + Line Feed.
55
- * @var string
56
- * @access public
57
- * @deprecated Use the constant instead
58
- */
59
- public $CRLF = "\r\n";
60
-
61
- /**
62
- * Debug display level.
63
- * Options: 0 = no, 1+ = yes
64
- * @var integer
65
- * @access public
66
- */
67
- public $do_debug = 0;
68
-
69
- /**
70
- * POP3 mail server hostname.
71
- * @var string
72
- * @access public
73
- */
74
- public $host;
75
-
76
- /**
77
- * POP3 port number.
78
- * @var integer
79
- * @access public
80
- */
81
- public $port;
82
-
83
- /**
84
- * POP3 Timeout Value in seconds.
85
- * @var integer
86
- * @access public
87
- */
88
- public $tval;
89
-
90
- /**
91
- * POP3 username
92
- * @var string
93
- * @access public
94
- */
95
- public $username;
96
-
97
- /**
98
- * POP3 password.
99
- * @var string
100
- * @access public
101
- */
102
- public $password;
103
-
104
- /**
105
- * Resource handle for the POP3 connection socket.
106
- * @var resource
107
- * @access protected
108
- */
109
- protected $pop_conn;
110
-
111
- /**
112
- * Are we connected?
113
- * @var boolean
114
- * @access protected
115
- */
116
- protected $connected = false;
117
-
118
- /**
119
- * Error container.
120
- * @var array
121
- * @access protected
122
- */
123
- protected $errors = array();
124
-
125
- /**
126
- * Line break constant
127
- */
128
- const CRLF = "\r\n";
129
-
130
- /**
131
- * Simple static wrapper for all-in-one POP before SMTP
132
- * @param $host
133
- * @param integer|boolean $port The port number to connect to
134
- * @param integer|boolean $timeout The timeout value
135
- * @param string $username
136
- * @param string $password
137
- * @param integer $debug_level
138
- * @return boolean
139
- */
140
- public static function popBeforeSmtp(
141
- $host,
142
- $port = false,
143
- $timeout = false,
144
- $username = '',
145
- $password = '',
146
- $debug_level = 0
147
- ) {
148
- $pop = new POP3;
149
- return $pop->authorise($host, $port, $timeout, $username, $password, $debug_level);
150
- }
151
-
152
- /**
153
- * Authenticate with a POP3 server.
154
- * A connect, login, disconnect sequence
155
- * appropriate for POP-before SMTP authorisation.
156
- * @access public
157
- * @param string $host The hostname to connect to
158
- * @param integer|boolean $port The port number to connect to
159
- * @param integer|boolean $timeout The timeout value
160
- * @param string $username
161
- * @param string $password
162
- * @param integer $debug_level
163
- * @return boolean
164
- */
165
- public function authorise($host, $port = false, $timeout = false, $username = '', $password = '', $debug_level = 0)
166
- {
167
- $this->host = $host;
168
- // If no port value provided, use default
169
- if (false === $port) {
170
- $this->port = $this->POP3_PORT;
171
- } else {
172
- $this->port = (integer)$port;
173
- }
174
- // If no timeout value provided, use default
175
- if (false === $timeout) {
176
- $this->tval = $this->POP3_TIMEOUT;
177
- } else {
178
- $this->tval = (integer)$timeout;
179
- }
180
- $this->do_debug = $debug_level;
181
- $this->username = $username;
182
- $this->password = $password;
183
- // Reset the error log
184
- $this->errors = array();
185
- // connect
186
- $result = $this->connect($this->host, $this->port, $this->tval);
187
- if ($result) {
188
- $login_result = $this->login($this->username, $this->password);
189
- if ($login_result) {
190
- $this->disconnect();
191
- return true;
192
- }
193
- }
194
- // We need to disconnect regardless of whether the login succeeded
195
- $this->disconnect();
196
- return false;
197
- }
198
-
199
- /**
200
- * Connect to a POP3 server.
201
- * @access public
202
- * @param string $host
203
- * @param integer|boolean $port
204
- * @param integer $tval
205
- * @return boolean
206
- */
207
- public function connect($host, $port = false, $tval = 30)
208
- {
209
- // Are we already connected?
210
- if ($this->connected) {
211
- return true;
212
- }
213
-
214
- //On Windows this will raise a PHP Warning error if the hostname doesn't exist.
215
- //Rather than suppress it with @fsockopen, capture it cleanly instead
216
- set_error_handler(array($this, 'catchWarning'));
217
-
218
- if (false === $port) {
219
- $port = $this->POP3_PORT;
220
- }
221
-
222
- // connect to the POP3 server
223
- $this->pop_conn = fsockopen(
224
- $host, // POP3 Host
225
- $port, // Port #
226
- $errno, // Error Number
227
- $errstr, // Error Message
228
- $tval
229
- ); // Timeout (seconds)
230
- // Restore the error handler
231
- restore_error_handler();
232
-
233
- // Did we connect?
234
- if (false === $this->pop_conn) {
235
- // It would appear not...
236
- $this->setError(array(
237
- 'error' => "Failed to connect to server $host on port $port",
238
- 'errno' => $errno,
239
- 'errstr' => $errstr
240
- ));
241
- return false;
242
- }
243
-
244
- // Increase the stream time-out
245
- stream_set_timeout($this->pop_conn, $tval, 0);
246
-
247
- // Get the POP3 server response
248
- $pop3_response = $this->getResponse();
249
- // Check for the +OK
250
- if ($this->checkResponse($pop3_response)) {
251
- // The connection is established and the POP3 server is talking
252
- $this->connected = true;
253
- return true;
254
- }
255
- return false;
256
- }
257
-
258
- /**
259
- * Log in to the POP3 server.
260
- * Does not support APOP (RFC 2828, 4949).
261
- * @access public
262
- * @param string $username
263
- * @param string $password
264
- * @return boolean
265
- */
266
- public function login($username = '', $password = '')
267
- {
268
- if (!$this->connected) {
269
- $this->setError('Not connected to POP3 server');
270
- }
271
- if (empty($username)) {
272
- $username = $this->username;
273
- }
274
- if (empty($password)) {
275
- $password = $this->password;
276
- }
277
-
278
- // Send the Username
279
- $this->sendString("USER $username" . self::CRLF);
280
- $pop3_response = $this->getResponse();
281
- if ($this->checkResponse($pop3_response)) {
282
- // Send the Password
283
- $this->sendString("PASS $password" . self::CRLF);
284
- $pop3_response = $this->getResponse();
285
- if ($this->checkResponse($pop3_response)) {
286
- return true;
287
- }
288
- }
289
- return false;
290
- }
291
-
292
- /**
293
- * Disconnect from the POP3 server.
294
- * @access public
295
- */
296
- public function disconnect()
297
- {
298
- $this->sendString('QUIT');
299
- //The QUIT command may cause the daemon to exit, which will kill our connection
300
- //So ignore errors here
301
- try {
302
- @fclose($this->pop_conn);
303
- } catch (Exception $e) {
304
- //Do nothing
305
- };
306
- }
307
-
308
- /**
309
- * Get a response from the POP3 server.
310
- * $size is the maximum number of bytes to retrieve
311
- * @param integer $size
312
- * @return string
313
- * @access protected
314
- */
315
- protected function getResponse($size = 128)
316
- {
317
- $response = fgets($this->pop_conn, $size);
318
- if ($this->do_debug >= 1) {
319
- echo "Server -> Client: $response";
320
- }
321
- return $response;
322
- }
323
-
324
- /**
325
- * Send raw data to the POP3 server.
326
- * @param string $string
327
- * @return integer
328
- * @access protected
329
- */
330
- protected function sendString($string)
331
- {
332
- if ($this->pop_conn) {
333
- if ($this->do_debug >= 2) { //Show client messages when debug >= 2
334
- echo "Client -> Server: $string";
335
- }
336
- return fwrite($this->pop_conn, $string, strlen($string));
337
- }
338
- return 0;
339
- }
340
-
341
- /**
342
- * Checks the POP3 server response.
343
- * Looks for for +OK or -ERR.
344
- * @param string $string
345
- * @return boolean
346
- * @access protected
347
- */
348
- protected function checkResponse($string)
349
- {
350
- if (substr($string, 0, 3) !== '+OK') {
351
- $this->setError(array(
352
- 'error' => "Server reported an error: $string",
353
- 'errno' => 0,
354
- 'errstr' => ''
355
- ));
356
- return false;
357
- } else {
358
- return true;
359
- }
360
- }
361
-
362
- /**
363
- * Add an error to the internal error store.
364
- * Also display debug output if it's enabled.
365
- * @param $error
366
- * @access protected
367
- */
368
- protected function setError($error)
369
- {
370
- $this->errors[] = $error;
371
- if ($this->do_debug >= 1) {
372
- echo '<pre>';
373
- foreach ($this->errors as $error) {
374
- print_r($error);
375
- }
376
- echo '</pre>';
377
- }
378
- }
379
-
380
- /**
381
- * Get an array of error messages, if any.
382
- * @return array
383
- */
384
- public function getErrors()
385
- {
386
- return $this->errors;
387
- }
388
-
389
- /**
390
- * POP3 connection error handler.
391
- * @param integer $errno
392
- * @param string $errstr
393
- * @param string $errfile
394
- * @param integer $errline
395
- * @access protected
396
- */
397
- protected function catchWarning($errno, $errstr, $errfile, $errline)
398
- {
399
- $this->setError(array(
400
- 'error' => "Connecting to the POP3 server raised a PHP warning: ",
401
- 'errno' => $errno,
402
- 'errstr' => $errstr,
403
- 'errfile' => $errfile,
404
- 'errline' => $errline
405
- ));
406
- }
407
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/mail/engines/class.smtp.php DELETED
@@ -1,1249 +0,0 @@
1
- <?php
2
- /**
3
- * PHPMailer RFC821 SMTP email transport class.
4
- * PHP Version 5
5
- * @package PHPMailer
6
- * @link https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project
7
- * @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
8
- * @author Jim Jagielski (jimjag) <jimjag@gmail.com>
9
- * @author Andy Prevost (codeworxtech) <codeworxtech@users.sourceforge.net>
10
- * @author Brent R. Matzelle (original founder)
11
- * @copyright 2014 Marcus Bointon
12
- * @copyright 2010 - 2012 Jim Jagielski
13
- * @copyright 2004 - 2009 Andy Prevost
14
- * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
15
- * @note This program is distributed in the hope that it will be useful - WITHOUT
16
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17
- * FITNESS FOR A PARTICULAR PURPOSE.
18
- */
19
-
20
- /**
21
- * PHPMailer RFC821 SMTP email transport class.
22
- * Implements RFC 821 SMTP commands and provides some utility methods for sending mail to an SMTP server.
23
- * @package PHPMailer
24
- * @author Chris Ryan
25
- * @author Marcus Bointon <phpmailer@synchromedia.co.uk>
26
- */
27
- class SMTP
28
- {
29
- /**
30
- * The PHPMailer SMTP version number.
31
- * @var string
32
- */
33
- const VERSION = '5.2.17';
34
-
35
- /**
36
- * SMTP line break constant.
37
- * @var string
38
- */
39
- const CRLF = "\r\n";
40
-
41
- /**
42
- * The SMTP port to use if one is not specified.
43
- * @var integer
44
- */
45
- const DEFAULT_SMTP_PORT = 25;
46
-
47
- /**
48
- * The maximum line length allowed by RFC 2822 section 2.1.1
49
- * @var integer
50
- */
51
- const MAX_LINE_LENGTH = 998;
52
-
53
- /**
54
- * Debug level for no output
55
- */
56
- const DEBUG_OFF = 0;
57
-
58
- /**
59
- * Debug level to show client -> server messages
60
- */
61
- const DEBUG_CLIENT = 1;
62
-
63
- /**
64
- * Debug level to show client -> server and server -> client messages
65
- */
66
- const DEBUG_SERVER = 2;
67
-
68
- /**
69
- * Debug level to show connection status, client -> server and server -> client messages
70
- */
71
- const DEBUG_CONNECTION = 3;
72
-
73
- /**
74
- * Debug level to show all messages
75
- */
76
- const DEBUG_LOWLEVEL = 4;
77
-
78
- /**
79
- * The PHPMailer SMTP Version number.
80
- * @var string
81
- * @deprecated Use the `VERSION` constant instead
82
- * @see SMTP::VERSION
83
- */
84
- public $Version = '5.2.17';
85
-
86
- /**
87
- * SMTP server port number.
88
- * @var integer
89
- * @deprecated This is only ever used as a default value, so use the `DEFAULT_SMTP_PORT` constant instead
90
- * @see SMTP::DEFAULT_SMTP_PORT
91
- */
92
- public $SMTP_PORT = 25;
93
-
94
- /**
95
- * SMTP reply line ending.
96
- * @var string
97
- * @deprecated Use the `CRLF` constant instead
98
- * @see SMTP::CRLF
99
- */
100
- public $CRLF = "\r\n";
101
-
102
- /**
103
- * Debug output level.
104
- * Options:
105
- * * self::DEBUG_OFF (`0`) No debug output, default
106
- * * self::DEBUG_CLIENT (`1`) Client commands
107
- * * self::DEBUG_SERVER (`2`) Client commands and server responses
108
- * * self::DEBUG_CONNECTION (`3`) As DEBUG_SERVER plus connection status
109
- * * self::DEBUG_LOWLEVEL (`4`) Low-level data output, all messages
110
- * @var integer
111
- */
112
- public $do_debug = self::DEBUG_OFF;
113
-
114
- /**
115
- * How to handle debug output.
116
- * Options:
117
- * * `echo` Output plain-text as-is, appropriate for CLI
118
- * * `html` Output escaped, line breaks converted to `<br>`, appropriate for browser output
119
- * * `error_log` Output to error log as configured in php.ini
120
- *
121
- * Alternatively, you can provide a callable expecting two params: a message string and the debug level:
122
- * <code>
123
- * $smtp->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";};
124
- * </code>
125
- * @var string|callable
126
- */
127
- public $Debugoutput = 'echo';
128
-
129
- /**
130
- * Whether to use VERP.
131
- * @link http://en.wikipedia.org/wiki/Variable_envelope_return_path
132
- * @link http://www.postfix.org/VERP_README.html Info on VERP
133
- * @var boolean
134
- */
135
- public $do_verp = false;
136
-
137
- /**
138
- * The timeout value for connection, in seconds.
139
- * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
140
- * This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
141
- * @link http://tools.ietf.org/html/rfc2821#section-4.5.3.2
142
- * @var integer
143
- */
144
- public $Timeout = 300;
145
-
146
- /**
147
- * How long to wait for commands to complete, in seconds.
148
- * Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2
149
- * @var integer
150
- */
151
- public $Timelimit = 300;
152
-
153
- /**
154
- * @var array patterns to extract smtp transaction id from smtp reply
155
- * Only first capture group will be use, use non-capturing group to deal with it
156
- * Extend this class to override this property to fulfil your needs.
157
- */
158
- protected $smtp_transaction_id_patterns = array(
159
- 'exim' => '/[0-9]{3} OK id=(.*)/',
160
- 'sendmail' => '/[0-9]{3} 2.0.0 (.*) Message/',
161
- 'postfix' => '/[0-9]{3} 2.0.0 Ok: queued as (.*)/'
162
- );
163
-
164
- /**
165
- * The socket for the server connection.
166
- * @var resource
167
- */
168
- protected $smtp_conn;
169
-
170
- /**
171
- * Error information, if any, for the last SMTP command.
172
- * @var array
173
- */
174
- protected $error = array(
175
- 'error' => '',
176
- 'detail' => '',
177
- 'smtp_code' => '',
178
- 'smtp_code_ex' => ''
179
- );
180
-
181
- /**
182
- * The reply the server sent to us for HELO.
183
- * If null, no HELO string has yet been received.
184
- * @var string|null
185
- */
186
- protected $helo_rply = null;
187
-
188
- /**
189
- * The set of SMTP extensions sent in reply to EHLO command.
190
- * Indexes of the array are extension names.
191
- * Value at index 'HELO' or 'EHLO' (according to command that was sent)
192
- * represents the server name. In case of HELO it is the only element of the array.
193
- * Other values can be boolean TRUE or an array containing extension options.
194
- * If null, no HELO/EHLO string has yet been received.
195
- * @var array|null
196
- */
197
- protected $server_caps = null;
198
-
199
- /**
200
- * The most recent reply received from the server.
201
- * @var string
202
- */
203
- protected $last_reply = '';
204
-
205
- /**
206
- * Output debugging info via a user-selected method.
207
- * @see SMTP::$Debugoutput
208
- * @see SMTP::$do_debug
209
- * @param string $str Debug string to output
210
- * @param integer $level The debug level of this message; see DEBUG_* constants
211
- * @return void
212
- */
213
- protected function edebug($str, $level = 0)
214
- {
215
- if ($level > $this->do_debug) {
216
- return;
217
- }
218
- //Avoid clash with built-in function names
219
- if (!in_array($this->Debugoutput, array('error_log', 'html', 'echo')) and is_callable($this->Debugoutput)) {
220
- call_user_func($this->Debugoutput, $str, $level);
221
- return;
222
- }
223
- switch ($this->Debugoutput) {
224
- case 'error_log':
225
- //Don't output, just log
226
- error_log($str);
227
- break;
228
- case 'html':
229
- //Cleans up output a bit for a better looking, HTML-safe output
230
- echo htmlentities(
231
- preg_replace('/[\r\n]+/', '', $str),
232
- ENT_QUOTES,
233
- 'UTF-8'
234
- )
235
- . "<br>\n";
236
- break;
237
- case 'echo':
238
- default:
239
- //Normalize line breaks
240
- $str = preg_replace('/(\r\n|\r|\n)/ms', "\n", $str);
241
- echo gmdate('Y-m-d H:i:s') . "\t" . str_replace(
242
- "\n",
243
- "\n \t ",
244
- trim($str)
245
- )."\n";
246
- }
247
- }
248
-
249
- /**
250
- * Connect to an SMTP server.
251
- * @param string $host SMTP server IP or host name
252
- * @param integer $port The port number to connect to
253
- * @param integer $timeout How long to wait for the connection to open
254
- * @param array $options An array of options for stream_context_create()
255
- * @access public
256
- * @return boolean
257
- */
258
- public function connect($host, $port = null, $timeout = 30, $options = array())
259
- {
260
- static $streamok;
261
- //This is enabled by default since 5.0.0 but some providers disable it
262
- //Check this once and cache the result
263
- if (is_null($streamok)) {
264
- $streamok = function_exists('stream_socket_client');
265
- }
266
- // Clear errors to avoid confusion
267
- $this->setError('');
268
- // Make sure we are __not__ connected
269
- if ($this->connected()) {
270
- // Already connected, generate error
271
- $this->setError('Already connected to a server');
272
- return false;
273
- }
274
- if (empty($port)) {
275
- $port = self::DEFAULT_SMTP_PORT;
276
- }
277
- // Connect to the SMTP server
278
- $this->edebug(
279
- "Connection: opening to $host:$port, timeout=$timeout, options=".var_export($options, true),
280
- self::DEBUG_CONNECTION
281
- );
282
- $errno = 0;
283
- $errstr = '';
284
- if ($streamok) {
285
- $socket_context = stream_context_create($options);
286
- set_error_handler(array($this, 'errorHandler'));
287
- $this->smtp_conn = stream_socket_client(
288
- $host . ":" . $port,
289
- $errno,
290
- $errstr,
291
- $timeout,
292
- STREAM_CLIENT_CONNECT,
293
- $socket_context
294
- );
295
- restore_error_handler();
296
- } else {
297
- //Fall back to fsockopen which should work in more places, but is missing some features
298
- $this->edebug(
299
- "Connection: stream_socket_client not available, falling back to fsockopen",
300
- self::DEBUG_CONNECTION
301
- );
302
- set_error_handler(array($this, 'errorHandler'));
303
- $this->smtp_conn = fsockopen(
304
- $host,
305
- $port,
306
- $errno,
307
- $errstr,
308
- $timeout
309
- );
310
- restore_error_handler();
311
- }
312
- // Verify we connected properly
313
- if (!is_resource($this->smtp_conn)) {
314
- $this->setError(
315
- 'Failed to connect to server',
316
- $errno,
317
- $errstr
318
- );
319
- $this->edebug(
320
- 'SMTP ERROR: ' . $this->error['error']
321
- . ": $errstr ($errno)",
322
- self::DEBUG_CLIENT
323
- );
324
- return false;
325
- }
326
- $this->edebug('Connection: opened', self::DEBUG_CONNECTION);
327
- // SMTP server can take longer to respond, give longer timeout for first read
328
- // Windows does not have support for this timeout function
329
- if (substr(PHP_OS, 0, 3) != 'WIN') {
330
- $max = ini_get('max_execution_time');
331
- // Don't bother if unlimited
332
- if ($max != 0 && $timeout > $max) {
333
- @set_time_limit($timeout);
334
- }
335
- stream_set_timeout($this->smtp_conn, $timeout, 0);
336
- }
337
- // Get any announcement
338
- $announce = $this->get_lines();
339
- $this->edebug('SERVER -> CLIENT: ' . $announce, self::DEBUG_SERVER);
340
- return true;
341
- }
342
-
343
- /**
344
- * Initiate a TLS (encrypted) session.
345
- * @access public
346
- * @return boolean
347
- */
348
- public function startTLS()
349
- {
350
- if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
351
- return false;
352
- }
353
-
354
- //Allow the best TLS version(s) we can
355
- $crypto_method = STREAM_CRYPTO_METHOD_TLS_CLIENT;
356
-
357
- //PHP 5.6.7 dropped inclusion of TLS 1.1 and 1.2 in STREAM_CRYPTO_METHOD_TLS_CLIENT
358
- //so add them back in manually if we can
359
- if (defined('STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT')) {
360
- $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT;
361
- $crypto_method |= STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT;
362
- }
363
-
364
- // Begin encrypted connection
365
- if (!stream_socket_enable_crypto(
366
- $this->smtp_conn,
367
- true,
368
- $crypto_method
369
- )) {
370
- return false;
371
- }
372
- return true;
373
- }
374
-
375
- /**
376
- * Perform SMTP authentication.
377
- * Must be run after hello().
378
- * @see hello()
379
- * @param string $username The user name
380
- * @param string $password The password
381
- * @param string $authtype The auth type (PLAIN, LOGIN, NTLM, CRAM-MD5, XOAUTH2)
382
- * @param string $realm The auth realm for NTLM
383
- * @param string $workstation The auth workstation for NTLM
384
- * @param null|OAuth $OAuth An optional OAuth instance (@see PHPMailerOAuth)
385
- * @return bool True if successfully authenticated.* @access public
386
- */
387
- public function authenticate(
388
- $username,
389
- $password,
390
- $authtype = null,
391
- $realm = '',
392
- $workstation = '',
393
- $OAuth = null
394
- ) {
395
- if (!$this->server_caps) {
396
- $this->setError('Authentication is not allowed before HELO/EHLO');
397
- return false;
398
- }
399
-
400
- if (array_key_exists('EHLO', $this->server_caps)) {
401
- // SMTP extensions are available. Let's try to find a proper authentication method
402
-
403
- if (!array_key_exists('AUTH', $this->server_caps)) {
404
- $this->setError('Authentication is not allowed at this stage');
405
- // 'at this stage' means that auth may be allowed after the stage changes
406
- // e.g. after STARTTLS
407
- return false;
408
- }
409
-
410
- self::edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNKNOWN'), self::DEBUG_LOWLEVEL);
411
- self::edebug(
412
- 'Auth methods available on the server: ' . implode(',', $this->server_caps['AUTH']),
413
- self::DEBUG_LOWLEVEL
414
- );
415
-
416
- if (empty($authtype)) {
417
- foreach (array('CRAM-MD5', 'LOGIN', 'PLAIN', 'NTLM', 'XOAUTH2') as $method) {
418
- if (in_array($method, $this->server_caps['AUTH'])) {
419
- $authtype = $method;
420
- break;
421
- }
422
- }
423
- if (empty($authtype)) {
424
- $this->setError('No supported authentication methods found');
425
- return false;
426
- }
427
- self::edebug('Auth method selected: '.$authtype, self::DEBUG_LOWLEVEL);
428
- }
429
-
430
- if (!in_array($authtype, $this->server_caps['AUTH'])) {
431
- $this->setError("The requested authentication method \"$authtype\" is not supported by the server");
432
- return false;
433
- }
434
- } elseif (empty($authtype)) {
435
- $authtype = 'LOGIN';
436
- }
437
- switch ($authtype) {
438
- case 'PLAIN':
439
- // Start authentication
440
- if (!$this->sendCommand('AUTH', 'AUTH PLAIN', 334)) {
441
- return false;
442
- }
443
- // Send encoded username and password
444
- if (!$this->sendCommand(
445
- 'User & Password',
446
- base64_encode("\0" . $username . "\0" . $password),
447
- 235
448
- )
449
- ) {
450
- return false;
451
- }
452
- break;
453
- case 'LOGIN':
454
- // Start authentication
455
- if (!$this->sendCommand('AUTH', 'AUTH LOGIN', 334)) {
456
- return false;
457
- }
458
- if (!$this->sendCommand("Username", base64_encode($username), 334)) {
459
- return false;
460
- }
461
- if (!$this->sendCommand("Password", base64_encode($password), 235)) {
462
- return false;
463
- }
464
- break;
465
- case 'XOAUTH2':
466
- //If the OAuth Instance is not set. Can be a case when PHPMailer is used
467
- //instead of PHPMailerOAuth
468
- if (is_null($OAuth)) {
469
- return false;
470
- }
471
- $oauth = $OAuth->getOauth64();
472
-
473
- // Start authentication
474
- if (!$this->sendCommand('AUTH', 'AUTH XOAUTH2 ' . $oauth, 235)) {
475
- return false;
476
- }
477
- break;
478
- case 'NTLM':
479
- /*
480
- * ntlm_sasl_client.php
481
- * Bundled with Permission
482
- *
483
- * How to telnet in windows:
484
- * http://technet.microsoft.com/en-us/library/aa995718%28EXCHG.65%29.aspx
485
- * PROTOCOL Docs http://curl.haxx.se/rfc/ntlm.html#ntlmSmtpAuthentication
486
- */
487
- require_once 'extras/ntlm_sasl_client.php';
488
- $temp = new stdClass;
489
- $ntlm_client = new ntlm_sasl_client_class;
490
- //Check that functions are available
491
- if (!$ntlm_client->initialize($temp)) {
492
- $this->setError($temp->error);
493
- $this->edebug(
494
- 'You need to enable some modules in your php.ini file: '
495
- . $this->error['error'],
496
- self::DEBUG_CLIENT
497
- );
498
- return false;
499
- }
500
- //msg1
501
- $msg1 = $ntlm_client->typeMsg1($realm, $workstation); //msg1
502
-
503
- if (!$this->sendCommand(
504
- 'AUTH NTLM',
505
- 'AUTH NTLM ' . base64_encode($msg1),
506
- 334
507
- )
508
- ) {
509
- return false;
510
- }
511
- //Though 0 based, there is a white space after the 3 digit number
512
- //msg2
513
- $challenge = substr($this->last_reply, 3);
514
- $challenge = base64_decode($challenge);
515
- $ntlm_res = $ntlm_client->NTLMResponse(
516
- substr($challenge, 24, 8),
517
- $password
518
- );
519
- //msg3
520
- $msg3 = $ntlm_client->typeMsg3(
521
- $ntlm_res,
522
- $username,
523
- $realm,
524
- $workstation
525
- );
526
- // send encoded username
527
- return $this->sendCommand('Username', base64_encode($msg3), 235);
528
- case 'CRAM-MD5':
529
- // Start authentication
530
- if (!$this->sendCommand('AUTH CRAM-MD5', 'AUTH CRAM-MD5', 334)) {
531
- return false;
532
- }
533
- // Get the challenge
534
- $challenge = base64_decode(substr($this->last_reply, 4));
535
-
536
- // Build the response
537
- $response = $username . ' ' . $this->hmac($challenge, $password);
538
-
539
- // send encoded credentials
540
- return $this->sendCommand('Username', base64_encode($response), 235);
541
- default:
542
- $this->setError("Authentication method \"$authtype\" is not supported");
543
- return false;
544
- }
545
- return true;
546
- }
547
-
548
- /**
549
- * Calculate an MD5 HMAC hash.
550
- * Works like hash_hmac('md5', $data, $key)
551
- * in case that function is not available
552
- * @param string $data The data to hash
553
- * @param string $key The key to hash with
554
- * @access protected
555
- * @return string
556
- */
557
- protected function hmac($data, $key)
558
- {
559
- if (function_exists('hash_hmac')) {
560
- return hash_hmac('md5', $data, $key);
561
- }
562
-
563
- // The following borrowed from
564
- // http://php.net/manual/en/function.mhash.php#27225
565
-
566
- // RFC 2104 HMAC implementation for php.
567
- // Creates an md5 HMAC.
568
- // Eliminates the need to install mhash to compute a HMAC
569
- // by Lance Rushing
570
-
571
- $bytelen = 64; // byte length for md5
572
- if (strlen($key) > $bytelen) {
573
- $key = pack('H*', md5($key));
574
- }
575
- $key = str_pad($key, $bytelen, chr(0x00));
576
- $ipad = str_pad('', $bytelen, chr(0x36));
577
- $opad = str_pad('', $bytelen, chr(0x5c));
578
- $k_ipad = $key ^ $ipad;
579
- $k_opad = $key ^ $opad;
580
-
581
- return md5($k_opad . pack('H*', md5($k_ipad . $data)));
582
- }
583
-
584
- /**
585
- * Check connection state.
586
- * @access public
587
- * @return boolean True if connected.
588
- */
589
- public function connected()
590
- {
591
- if (is_resource($this->smtp_conn)) {
592
- $sock_status = stream_get_meta_data($this->smtp_conn);
593
- if ($sock_status['eof']) {
594
- // The socket is valid but we are not connected
595
- $this->edebug(
596
- 'SMTP NOTICE: EOF caught while checking if connected',
597
- self::DEBUG_CLIENT
598
- );
599
- $this->close();
600
- return false;
601
- }
602
- return true; // everything looks good
603
- }
604
- return false;
605
- }
606
-
607
- /**
608
- * Close the socket and clean up the state of the class.
609
- * Don't use this function without first trying to use QUIT.
610
- * @see quit()
611
- * @access public
612
- * @return void
613
- */
614
- public function close()
615
- {
616
- $this->setError('');
617
- $this->server_caps = null;
618
- $this->helo_rply = null;
619
- if (is_resource($this->smtp_conn)) {
620
- // close the connection and cleanup
621
- fclose($this->smtp_conn);
622
- $this->smtp_conn = null; //Makes for cleaner serialization
623
- $this->edebug('Connection: closed', self::DEBUG_CONNECTION);
624
- }
625
- }
626
-
627
- /**
628
- * Send an SMTP DATA command.
629
- * Issues a data command and sends the msg_data to the server,
630
- * finializing the mail transaction. $msg_data is the message
631
- * that is to be send with the headers. Each header needs to be
632
- * on a single line followed by a <CRLF> with the message headers
633
- * and the message body being separated by and additional <CRLF>.
634
- * Implements rfc 821: DATA <CRLF>
635
- * @param string $msg_data Message data to send
636
- * @access public
637
- * @return boolean
638
- */
639
- public function data($msg_data)
640
- {
641
- //This will use the standard timelimit
642
- if (!$this->sendCommand('DATA', 'DATA', 354)) {
643
- return false;
644
- }
645
-
646
- /* The server is ready to accept data!
647
- * According to rfc821 we should not send more than 1000 characters on a single line (including the CRLF)
648
- * so we will break the data up into lines by \r and/or \n then if needed we will break each of those into
649
- * smaller lines to fit within the limit.
650
- * We will also look for lines that start with a '.' and prepend an additional '.'.
651
- * NOTE: this does not count towards line-length limit.
652
- */
653
-
654
- // Normalize line breaks before exploding
655
- $lines = explode("\n", str_replace(array("\r\n", "\r"), "\n", $msg_data));
656
-
657
- /* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
658
- * of the first line (':' separated) does not contain a space then it _should_ be a header and we will
659
- * process all lines before a blank line as headers.
660
- */
661
-
662
- $field = substr($lines[0], 0, strpos($lines[0], ':'));
663
- $in_headers = false;
664
- if (!empty($field) && strpos($field, ' ') === false) {
665
- $in_headers = true;
666
- }
667
-
668
- foreach ($lines as $line) {
669
- $lines_out = array();
670
- if ($in_headers and $line == '') {
671
- $in_headers = false;
672
- }
673
- //Break this line up into several smaller lines if it's too long
674
- //Micro-optimisation: isset($str[$len]) is faster than (strlen($str) > $len),
675
- while (isset($line[self::MAX_LINE_LENGTH])) {
676
- //Working backwards, try to find a space within the last MAX_LINE_LENGTH chars of the line to break on
677
- //so as to avoid breaking in the middle of a word
678
- $pos = strrpos(substr($line, 0, self::MAX_LINE_LENGTH), ' ');
679
- //Deliberately matches both false and 0
680
- if (!$pos) {
681
- //No nice break found, add a hard break
682
- $pos = self::MAX_LINE_LENGTH - 1;
683
- $lines_out[] = substr($line, 0, $pos);
684
- $line = substr($line, $pos);
685
- } else {
686
- //Break at the found point
687
- $lines_out[] = substr($line, 0, $pos);
688
- //Move along by the amount we dealt with
689
- $line = substr($line, $pos + 1);
690
- }
691
- //If processing headers add a LWSP-char to the front of new line RFC822 section 3.1.1
692
- if ($in_headers) {
693
- $line = "\t" . $line;
694
- }
695
- }
696
- $lines_out[] = $line;
697
-
698
- //Send the lines to the server
699
- foreach ($lines_out as $line_out) {
700
- //RFC2821 section 4.5.2
701
- if (!empty($line_out) and $line_out[0] == '.') {
702
- $line_out = '.' . $line_out;
703
- }
704
- $this->client_send($line_out . self::CRLF);
705
- }
706
- }
707
-
708
- //Message data has been sent, complete the command
709
- //Increase timelimit for end of DATA command
710
- $savetimelimit = $this->Timelimit;
711
- $this->Timelimit = $this->Timelimit * 2;
712
- $result = $this->sendCommand('DATA END', '.', 250);
713
- //Restore timelimit
714
- $this->Timelimit = $savetimelimit;
715
- return $result;
716
- }
717
-
718
- /**
719
- * Send an SMTP HELO or EHLO command.
720
- * Used to identify the sending server to the receiving server.
721
- * This makes sure that client and server are in a known state.
722
- * Implements RFC 821: HELO <SP> <domain> <CRLF>
723
- * and RFC 2821 EHLO.
724
- * @param string $host The host name or IP to connect to
725
- * @access public
726
- * @return boolean
727
- */
728
- public function hello($host = '')
729
- {
730
- //Try extended hello first (RFC 2821)
731
- return (boolean)($this->sendHello('EHLO', $host) or $this->sendHello('HELO', $host));
732
- }
733
-
734
- /**
735
- * Send an SMTP HELO or EHLO command.
736
- * Low-level implementation used by hello()
737
- * @see hello()
738
- * @param string $hello The HELO string
739
- * @param string $host The hostname to say we are
740
- * @access protected
741
- * @return boolean
742
- */
743
- protected function sendHello($hello, $host)
744
- {
745
- $noerror = $this->sendCommand($hello, $hello . ' ' . $host, 250);
746
- $this->helo_rply = $this->last_reply;
747
- if ($noerror) {
748
- $this->parseHelloFields($hello);
749
- } else {
750
- $this->server_caps = null;
751
- }
752
- return $noerror;
753
- }
754
-
755
- /**
756
- * Parse a reply to HELO/EHLO command to discover server extensions.
757
- * In case of HELO, the only parameter that can be discovered is a server name.
758
- * @access protected
759
- * @param string $type - 'HELO' or 'EHLO'
760
- */
761
- protected function parseHelloFields($type)
762
- {
763
- $this->server_caps = array();
764
- $lines = explode("\n", $this->helo_rply);
765
-
766
- foreach ($lines as $n => $s) {
767
- //First 4 chars contain response code followed by - or space
768
- $s = trim(substr($s, 4));
769
- if (empty($s)) {
770
- continue;
771
- }
772
- $fields = explode(' ', $s);
773
- if (!empty($fields)) {
774
- if (!$n) {
775
- $name = $type;
776
- $fields = $fields[0];
777
- } else {
778
- $name = array_shift($fields);
779
- switch ($name) {
780
- case 'SIZE':
781
- $fields = ($fields ? $fields[0] : 0);
782
- break;
783
- case 'AUTH':
784
- if (!is_array($fields)) {
785
- $fields = array();
786
- }
787
- break;
788
- default:
789
- $fields = true;
790
- }
791
- }
792
- $this->server_caps[$name] = $fields;
793
- }
794
- }
795
- }
796
-
797
- /**
798
- * Send an SMTP MAIL command.
799
- * Starts a mail transaction from the email address specified in
800
- * $from. Returns true if successful or false otherwise. If True
801
- * the mail transaction is started and then one or more recipient
802
- * commands may be called followed by a data command.
803
- * Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
804
- * @param string $from Source address of this message
805
- * @access public
806
- * @return boolean
807
- */
808
- public function mail($from)
809
- {
810
- $useVerp = ($this->do_verp ? ' XVERP' : '');
811
- return $this->sendCommand(
812
- 'MAIL FROM',
813
- 'MAIL FROM:<' . $from . '>' . $useVerp,
814
- 250
815
- );
816
- }
817
-
818
- /**
819
- * Send an SMTP QUIT command.
820
- * Closes the socket if there is no error or the $close_on_error argument is true.
821
- * Implements from rfc 821: QUIT <CRLF>
822
- * @param boolean $close_on_error Should the connection close if an error occurs?
823
- * @access public
824
- * @return boolean
825
- */
826
- public function quit($close_on_error = true)
827
- {
828
- $noerror = $this->sendCommand('QUIT', 'QUIT', 221);
829
- $err = $this->error; //Save any error
830
- if ($noerror or $close_on_error) {
831
- $this->close();
832
- $this->error = $err; //Restore any error from the quit command
833
- }
834
- return $noerror;
835
- }
836
-
837
- /**
838
- * Send an SMTP RCPT command.
839
- * Sets the TO argument to $toaddr.
840
- * Returns true if the recipient was accepted false if it was rejected.
841
- * Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
842
- * @param string $address The address the message is being sent to
843
- * @access public
844
- * @return boolean
845
- */
846
- public function recipient($address)
847
- {
848
- return $this->sendCommand(
849
- 'RCPT TO',
850
- 'RCPT TO:<' . $address . '>',
851
- array(250, 251)
852
- );
853
- }
854
-
855
- /**
856
- * Send an SMTP RSET command.
857
- * Abort any transaction that is currently in progress.
858
- * Implements rfc 821: RSET <CRLF>
859
- * @access public
860
- * @return boolean True on success.
861
- */
862
- public function reset()
863
- {
864
- return $this->sendCommand('RSET', 'RSET', 250);
865
- }
866
-
867
- /**
868
- * Send a command to an SMTP server and check its return code.
869
- * @param string $command The command name - not sent to the server
870
- * @param string $commandstring The actual command to send
871
- * @param integer|array $expect One or more expected integer success codes
872
- * @access protected
873
- * @return boolean True on success.
874
- */
875
- protected function sendCommand($command, $commandstring, $expect)
876
- {
877
- if (!$this->connected()) {
878
- $this->setError("Called $command without being connected");
879
- return false;
880
- }
881
- //Reject line breaks in all commands
882
- if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) {
883
- $this->setError("Command '$command' contained line breaks");
884
- return false;
885
- }
886
- $this->client_send($commandstring . self::CRLF);
887
-
888
- $this->last_reply = $this->get_lines();
889
- // Fetch SMTP code and possible error code explanation
890
- $matches = array();
891
- if (preg_match("/^([0-9]{3})[ -](?:([0-9]\\.[0-9]\\.[0-9]) )?/", $this->last_reply, $matches)) {
892
- $code = $matches[1];
893
- $code_ex = (count($matches) > 2 ? $matches[2] : null);
894
- // Cut off error code from each response line
895
- $detail = preg_replace(
896
- "/{$code}[ -]".($code_ex ? str_replace('.', '\\.', $code_ex).' ' : '')."/m",
897
- '',
898
- $this->last_reply
899
- );
900
- } else {
901
- // Fall back to simple parsing if regex fails
902
- $code = substr($this->last_reply, 0, 3);
903
- $code_ex = null;
904
- $detail = substr($this->last_reply, 4);
905
- }
906
-
907
- $this->edebug('SERVER -> CLIENT: ' . $this->last_reply, self::DEBUG_SERVER);
908
-
909
- if (!in_array($code, (array)$expect)) {
910
- $this->setError(
911
- "$command command failed",
912
- $detail,
913
- $code,
914
- $code_ex
915
- );
916
- $this->edebug(
917
- 'SMTP ERROR: ' . $this->error['error'] . ': ' . $this->last_reply,
918
- self::DEBUG_CLIENT
919
- );
920
- return false;
921
- }
922
-
923
- $this->setError('');
924
- return true;
925
- }
926
-
927
- /**
928
- * Send an SMTP SAML command.
929
- * Starts a mail transaction from the email address specified in $from.
930
- * Returns true if successful or false otherwise. If True
931
- * the mail transaction is started and then one or more recipient
932
- * commands may be called followed by a data command. This command
933
- * will send the message to the users terminal if they are logged
934
- * in and send them an email.
935
- * Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
936
- * @param string $from The address the message is from
937
- * @access public
938
- * @return boolean
939
- */
940
- public function sendAndMail($from)
941
- {
942
- return $this->sendCommand('SAML', "SAML FROM:$from", 250);
943
- }
944
-
945
- /**
946
- * Send an SMTP VRFY command.
947
- * @param string $name The name to verify
948
- * @access public
949
- * @return boolean
950
- */
951
- public function verify($name)
952
- {
953
- return $this->sendCommand('VRFY', "VRFY $name", array(250, 251));
954
- }
955
-
956
- /**
957
- * Send an SMTP NOOP command.
958
- * Used to keep keep-alives alive, doesn't actually do anything
959
- * @access public
960
- * @return boolean
961
- */
962
- public function noop()
963
- {
964
- return $this->sendCommand('NOOP', 'NOOP', 250);
965
- }
966
-
967
- /**
968
- * Send an SMTP TURN command.
969
- * This is an optional command for SMTP that this class does not support.
970
- * This method is here to make the RFC821 Definition complete for this class
971
- * and _may_ be implemented in future
972
- * Implements from rfc 821: TURN <CRLF>
973
- * @access public
974
- * @return boolean
975
- */
976
- public function turn()
977
- {
978
- $this->setError('The SMTP TURN command is not implemented');
979
- $this->edebug('SMTP NOTICE: ' . $this->error['error'], self::DEBUG_CLIENT);
980
- return false;
981
- }
982
-
983
- /**
984
- * Send raw data to the server.
985
- * @param string $data The data to send
986
- * @access public
987
- * @return integer|boolean The number of bytes sent to the server or false on error
988
- */
989
- public function client_send($data)
990
- {
991
- $this->edebug("CLIENT -> SERVER: $data", self::DEBUG_CLIENT);
992
- return fwrite($this->smtp_conn, $data);
993
- }
994
-
995
- /**
996
- * Get the latest error.
997
- * @access public
998
- * @return array
999
- */
1000
- public function getError()
1001
- {
1002
- return $this->error;
1003
- }
1004
-
1005
- /**
1006
- * Get SMTP extensions available on the server
1007
- * @access public
1008
- * @return array|null
1009
- */
1010
- public function getServerExtList()
1011
- {
1012
- return $this->server_caps;
1013
- }
1014
-
1015
- /**
1016
- * A multipurpose method
1017
- * The method works in three ways, dependent on argument value and current state
1018
- * 1. HELO/EHLO was not sent - returns null and set up $this->error
1019
- * 2. HELO was sent
1020
- * $name = 'HELO': returns server name
1021
- * $name = 'EHLO': returns boolean false
1022
- * $name = any string: returns null and set up $this->error
1023
- * 3. EHLO was sent
1024
- * $name = 'HELO'|'EHLO': returns server name
1025
- * $name = any string: if extension $name exists, returns boolean True
1026
- * or its options. Otherwise returns boolean False
1027
- * In other words, one can use this method to detect 3 conditions:
1028
- * - null returned: handshake was not or we don't know about ext (refer to $this->error)
1029
- * - false returned: the requested feature exactly not exists
1030
- * - positive value returned: the requested feature exists
1031
- * @param string $name Name of SMTP extension or 'HELO'|'EHLO'
1032
- * @return mixed
1033
- */
1034
- public function getServerExt($name)
1035
- {
1036
- if (!$this->server_caps) {
1037
- $this->setError('No HELO/EHLO was sent');
1038
- return null;
1039
- }
1040
-
1041
- // the tight logic knot ;)
1042
- if (!array_key_exists($name, $this->server_caps)) {
1043
- if ($name == 'HELO') {
1044
- return $this->server_caps['EHLO'];
1045
- }
1046
- if ($name == 'EHLO' || array_key_exists('EHLO', $this->server_caps)) {
1047
- return false;
1048
- }
1049
- $this->setError('HELO handshake was used. Client knows nothing about server extensions');
1050
- return null;
1051
- }
1052
-
1053
- return $this->server_caps[$name];
1054
- }
1055
-
1056
- /**
1057
- * Get the last reply from the server.
1058
- * @access public
1059
- * @return string
1060
- */
1061
- public function getLastReply()
1062
- {
1063
- return $this->last_reply;
1064
- }
1065
-
1066
- /**
1067
- * Read the SMTP server's response.
1068
- * Either before eof or socket timeout occurs on the operation.
1069
- * With SMTP we can tell if we have more lines to read if the
1070
- * 4th character is '-' symbol. If it is a space then we don't
1071
- * need to read anything else.
1072
- * @access protected
1073
- * @return string
1074
- */
1075
- protected function get_lines()
1076
- {
1077
- // If the connection is bad, give up straight away
1078
- if (!is_resource($this->smtp_conn)) {
1079
- return '';
1080
- }
1081
- $data = '';
1082
- $endtime = 0;
1083
- stream_set_timeout($this->smtp_conn, $this->Timeout);
1084
- if ($this->Timelimit > 0) {
1085
- $endtime = time() + $this->Timelimit;
1086
- }
1087
- while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
1088
- $str = @fgets($this->smtp_conn, 515);
1089
- $this->edebug("SMTP -> get_lines(): \$data is \"$data\"", self::DEBUG_LOWLEVEL);
1090
- $this->edebug("SMTP -> get_lines(): \$str is \"$str\"", self::DEBUG_LOWLEVEL);
1091
- $data .= $str;
1092
- // If 4th character is a space, we are done reading, break the loop, micro-optimisation over strlen
1093
- if ((isset($str[3]) and $str[3] == ' ')) {
1094
- break;
1095
- }
1096
- // Timed-out? Log and break
1097
- $info = stream_get_meta_data($this->smtp_conn);
1098
- if ($info['timed_out']) {
1099
- $this->edebug(
1100
- 'SMTP -> get_lines(): timed-out (' . $this->Timeout . ' sec)',
1101
- self::DEBUG_LOWLEVEL
1102
- );
1103
- break;
1104
- }
1105
- // Now check if reads took too long
1106
- if ($endtime and time() > $endtime) {
1107
- $this->edebug(
1108
- 'SMTP -> get_lines(): timelimit reached ('.
1109
- $this->Timelimit . ' sec)',
1110
- self::DEBUG_LOWLEVEL
1111
- );
1112
- break;
1113
- }
1114
- }
1115
- return $data;
1116
- }
1117
-
1118
- /**
1119
- * Enable or disable VERP address generation.
1120
- * @param boolean $enabled
1121
- */
1122
- public function setVerp($enabled = false)
1123
- {
1124
- $this->do_verp = $enabled;
1125
- }
1126
-
1127
- /**
1128
- * Get VERP address generation mode.
1129
- * @return boolean
1130
- */
1131
- public function getVerp()
1132
- {
1133
- return $this->do_verp;
1134
- }
1135
-
1136
- /**
1137
- * Set error messages and codes.
1138
- * @param string $message The error message
1139
- * @param string $detail Further detail on the error
1140
- * @param string $smtp_code An associated SMTP error code
1141
- * @param string $smtp_code_ex Extended SMTP code
1142
- */
1143
- protected function setError($message, $detail = '', $smtp_code = '', $smtp_code_ex = '')
1144
- {
1145
- $this->error = array(
1146
- 'error' => $message,
1147
- 'detail' => $detail,
1148
- 'smtp_code' => $smtp_code,
1149
- 'smtp_code_ex' => $smtp_code_ex
1150
- );
1151
- }
1152
-
1153
- /**
1154
- * Set debug output method.
1155
- * @param string|callable $method The name of the mechanism to use for debugging output, or a callable to handle it.
1156
- */
1157
- public function setDebugOutput($method = 'echo')
1158
- {
1159
- $this->Debugoutput = $method;
1160
- }
1161
-
1162
- /**
1163
- * Get debug output method.
1164
- * @return string
1165
- */
1166
- public function getDebugOutput()
1167
- {
1168
- return $this->Debugoutput;
1169
- }
1170
-
1171
- /**
1172
- * Set debug output level.
1173
- * @param integer $level
1174
- */
1175
- public function setDebugLevel($level = 0)
1176
- {
1177
- $this->do_debug = $level;
1178
- }
1179
-
1180
- /**
1181
- * Get debug output level.
1182
- * @return integer
1183
- */
1184
- public function getDebugLevel()
1185
- {
1186
- return $this->do_debug;
1187
- }
1188
-
1189
- /**
1190
- * Set SMTP timeout.
1191
- * @param integer $timeout
1192
- */
1193
- public function setTimeout($timeout = 0)
1194
- {
1195
- $this->Timeout = $timeout;
1196
- }
1197
-
1198
- /**
1199
- * Get SMTP timeout.
1200
- * @return integer
1201
- */
1202
- public function getTimeout()
1203
- {
1204
- return $this->Timeout;
1205
- }
1206
-
1207
- /**
1208
- * Reports an error number and string.
1209
- * @param integer $errno The error number returned by PHP.
1210
- * @param string $errmsg The error message returned by PHP.
1211
- */
1212
- protected function errorHandler($errno, $errmsg)
1213
- {
1214
- $notice = 'Connection: Failed to connect to server.';
1215
- $this->setError(
1216
- $notice,
1217
- $errno,
1218
- $errmsg
1219
- );
1220
- $this->edebug(
1221
- $notice . ' Error number ' . $errno . '. "Error notice: ' . $errmsg,
1222
- self::DEBUG_CONNECTION
1223
- );
1224
- }
1225
-
1226
- /**
1227
- * Will return the ID of the last smtp transaction based on a list of patterns provided
1228
- * in SMTP::$smtp_transaction_id_patterns.
1229
- * If no reply has been received yet, it will return null.
1230
- * If no pattern has been matched, it will return false.
1231
- * @return bool|null|string
1232
- */
1233
- public function getLastTransactionID()
1234
- {
1235
- $reply = $this->getLastReply();
1236
-
1237
- if (empty($reply)) {
1238
- return null;
1239
- }
1240
-
1241
- foreach($this->smtp_transaction_id_patterns as $smtp_transaction_id_pattern) {
1242
- if(preg_match($smtp_transaction_id_pattern, $reply, $matches)) {
1243
- return $matches[1];
1244
- }
1245
- }
1246
-
1247
- return false;
1248
- }
1249
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/mail/engines/get_oauth_token.php DELETED
@@ -1,162 +0,0 @@
1
- <?php
2
- /**
3
- * Get an OAuth2 token from Google.
4
- * * Install this script on your server so that it's accessible
5
- * as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
6
- * e.g.: http://localhost/phpmail/get_oauth_token.php
7
- * * Ensure dependencies are installed with 'composer install'
8
- * * Set up an app in your Google developer console
9
- * * Set the script address as the app's redirect URL
10
- * If no refresh token is obtained when running this file, revoke access to your app
11
- * using link: https://accounts.google.com/b/0/IssuedAuthSubTokens and run the script again.
12
- * This script requires PHP 5.4 or later
13
- * PHP Version 5.4
14
- */
15
-
16
- namespace League\OAuth2\Client\Provider;
17
-
18
- require 'vendor/autoload.php';
19
-
20
- use League\OAuth2\Client\Provider\Exception\IdentityProviderException;
21
- use League\OAuth2\Client\Token\AccessToken;
22
- use League\OAuth2\Client\Tool\BearerAuthorizationTrait;
23
- use Psr\Http\Message\ResponseInterface;
24
-
25
- session_start();
26
-
27
- //If this automatic URL doesn't work, set it yourself manually
28
- $redirectUri = isset($_SERVER['HTTPS']) ? 'https://' : 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
29
- //$redirectUri = 'http://localhost/phpmailer/get_oauth_token.php';
30
-
31
- //These details obtained are by setting up app in Google developer console.
32
- $clientId = 'RANDOMCHARS-----duv1n2.apps.googleusercontent.com';
33
- $clientSecret = 'RANDOMCHARS-----lGyjPcRtvP';
34
-
35
- class Google extends AbstractProvider
36
- {
37
- use BearerAuthorizationTrait;
38
-
39
- const ACCESS_TOKEN_RESOURCE_OWNER_ID = 'id';
40
-
41
- /**
42
- * @var string If set, this will be sent to google as the "access_type" parameter.
43
- * @link https://developers.google.com/accounts/docs/OAuth2WebServer#offline
44
- */
45
- protected $accessType;
46
-
47
- /**
48
- * @var string If set, this will be sent to google as the "hd" parameter.
49
- * @link https://developers.google.com/accounts/docs/OAuth2Login#hd-param
50
- */
51
- protected $hostedDomain;
52
-
53
- /**
54
- * @var string If set, this will be sent to google as the "scope" parameter.
55
- * @link https://developers.google.com/gmail/api/auth/scopes
56
- */
57
- protected $scope;
58
-
59
- public function getBaseAuthorizationUrl()
60
- {
61
- return 'https://accounts.google.com/o/oauth2/auth';
62
- }
63
-
64
- public function getBaseAccessTokenUrl(array $params)
65
- {
66
- return 'https://accounts.google.com/o/oauth2/token';
67
- }
68
-
69
- public function getResourceOwnerDetailsUrl(AccessToken $token)
70
- {
71
- return ' ';
72
- }
73
-
74
- protected function getAuthorizationParameters(array $options)
75
- {
76
- if (is_array($this->scope)) {
77
- $separator = $this->getScopeSeparator();
78
- $this->scope = implode($separator, $this->scope);
79
- }
80
-
81
- $params = array_merge(
82
- parent::getAuthorizationParameters($options),
83
- array_filter([
84
- 'hd' => $this->hostedDomain,
85
- 'access_type' => $this->accessType,
86
- 'scope' => $this->scope,
87
- // if the user is logged in with more than one account ask which one to use for the login!
88
- 'authuser' => '-1'
89
- ])
90
- );
91
- return $params;
92
- }
93
-
94
- protected function getDefaultScopes()
95
- {
96
- return [
97
- 'email',
98
- 'openid',
99
- 'profile',
100
- ];
101
- }
102
-
103
- protected function getScopeSeparator()
104
- {
105
- return ' ';
106
- }
107
-
108
- protected function checkResponse(ResponseInterface $response, $data)
109
- {
110
- if (!empty($data['error'])) {
111
- $code = 0;
112
- $error = $data['error'];
113
-
114
- if (is_array($error)) {
115
- $code = $error['code'];
116
- $error = $error['message'];
117
- }
118
-
119
- throw new IdentityProviderException($error, $code, $data);
120
- }
121
- }
122
-
123
- protected function createResourceOwner(array $response, AccessToken $token)
124
- {
125
- return new GoogleUser($response);
126
- }
127
- }
128
-
129
-
130
- //Set Redirect URI in Developer Console as [https/http]://<yourdomain>/<folder>/get_oauth_token.php
131
- $provider = new Google(
132
- array(
133
- 'clientId' => $clientId,
134
- 'clientSecret' => $clientSecret,
135
- 'redirectUri' => $redirectUri,
136
- 'scope' => array('https://mail.google.com/'),
137
- 'accessType' => 'offline'
138
- )
139
- );
140
-
141
- if (!isset($_GET['code'])) {
142
- // If we don't have an authorization code then get one
143
- $authUrl = $provider->getAuthorizationUrl();
144
- $_SESSION['oauth2state'] = $provider->getState();
145
- header('Location: ' . $authUrl);
146
- exit;
147
- // Check given state against previously stored one to mitigate CSRF attack
148
- } elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) {
149
- unset($_SESSION['oauth2state']);
150
- exit('Invalid state');
151
- } else {
152
- // Try to get an access token (using the authorization code grant)
153
- $token = $provider->getAccessToken(
154
- 'authorization_code',
155
- array(
156
- 'code' => $_GET['code']
157
- )
158
- );
159
-
160
- // Use this to get a new access token if the old one expires
161
- echo 'Refresh Token: ' . $token->getRefreshToken();
162
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
modules/mail/mod.php CHANGED
@@ -1,129 +1,10 @@
1
  <?php
2
  class mailPps extends modulePps {
3
- private $_smtpMailer = null;
4
- private $_sendMailMailer = null;
5
-
6
  public function init() {
7
  parent::init();
8
  //dispatcherPps::addFilter('optionsDefine', array($this, 'addOptions'));
9
  }
10
  public function send($to, $subject, $message, $fromName = '', $fromEmail = '', $replyToName = '', $replyToEmail = '', $additionalHeaders = array(), $additionalParameters = array()) {
11
- $type = framePps::_()->getModule('options')->get('mail_send_engine');
12
- $res = false;
13
- switch($type) {
14
- case 'smtp':
15
- $res = $this->sendSmtpMail( $to, $subject, $message, $fromName, $fromEmail, $replyToName, $replyToEmail, $additionalHeaders, $additionalParameters );
16
- break;
17
- case 'sendmail':
18
- $res = $this->sendSendMailMail( $to, $subject, $message, $fromName, $fromEmail, $replyToName, $replyToEmail, $additionalHeaders, $additionalParameters );
19
- break;
20
- case 'wp_mail': default:
21
- $res = $this->sendWpMail( $to, $subject, $message, $fromName, $fromEmail, $replyToName, $replyToEmail, $additionalHeaders, $additionalParameters );
22
- if(!$res) {
23
- // Sometimes it return false, but email was sent, and in such cases
24
- // - in errors array there are only one - empty string - value.
25
- // Let's count this for now as Success sending
26
- $mailErrors = array_filter( $this->getMailErrors() );
27
- if(empty($mailErrors)) {
28
- $res = true;
29
- }
30
- }
31
- break;
32
- }
33
- return $res;
34
- }
35
- private function _getSmtpMailer() {
36
- if(!$this->_smtpMailer) {
37
- $this->_connectPhpMailer();
38
- $this->_smtpMailer = new PHPMailer(); // create a new object
39
- $this->_smtpMailer->IsSMTP(); // enable SMTP
40
- $this->_smtpMailer->Debugoutput = array($this, 'pushPhpMailerError');
41
- $this->_smtpMailer->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
42
- $this->_smtpMailer->SMTPAuth = true; // authentication enabled
43
- $smtpSecure = framePps::_()->getModule('options')->get('smtp_secure');
44
- if(!empty($smtpSecure)) {
45
- $this->_smtpMailer->SMTPSecure = $smtpSecure; // secure transfer enabled REQUIRED for GMail
46
- }
47
- $this->_smtpMailer->Host = trim(framePps::_()->getModule('options')->get('smtp_host'));
48
- $this->_smtpMailer->Port = trim(framePps::_()->getModule('options')->get('smtp_port'));
49
- $this->_smtpMailer->Username = trim(framePps::_()->getModule('options')->get('smtp_login'));
50
- $this->_smtpMailer->Password = trim(framePps::_()->getModule('options')->get('smtp_pass'));
51
- }
52
- return $this->_smtpMailer;
53
- }
54
- public function pushPhpMailerError( $errorStr ) {
55
- if(strpos($errorStr, 'SMTP ERROR') !== false) {
56
- $this->pushError( $errorStr );
57
- }
58
- }
59
- private function _getSendMailMailer() {
60
- if(!$this->_sendMailMailer) {
61
- $this->_connectPhpMailer();
62
- $this->_sendMailMailer = new PHPMailer(); // create a new object
63
- $this->_sendMailMailer->isSendmail(); // enable SendMail
64
- $sendMailPath = trim(framePps::_()->getModule('options')->get('sendmail_path'));
65
- if(!empty($sendMailPath)) {
66
- $this->_sendMailMailer->Sendmail = $sendMailPath;
67
- }
68
- }
69
- return $this->_sendMailMailer;
70
- }
71
- private function _connectPhpMailer() {
72
- if(!function_exists('PHPMailerAutoload')) {
73
- require_once( $this->getModDir(). 'engines'. DS. 'PHPMailerAutoload.php');
74
- }
75
- }
76
- public function sendSendMailMail($to, $subject, $message, $fromName = '', $fromEmail = '', $replyToName = '', $replyToEmail = '', $additionalHeaders = array(), $additionalParameters = array()) {
77
- $this->_getSendMailMailer();
78
- if($fromEmail && $fromName) {
79
- $this->_sendMailMailer->setFrom($fromEmail, $fromName);
80
- }
81
- if($replyToName || $replyToEmail) {
82
- $this->_sendMailMailer->addReplyTo($replyToName, $replyToEmail);
83
- }
84
- /*if(isset($params['return_path_email']) && !empty($params['return_path_email'])) {
85
- $this->_sendMailMailer->ReturnPath = $params['return_path_email'];
86
- }*/
87
- $this->_sendMailMailer->Subject = $subject;
88
- $this->_sendMailMailer->addAddress($to);
89
- if(framePps::_()->getModule('options')->get('disable_email_html_type')) {
90
- $this->_sendMailMailer->Body = $message;
91
- } else {
92
- $this->_sendMailMailer->msgHTML( $message );
93
- }
94
- if($this->_sendMailMailer->send()) {
95
- return true;
96
- } else {
97
- $this->pushError( 'Mail error: '.$this->_sendMailMailer->ErrorInfo );
98
- }
99
- return false;
100
- }
101
- public function sendSmtpMail($to, $subject, $message, $fromName = '', $fromEmail = '', $replyToName = '', $replyToEmail = '', $additionalHeaders = array(), $additionalParameters = array()) {
102
- $this->_getSmtpMailer();
103
- if($fromEmail && $fromName) {
104
- $this->_smtpMailer->setFrom($fromName, $fromName);
105
- }
106
- if($replyToName || $replyToEmail) {
107
- $this->_smtpMailer->addReplyTo($replyToName, $replyToEmail);
108
- }
109
- /*if(isset($params['return_path_email']) && !empty($params['return_path_email'])) {
110
- $this->_smtpMailer->ReturnPath = $params['return_path_email'];
111
- }*/
112
- $this->_smtpMailer->Subject = $subject;
113
- $this->_smtpMailer->addAddress($to);
114
- if(framePps::_()->getModule('options')->get('disable_email_html_type')) {
115
- $this->_smtpMailer->Body = $message;
116
- } else {
117
- $this->_smtpMailer->msgHTML( $message );
118
- }
119
- if($this->_smtpMailer->send()) {
120
- return true;
121
- } else {
122
- $this->pushError( 'Mail error: '.$this->_smtpMailer->ErrorInfo );
123
- }
124
- return false;
125
- }
126
- public function sendWpMail($to, $subject, $message, $fromName = '', $fromEmail = '', $replyToName = '', $replyToEmail = '', $additionalHeaders = array(), $additionalParameters = array()) {
127
  $headersArr = array();
128
  $eol = "\r\n";
129
  if(!empty($fromName) && !empty($fromEmail)) {
@@ -156,26 +37,18 @@ class mailPps extends modulePps {
156
  public function getMailErrors() {
157
  global $ts_mail_errors;
158
  global $phpmailer;
159
- $type = framePps::_()->getModule('options')->get('mail_send_engine');
160
- switch($type) {
161
- case 'smtp': case 'sendmail':
162
- return $this->getErrors();
163
- break;
164
- case 'wp_mail': default:
165
- // Clear prev. send errors at first
166
- $ts_mail_errors = array();
167
 
168
- // Let's try to get errors about mail sending from WP
169
- if (!isset($ts_mail_errors)) $ts_mail_errors = array();
170
- if (isset($phpmailer)) {
171
- $ts_mail_errors[] = $phpmailer->ErrorInfo;
172
- }
173
- if(empty($ts_mail_errors)) {
174
- $ts_mail_errors[] = __('Cannot send email - problem with send server', PPS_LANG_CODE);
175
- }
176
- return $ts_mail_errors;
177
- break;
178
  }
 
179
  }
180
  public function mailContentType($contentType) {
181
  $contentType = 'text/html';
1
  <?php
2
  class mailPps extends modulePps {
 
 
 
3
  public function init() {
4
  parent::init();
5
  //dispatcherPps::addFilter('optionsDefine', array($this, 'addOptions'));
6
  }
7
  public function send($to, $subject, $message, $fromName = '', $fromEmail = '', $replyToName = '', $replyToEmail = '', $additionalHeaders = array(), $additionalParameters = array()) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  $headersArr = array();
9
  $eol = "\r\n";
10
  if(!empty($fromName) && !empty($fromEmail)) {
37
  public function getMailErrors() {
38
  global $ts_mail_errors;
39
  global $phpmailer;
40
+ // Clear prev. send errors at first
41
+ $ts_mail_errors = array();
 
 
 
 
 
 
42
 
43
+ // Let's try to get errors about mail sending from WP
44
+ if (!isset($ts_mail_errors)) $ts_mail_errors = array();
45
+ if (isset($phpmailer)) {
46
+ $ts_mail_errors[] = $phpmailer->ErrorInfo;
47
+ }
48
+ if(empty($ts_mail_errors)) {
49
+ $ts_mail_errors[] = __('Cannot send email - problem with send server');
 
 
 
50
  }
51
+ return $ts_mail_errors;
52
  }
53
  public function mailContentType($contentType) {
54
  $contentType = 'text/html';
modules/options/js/admin.settings.js CHANGED
@@ -9,41 +9,4 @@ jQuery(document).ready(function(){
9
  });
10
  return false;
11
  });
12
- /*Connected options: some options need to be visible only if in other options selected special value (e.g. if send engine SMTP - show SMTP options)*/
13
- var $connectOpts = jQuery('#ppsSettingsForm').find('[data-connect]');
14
- if($connectOpts && $connectOpts.size()) {
15
- var $connectedTo = {};
16
- $connectOpts.each(function(){
17
- var connectToData = jQuery(this).data('connect').split(':')
18
- , $connectTo = jQuery('#ppsSettingsForm').find('[name="opt_values['+ connectToData[ 0 ]+ ']"]')
19
- , connected = $connectTo.data('connected');
20
- if(!connected) connected = {};
21
- if(!connected[ connectToData[1] ]) connected[ connectToData[1] ] = [];
22
- connected[ connectToData[1] ].push( this );
23
- $connectTo.data('connected', connected);
24
- if(!$connectTo.data('binded')) {
25
- $connectTo.change(function(){
26
- var connected = jQuery(this).data('connected')
27
- , value = jQuery(this).val();
28
- if(connected) {
29
- for(var connectVal in connected) {
30
- if(connected[ connectVal ] && connected[ connectVal ].length) {
31
- var show = connectVal == value;
32
- for(var i = 0; i < connected[ connectVal ].length; i++) {
33
- show
34
- ? jQuery(connected[ connectVal ][ i ]).show()
35
- : jQuery(connected[ connectVal ][ i ]).hide();
36
- }
37
- }
38
- }
39
- }
40
- });
41
- $connectTo.data('binded', 1);
42
- }
43
- $connectedTo[ connectToData[ 0 ] ] = $connectTo;
44
- });
45
- for(var connectedName in $connectedTo) {
46
- $connectedTo[ connectedName ].change();
47
- }
48
- }
49
  });
9
  });
10
  return false;
11
  });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  });
modules/options/mod.php CHANGED
@@ -109,10 +109,6 @@ class optionsPps extends modulePps {
109
  }
110
  public function getAll() {
111
  if(empty($this->_options)) {
112
- $defSendmailPath = @ini_get('sendmail_path');
113
- if (empty($defSendmailPath) && !stristr($defSendmailPath, 'sendmail')) {
114
- $defSendmailPath = '/usr/sbin/sendmail';
115
- }
116
  $this->_options = dispatcherPps::applyFilters('optionsDefine', array(
117
  'general' => array(
118
  'label' => __('General', PPS_LANG_CODE),
@@ -125,17 +121,6 @@ class optionsPps extends modulePps {
125
  'foot_assets' => array('label' => __('Load Assets in Footer', PPS_LANG_CODE), 'desc' => __('Force load all plugin CSS and JavaScript files in footer - to increase page load speed. Please make sure that you have correct footer.php file in your WordPress theme with wp_footer() function call in it.', PPS_LANG_CODE), 'def' => '0', 'html' => 'checkboxHiddenVal'),
126
  'disable_email_html_type' => array('label' => __('Disable HTML Emails content type', PPS_LANG_CODE), 'desc' => __('Some servers fail send emails with HTML content type: content-type = "text/html", so if you have problems with sending emails from our plugn - try to disable this feature here.', PPS_LANG_CODE), 'def' => '0', 'html' => 'checkboxHiddenVal'),
127
  'use_local_cdn' => array('label' => __('Disable CDN usage', PPS_LANG_CODE), 'desc' => esc_html(sprintf(__('By default our plugin is using CDN server to store there part of it\'s files - images, javascript and CSS libraries. This was designed in that way to reduce plugin size, make it lighter and easier for usage. But if you need to store all files - on your server - you can disable this option here, then upload plugin CDN files to your own site. To make it work correctly - check our article that describe how you need to do this <a href="%s" target="_blank">here</a>.', PPS_LANG_CODE), 'https://supsystic.com/disable-cdn-usage-popup-plugin/')), 'def' => '0', 'html' => 'checkboxHiddenVal'),
128
- 'mail_send_engine' => array('label' => __('Send With', PPS_LANG_CODE), 'desc' => __('You can send your emails with different email sendng engines.', PPS_LANG_CODE), 'def' => 'wp_mail', 'html' => 'selectbox',
129
- 'options' => array('wp_mail' => __('WordPress PHP Mail', PPS_LANG_CODE), 'smtp' => __('Third party providers (SMTP)', PPS_LANG_CODE), 'sendmail' => __('Sendmail', PPS_LANG_CODE))),
130
-
131
- 'smtp_host' => array('label' => __('SMTP Hostname', PPS_LANG_CODE), 'desc' => __('e.g. smtp.mydomain.com', PPS_LANG_CODE), 'html' => 'text', 'connect' => 'mail_send_engine:smtp'),
132
- 'smtp_login' => array('label' => __('SMTP Login', PPS_LANG_CODE), 'desc' => __('Your email login', PPS_LANG_CODE), 'html' => 'text', 'connect' => 'mail_send_engine:smtp'),
133
- 'smtp_pass' => array('label' => __('SMTP Password', PPS_LANG_CODE), 'desc' => __('Your emaail password', PPS_LANG_CODE), 'html' => 'password', 'connect' => 'mail_send_engine:smtp'),
134
- 'smtp_port' => array('label' => __('SMTP Port', PPS_LANG_CODE), 'desc' => __('Port for your SMTP provider', PPS_LANG_CODE), 'html' => 'text', 'connect' => 'mail_send_engine:smtp'),
135
- 'smtp_secure' => array('label' => __('SMTP Secure', PPS_LANG_CODE), 'desc' => __('Use secure SMTP connection. If you enable this option - make sure that your server support such secure connections.', PPS_LANG_CODE), 'html' => 'selectbox', 'connect' => 'mail_send_engine:smtp',
136
- 'options' => array('' => __('No', PPS_LANG_CODE), 'ssl' => 'SSL', 'tls' => 'TLS'), 'def' => ''),
137
-
138
- 'sendmail_path' => array('label' => __('Sendmail Path', PPS_LANG_CODE), 'desc' => __('You can check it on your server, or ask about it - in your hosting provider.', PPS_LANG_CODE), 'html' => 'text', 'connect' => 'mail_send_engine:sendmail', 'def' => $defSendmailPath),
139
  ),
140
  ),
141
  ));
109
  }
110
  public function getAll() {
111
  if(empty($this->_options)) {
 
 
 
 
112
  $this->_options = dispatcherPps::applyFilters('optionsDefine', array(
113
  'general' => array(
114
  'label' => __('General', PPS_LANG_CODE),
121
  'foot_assets' => array('label' => __('Load Assets in Footer', PPS_LANG_CODE), 'desc' => __('Force load all plugin CSS and JavaScript files in footer - to increase page load speed. Please make sure that you have correct footer.php file in your WordPress theme with wp_footer() function call in it.', PPS_LANG_CODE), 'def' => '0', 'html' => 'checkboxHiddenVal'),
122
  'disable_email_html_type' => array('label' => __('Disable HTML Emails content type', PPS_LANG_CODE), 'desc' => __('Some servers fail send emails with HTML content type: content-type = "text/html", so if you have problems with sending emails from our plugn - try to disable this feature here.', PPS_LANG_CODE), 'def' => '0', 'html' => 'checkboxHiddenVal'),
123
  'use_local_cdn' => array('label' => __('Disable CDN usage', PPS_LANG_CODE), 'desc' => esc_html(sprintf(__('By default our plugin is using CDN server to store there part of it\'s files - images, javascript and CSS libraries. This was designed in that way to reduce plugin size, make it lighter and easier for usage. But if you need to store all files - on your server - you can disable this option here, then upload plugin CDN files to your own site. To make it work correctly - check our article that describe how you need to do this <a href="%s" target="_blank">here</a>.', PPS_LANG_CODE), 'https://supsystic.com/disable-cdn-usage-popup-plugin/')), 'def' => '0', 'html' => 'checkboxHiddenVal'),
 
 
 
 
 
 
 
 
 
 
 
124
  ),
125
  ),
126
  ));
modules/options/views/options.php CHANGED
@@ -59,12 +59,12 @@ class optionsViewPps extends viewPps {
59
  return parent::getContent('optionsAdminMain');
60
  }
61
  public function serverSettings() {
62
- global $wpdb;
63
  $this->assign('systemInfo', array(
64
  'Operating System' => array('value' => PHP_OS),
65
  'PHP Version' => array('value' => PHP_VERSION),
66
  'Server Software' => array('value' => $_SERVER['SERVER_SOFTWARE']),
67
- 'MySQL' => array('value' => $wpdb->db_version()),
 
68
  'PHP Allow URL Fopen' => array('value' => ini_get('allow_url_fopen') ? 'Yes' : 'No'),
69
  'PHP Memory Limit' => array('value' => ini_get('memory_limit')),
70
  'PHP Max Post Size' => array('value' => ini_get('post_max_size')),
59
  return parent::getContent('optionsAdminMain');
60
  }
61
  public function serverSettings() {
 
62
  $this->assign('systemInfo', array(
63
  'Operating System' => array('value' => PHP_OS),
64
  'PHP Version' => array('value' => PHP_VERSION),
65
  'Server Software' => array('value' => $_SERVER['SERVER_SOFTWARE']),
66
+ 'MySQL' => array('value' => function_exists('mysql_get_server_info') ? @mysql_get_server_info() : __('Undefined', PPS_LANG_CODE)),
67
+ 'PHP Safe Mode' => array('value' => ini_get('safe_mode') ? 'Yes' : 'No', 'error' => ini_get('safe_mode')),
68
  'PHP Allow URL Fopen' => array('value' => ini_get('allow_url_fopen') ? 'Yes' : 'No'),
69
  'PHP Memory Limit' => array('value' => ini_get('memory_limit')),
70
  'PHP Max Post Size' => array('value' => ini_get('post_max_size')),
modules/options/views/tpl/optionsSettingsTabContent.php CHANGED
@@ -33,11 +33,7 @@
33
  $htmlOpts['attrs'] .= ' class="ppsProOpt"';
34
  }
35
  ?>
36
- <tr
37
- <?php if(isset($opt['connect']) && $opt['connect']) { ?>
38
- data-connect="<?php echo $opt['connect'];?>" style="display: none;"
39
- <?php }?>
40
- >
41
  <th scope="row" class="col-w-30perc">
42
  <?php echo $opt['label']?>
43
  <?php if(!empty($opt['changed_on'])) {?>
33
  $htmlOpts['attrs'] .= ' class="ppsProOpt"';
34
  }
35
  ?>
36
+ <tr>
 
 
 
 
37
  <th scope="row" class="col-w-30perc">
38
  <?php echo $opt['label']?>
39
  <?php if(!empty($opt['changed_on'])) {?>
modules/popup/controller.php CHANGED
@@ -219,7 +219,6 @@ class popupControllerPps extends controllerPps {
219
  return $res->ajaxExec();
220
  }
221
  public function exportForDb() {
222
- global $wpdb;
223
  $eol = "\r\n";
224
  $forPro = (int) reqPps::getVar('for_pro');
225
  $forPromo = (int) reqPps::getVar('for_promo');
@@ -253,7 +252,7 @@ class popupControllerPps extends controllerPps {
253
  if($addToKeys) {
254
  $allKeys[] = $k;
255
  }
256
- $arr[] = '"'. $wpdb->_real_escape($v). '"';
257
  }
258
  $valuesArr[] = '('. implode(',', $arr). ')';
259
  }
219
  return $res->ajaxExec();
220
  }
221
  public function exportForDb() {
 
222
  $eol = "\r\n";
223
  $forPro = (int) reqPps::getVar('for_pro');
224
  $forPromo = (int) reqPps::getVar('for_promo');
252
  if($addToKeys) {
253
  $allKeys[] = $k;
254
  }
255
+ $arr[] = '"'. mysql_real_escape_string($v). '"';
256
  }
257
  $valuesArr[] = '('. implode(',', $arr). ')';
258
  }
modules/popup/css/frontend.popup.css CHANGED
@@ -78,7 +78,7 @@
78
  }
79
  .ppsSnow{
80
  background: none;
81
- background-image: url("//supsystic-42d7.kxcdn.com/_assets/popup/img/assets/2016_ht_1_snow1.png"), url("//supsystic-42d7.kxcdn.com/_assets/popup/img/assets/2016_ht_1_snow2.png"), url("//supsystic-42d7.kxcdn.com/_assets/popup/img/assets/2016_ht_1_snow3.png");
82
  position: absolute;
83
  top: 0;
84
  left: 0;
78
  }
79
  .ppsSnow{
80
  background: none;
81
+ background-image: url("http://supsystic-42d7.kxcdn.com/_assets/popup/img/assets/2016_ht_1_snow1.png"), url("http://supsystic-42d7.kxcdn.com/_assets/popup/img/assets/2016_ht_1_snow2.png"), url("http://supsystic-42d7.kxcdn.com/_assets/popup/img/assets/2016_ht_1_snow3.png");
82
  position: absolute;
83
  top: 0;
84
  left: 0;
modules/popup/js/admin.popup.edit.js CHANGED
@@ -378,14 +378,6 @@ jQuery(document).ready(function(){
378
  jQuery('.ppsDateDisplayOptsShell').slideUp( g_ppsAnimationSpeed );
379
  }
380
  }).change();
381
- // Days display settings manipulations
382
- jQuery('#ppsPopupEditForm [name="params[main][enb_show_days]"]').change(function(){
383
- if(jQuery(this).prop('checked')) {
384
- jQuery('.ppsDaysDisplayOptsShell').slideDown( g_ppsAnimationSpeed );
385
- } else {
386
- jQuery('.ppsDaysDisplayOptsShell').slideUp( g_ppsAnimationSpeed );
387
- }
388
- }).change();
389
  jQuery('#ppsPopupEditForm').find('[name="params[main][show_date_from]"],[name="params[main][show_date_to]"]').datepicker();
390
  // Edit PopUp Label
391
  jQuery('#ppsPopupEditableLabelTxt').blur(function(){
378
  jQuery('.ppsDateDisplayOptsShell').slideUp( g_ppsAnimationSpeed );
379
  }
380
  }).change();
 
 
 
 
 
 
 
 
381
  jQuery('#ppsPopupEditForm').find('[name="params[main][show_date_from]"],[name="params[main][show_date_to]"]').datepicker();
382
  // Edit PopUp Label
383
  jQuery('#ppsPopupEditableLabelTxt').blur(function(){
modules/popup/js/frontend.popup.js CHANGED
@@ -12,7 +12,7 @@ jQuery(document).ready(function(){
12
  jQuery(document).trigger('ppsBeforePopupsInit', ppsPopups);
13
  for(var i = 0; i < ppsPopups.length; i++) {
14
  jQuery('body').append( ppsPopups[ i ].rendered_html );
15
- ppsMovePopupStyles( ppsPopups[ i ] ); /* Move back from replaced style tags - to normal style tag */
16
  ppsBindPopupLove( ppsPopups[ i ] );
17
  ppsBindPopupLoad( ppsPopups[ i ] );
18
  ppsBindPopupShow( ppsPopups[ i ] );
@@ -24,7 +24,7 @@ jQuery(document).ready(function(){
24
  }
25
  _ppsBindOnElementClickPopups();
26
  _ppsBindClickHrefSaving();
27
- /* To make sure - that we checked all elements, even those who loaded later then current code run */
28
  setTimeout(_ppsBindOnElementClickPopups, 300);
29
  jQuery(document).trigger('ppsAfterPopupsInit', ppsPopups);
30
  jQuery(window).resize(function(){
@@ -34,8 +34,8 @@ jQuery(document).ready(function(){
34
  }
35
  }
36
  });
37
- /* For case when for some reason jQuery(window).load() will not trigger -
38
- make it work correctly with re-position and re-sizing in any case */
39
  setTimeout(function(){
40
  g_ppsWindowLoaded = true;
41
  }, 5000);
@@ -101,7 +101,7 @@ function _ppsBindOnElementClickPopups() {
101
  });
102
  }).addClass('ppsClickBinded');
103
  }
104
- var $clickOnMenuItems = jQuery('[title*="#ppsShowPopUp_"]:not(.ppsClickBinded)'); /* You can also set this in title - for menu items for example */
105
  if($clickOnMenuItems && $clickOnMenuItems.size()) {
106
  $clickOnMenuItems.each(function(){
107
  var title = jQuery(this).attr('title')
@@ -160,53 +160,20 @@ function ppsBindPopupLoad( popup ) {
160
  if(!wasTriggeredBefore) {
161
  setTimeout(function(){
162
  $shell.trigger('ppsShowPopupAfterAllImgs', popup);
163
- }, 1000); /* This timeout need to be here - to wait until loaded frame will be correctly rendered */
164
  }
165
  });
166
  } else {
167
  popup._imgsLoaded = true;
168
  }
169
  }
170
- /* Additional re-calculation for case if there are too much images */
171
- var $shell = ppsGetPopupShell( popup )
172
- , $imgs = $shell.find('img')
173
- , imgsCnt = $imgs ? $imgs.size() : 0;
174
- if(imgsCnt) {
175
- if( popup._imgsCount ) {
176
- var substracted = false;
177
- preloadImgs.each(function(){
178
- var $preload = jQuery(this)
179
- , preloadSrc = $preload.attr('src');
180
- $imgs.each(function(){
181
- var $img = jQuery( this )
182
- , imgSrc = $img.attr('src');
183
- if(imgSrc == preloadSrc) { /*Preload is same as image - don't count it*/
184
- $imgs = $imgs.filter( this );
185
- substracted = true;
186
- return false;
187
- }
188
- });
189
- });
190
- if( substracted ) {
191
- imgsCnt = $imgs.size();
192
- }
193
- }
194
- if( imgsCnt ) {
195
- $imgs.bind('load error', function(){
196
- imgsCnt--;
197
- if(imgsCnt <= 0 && popup.is_visible) {
198
- _ppsPositionPopup({shell: $shell, popup: popup, recalc: true});
199
- }
200
- });
201
- }
202
- }
203
  }
204
  function ppsBindPopupShow( popup ) {
205
  _ppsCheckBindVideo({popup: popup});
206
  switch(popup.params.main.show_on) {
207
  case 'page_load':
208
  if(!_ppsPopupBindDelay(popup, 'show_on_page_load_delay', 'show_on_page_load_enb_delay')) {
209
- if(popup.type == 'fb_like') { /* FB Like will be rendered right after all widget content - will be loaded */
210
  popup.render_with_fb_load = true;
211
  } else {
212
  ppsCheckShowPopup( popup );
@@ -222,7 +189,7 @@ function ppsBindPopupShow( popup ) {
222
  });
223
  break;
224
  case 'click_on_element':
225
- /* @see _ppsBindOnElementClickPopups() */
226
  break;
227
  case 'scroll_window':
228
  jQuery(window).scroll(function(){
@@ -261,7 +228,7 @@ function ppsBindPopupShow( popup ) {
261
  }
262
  }
263
  function ppsBindPopupClose( popup ) {
264
- /* For now - only one method - click on close btn */
265
  var $shell = ppsGetPopupShell( popup );
266
  $shell.find('.ppsPopupClose').click(function(){
267
  if(popup.type == 'age_verify') {
@@ -278,7 +245,7 @@ function ppsBindPopupSubscribers(popup) {
278
  , $inFormCloseBtn = $form.find('.ppsPopupClose');
279
  switch(popup.params.tpl.sub_dest) {
280
  case 'aweber':
281
- /* No ajax action here */
282
  break;
283
  case 'wordpress': case 'mailchimp': case 'mailpoet': default:
284
  $form.submit(function(){
@@ -292,7 +259,7 @@ function ppsBindPopupSubscribers(popup) {
292
  jQuery(self).find('input[type=submit]').removeAttr('disabled');
293
  if(!res.error) {
294
  var parentShell = jQuery(self).parents('.ppsSubscribeShell')
295
- , closeInsideBtn = jQuery(self).find('.ppsPopupClose'); /* Close button can be inside form - we can't remove it, because in this case user will not be able to close PopUp */
296
  if(closeInsideBtn && closeInsideBtn.size()) {
297
  closeInsideBtn.appendTo( parentShell );
298
  }
@@ -314,9 +281,9 @@ function ppsBindPopupSubscribers(popup) {
314
  }
315
 
316
  } else {
317
- _ppsPopupAddStat( popup, 'subscribe_error' ); /* Save close popup statistics */
318
  if(res.data && res.data.emailExistsRedirect) {
319
- /* Simulate here client side subscribe success if email already exists */
320
  ppsPopupSubscribeSuccess(popup, {ignoreSendStat: true});
321
  toeRedirect( res.data.emailExistsRedirect );
322
  }
@@ -327,17 +294,17 @@ function ppsBindPopupSubscribers(popup) {
327
  });
328
  break;
329
  }
330
- /* If user even press Enter on exit btn in form -let it still submit it.
331
- Close only if user click it using mouse*/
332
  if($inFormCloseBtn && $inFormCloseBtn.size()) {
333
  $inFormCloseBtn.keydown(function (e) {
334
- if (e.keyCode == 13) { /* Enter */
335
  $form.submit();
336
  return false;
337
  }
338
  });
339
  }
340
- /* Required fields validation for Safary browser */
341
  if(navigator.userAgent.indexOf('Safari') > -1 && !(navigator.userAgent.indexOf('Chrome') > -1)) {
342
  var forms = $shell.get(0).getElementsByTagName('form');
343
  if(forms && forms.length) {
@@ -923,10 +890,10 @@ function ppsInitBgOverlay() {
923
  function ppsShowBgOverlay(popup) {
924
  if(popup && isNumericPps( popup ))
925
  popup = ppsGetPopupById( popup );
926
- if(popup.ignore_background) /* For some types - we will not be require background - so we can manipulate it using this key */
927
  return;
928
  var $overlay = jQuery('#ppsPopupBgOverlay');
929
- /* Clear all prev. sets - because there can be several numbers of PopUps, but overlay - is one for all */
930
  $overlay.css({
931
  'background-position': ''
932
  , 'background-repeat': ''
@@ -939,7 +906,7 @@ function ppsShowBgOverlay(popup) {
939
  , 'background-url': ''
940
  }).removeClass('ppsSnow');
941
  if(popup && popup.params) {
942
- /* Opacity check */
943
  if(typeof(popup.params.tpl.bg_overlay_opacity) !== 'undefined') {
944
  if(!popup.params.tpl.bg_overlay_opacity || popup.params.tpl.bg_overlay_opacity == '')
945
  popup.params.tpl.bg_overlay_opacity = 0;
12
  jQuery(document).trigger('ppsBeforePopupsInit', ppsPopups);
13
  for(var i = 0; i < ppsPopups.length; i++) {
14
  jQuery('body').append( ppsPopups[ i ].rendered_html );
15
+ ppsMovePopupStyles( ppsPopups[ i ] ); // Move back from replaced style tags - to normal style tag
16
  ppsBindPopupLove( ppsPopups[ i ] );
17
  ppsBindPopupLoad( ppsPopups[ i ] );
18
  ppsBindPopupShow( ppsPopups[ i ] );
24
  }
25
  _ppsBindOnElementClickPopups();
26
  _ppsBindClickHrefSaving();
27
+ // To make sure - that we checked all elements, even those who loaded later then current code run
28
  setTimeout(_ppsBindOnElementClickPopups, 300);
29
  jQuery(document).trigger('ppsAfterPopupsInit', ppsPopups);
30
  jQuery(window).resize(function(){
34
  }
35
  }
36
  });
37
+ // For case when for some reason jQuery(window).load() will not trigger -
38
+ // make it work correctly with re-position and re-sizing in any case
39
  setTimeout(function(){
40
  g_ppsWindowLoaded = true;
41
  }, 5000);
101
  });
102
  }).addClass('ppsClickBinded');
103
  }
104
+ var $clickOnMenuItems = jQuery('[title*="#ppsShowPopUp_"]:not(.ppsClickBinded)'); // You can also set this in title - for menu items for example
105
  if($clickOnMenuItems && $clickOnMenuItems.size()) {
106
  $clickOnMenuItems.each(function(){
107
  var title = jQuery(this).attr('title')
160
  if(!wasTriggeredBefore) {
161
  setTimeout(function(){
162
  $shell.trigger('ppsShowPopupAfterAllImgs', popup);
163
+ }, 1000); // This timeout need to be here - to wait until loaded frame will be correctly rendered
164
  }
165
  });
166
  } else {
167
  popup._imgsLoaded = true;
168
  }
169
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
170
  }
171
  function ppsBindPopupShow( popup ) {
172
  _ppsCheckBindVideo({popup: popup});
173
  switch(popup.params.main.show_on) {
174
  case 'page_load':
175
  if(!_ppsPopupBindDelay(popup, 'show_on_page_load_delay', 'show_on_page_load_enb_delay')) {
176
+ if(popup.type == 'fb_like') { // FB Like will be rendered right after all widget content - will be loaded
177
  popup.render_with_fb_load = true;
178
  } else {
179
  ppsCheckShowPopup( popup );
189
  });
190
  break;
191
  case 'click_on_element':
192
+ // @see _ppsBindOnElementClickPopups()
193
  break;
194
  case 'scroll_window':
195
  jQuery(window).scroll(function(){
228
  }
229
  }
230
  function ppsBindPopupClose( popup ) {
231
+ // For now - only one method - click on close btn
232
  var $shell = ppsGetPopupShell( popup );
233
  $shell.find('.ppsPopupClose').click(function(){
234
  if(popup.type == 'age_verify') {
245
  , $inFormCloseBtn = $form.find('.ppsPopupClose');
246
  switch(popup.params.tpl.sub_dest) {
247
  case 'aweber':
248
+ // No ajax action here
249
  break;
250
  case 'wordpress': case 'mailchimp': case 'mailpoet': default:
251
  $form.submit(function(){
259
  jQuery(self).find('input[type=submit]').removeAttr('disabled');
260
  if(!res.error) {
261
  var parentShell = jQuery(self).parents('.ppsSubscribeShell')
262
+ , closeInsideBtn = jQuery(self).find('.ppsPopupClose'); // Close button can be inside form - we can't remove it, because in this case user will not be able to close PopUp
263
  if(closeInsideBtn && closeInsideBtn.size()) {
264
  closeInsideBtn.appendTo( parentShell );
265
  }
281
  }
282
 
283
  } else {
284
+ _ppsPopupAddStat( popup, 'subscribe_error' ); // Save close popup statistics
285
  if(res.data && res.data.emailExistsRedirect) {
286
+ // Simulate here client side subscribe success if email already exists
287
  ppsPopupSubscribeSuccess(popup, {ignoreSendStat: true});
288
  toeRedirect( res.data.emailExistsRedirect );
289
  }
294
  });
295
  break;
296
  }
297
+ // If user even press Enter on exit btn in form -let it still submit it.
298
+ // Close only if user click it using mouse
299
  if($inFormCloseBtn && $inFormCloseBtn.size()) {
300
  $inFormCloseBtn.keydown(function (e) {
301
+ if (e.keyCode == 13) { // Enter
302
  $form.submit();
303
  return false;
304
  }
305
  });
306
  }
307
+ // Required fields validation for Safary browser
308
  if(navigator.userAgent.indexOf('Safari') > -1 && !(navigator.userAgent.indexOf('Chrome') > -1)) {
309
  var forms = $shell.get(0).getElementsByTagName('form');
310
  if(forms && forms.length) {
890
  function ppsShowBgOverlay(popup) {
891
  if(popup && isNumericPps( popup ))
892
  popup = ppsGetPopupById( popup );
893
+ if(popup.ignore_background) // For some types - we will not be require background - so we can manipulate it using this key
894
  return;
895
  var $overlay = jQuery('#ppsPopupBgOverlay');
896
+ // Clear all prev. sets - because there can be several numbers of PopUps, but overlay - is one for all
897
  $overlay.css({
898
  'background-position': ''
899
  , 'background-repeat': ''
906
  , 'background-url': ''
907
  }).removeClass('ppsSnow');
908
  if(popup && popup.params) {
909
+ // Opacity check
910
  if(typeof(popup.params.tpl.bg_overlay_opacity) !== 'undefined') {
911
  if(!popup.params.tpl.bg_overlay_opacity || popup.params.tpl.bg_overlay_opacity == '')
912
  popup.params.tpl.bg_overlay_opacity = 0;
modules/popup/mod.php CHANGED
@@ -48,7 +48,7 @@ class popupPps extends modulePps {
48
  return $link;
49
  }
50
  public function getListAvailableTerms() {
51
- return array('category', 'post_tag', 'products_categories', 'product_cat');
52
  }
53
  public function checkAdminAreaPopupShow() {
54
  if(is_admin()) {
@@ -81,17 +81,6 @@ class popupPps extends modulePps {
81
  $havePostsListing = true;
82
  $isOnlyOnePage = true;
83
  }
84
- if($currentPageId
85
- && $havePostsListing
86
- && !$isOnlyOnePage
87
- && is_home()
88
- ) { // This mean that page is Posts Listing page
89
- $pageForPostsId = (int)get_option( 'page_for_posts' );
90
- if($pageForPostsId) {
91
- $isOnlyOnePage = true;
92
- $currentPageId = $pageForPostsId;
93
- }
94
- }
95
  /*if(!$isHome && function_exists('is_woocommerce') && is_woocommerce()) {
96
  $isHome = is_front_page();
97
  }*/
@@ -289,15 +278,6 @@ class popupPps extends modulePps {
289
  $dataRemoved = true;
290
  }
291
  }
292
- if(isset($p['params']['main']['enb_show_days'])
293
- && !empty($p['params']['main']['enb_show_days'])
294
- ) { // Check if we need to show it in selected Days
295
- $showDays = isset($p['params']['main']['show_days']) ? $p['params']['main']['show_days'] : array();
296
- if(!empty($showDays) && !in_array(strtolower(strftime('%A')), $showDays)) {
297
- unset($popups[ $i ]);
298
- $dataRemoved = true;
299
- }
300
- }
301
  }
302
  }
303
  if($dataRemoved) {
48
  return $link;
49
  }
50
  public function getListAvailableTerms() {
51
+ return array('category', 'post_tag', 'products_categories');
52
  }
53
  public function checkAdminAreaPopupShow() {
54
  if(is_admin()) {
81
  $havePostsListing = true;
82
  $isOnlyOnePage = true;
83
  }
 
 
 
 
 
 
 
 
 
 
 
84
  /*if(!$isHome && function_exists('is_woocommerce') && is_woocommerce()) {
85
  $isHome = is_front_page();
86
  }*/
278
  $dataRemoved = true;
279
  }
280
  }
 
 
 
 
 
 
 
 
 
281
  }
282
  }
283
  if($dataRemoved) {
modules/popup/models/popup.php CHANGED
@@ -931,37 +931,6 @@ class popupModelPps extends modelPps {
931
  __('Field background', PPS_LANG_CODE),
932
  __('Button background', PPS_LANG_CODE),
933
  ),
934
- 69 => array(
935
- __('Main background', PPS_LANG_CODE),
936
- __('Image', PPS_LANG_CODE),
937
- __('Image background', PPS_LANG_CODE),
938
- __('Field background', PPS_LANG_CODE),
939
- __('Submit button background', PPS_LANG_CODE),
940
- __('Exit button background', PPS_LANG_CODE),
941
- ),
942
- 70 => array(
943
- __('Main background', PPS_LANG_CODE),
944
- __('Field background', PPS_LANG_CODE),
945
- __('Submit button background', PPS_LANG_CODE),
946
- __('Exit button background', PPS_LANG_CODE),
947
- ),
948
- 71 => array(
949
- __('Main background', PPS_LANG_CODE),
950
- __('Image', PPS_LANG_CODE),
951
- __('Field background', PPS_LANG_CODE),
952
- __('Submit button background', PPS_LANG_CODE),
953
- __('Name icon', PPS_LANG_CODE),
954
- __('Email icon', PPS_LANG_CODE),
955
- __('Exit button background', PPS_LANG_CODE),
956
- ),
957
- 72 => array(
958
- __('Main background', PPS_LANG_CODE),
959
- __('Field background', PPS_LANG_CODE),
960
- __('Submit button background', PPS_LANG_CODE),
961
- __('Name icon', PPS_LANG_CODE),
962
- __('Email icon', PPS_LANG_CODE),
963
- __('Right Image', PPS_LANG_CODE),
964
- ),
965
  );
966
  }
967
  public function getBgNamesForPopup( $id ) {
931
  __('Field background', PPS_LANG_CODE),
932
  __('Button background', PPS_LANG_CODE),
933
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
934
  );
935
  }
936
  public function getBgNamesForPopup( $id ) {
modules/popup/views/popup.php CHANGED
@@ -204,7 +204,6 @@ class popupViewPps extends viewPps {
204
  $this->assign('userRolesForSelect', $userRolesForSelect);
205
  // Time selects
206
  $this->assign('timeRange', utilsPps::getTimeRange());
207
- $this->assign('weekDaysRange', utilsPps::getWeekDaysArray());
208
  $this->assign('adminEmail', get_bloginfo('admin_email'));
209
  $this->assign('isPro', framePps::_()->getModule('supsystic_promo')->isPro());
210
  $this->assign('mainLink', framePps::_()->getModule('supsystic_promo')->getMainLink());
@@ -324,37 +323,31 @@ class popupViewPps extends viewPps {
324
  'label' => __('Facebook page URL', PPS_LANG_CODE),
325
  'html' => 'text',
326
  'desc' => __('The absolute URL of the Facebook Page that will be liked. This is a required setting.', PPS_LANG_CODE)),
327
- 'tabs' => array(
328
- 'label' => __('Tabs to render', PPS_LANG_CODE),
329
- 'html' => 'selectlist',
330
- 'def' => array('timeline'),
331
- 'options' => array('timeline' => __('Timeline', PPS_LANG_CODE), 'events' => __('Events', PPS_LANG_CODE), 'messages' => __('Messages', PPS_LANG_CODE)),
332
- 'desc' => __('Tabs to render i.e. timeline, events, messages. You can select several tabs here.', PPS_LANG_CODE)),
333
- 'hide_cover' => array(
334
- 'label' => __('Hide cover photo', PPS_LANG_CODE),
335
  'html' => 'checkbox',
336
- 'def' => 0,
337
- 'desc' => __('Hide cover photo in the header', PPS_LANG_CODE)),
338
- 'show_facepile' => array(
339
- 'label' => __('Show profile photos', PPS_LANG_CODE),
340
  'html' => 'checkbox',
341
- 'def' => 1,
342
- 'desc' => __('Show profile photos when friends like this', PPS_LANG_CODE)),
343
- 'hide_cta' => array(
344
- 'label' => __('Hide the custom call to action button', PPS_LANG_CODE),
345
  'html' => 'checkbox',
346
- 'def' => 0,
347
- 'desc' => __('Hide the custom call to action button (if available)', PPS_LANG_CODE)),
348
- 'small_header' => array(
349
- 'label' => __('Use the small header instead', PPS_LANG_CODE),
350
  'html' => 'checkbox',
351
- 'def' => 0,
352
- 'desc' => __('Use the small header instead', PPS_LANG_CODE)),
353
- 'adapt_container_width' => array(
354
- 'label' => __('Try to fit inside the container width', PPS_LANG_CODE),
355
  'html' => 'checkbox',
356
- 'def' => 1,
357
- 'desc' => __('Try to fit inside the container width', PPS_LANG_CODE)),
358
  );
359
  }
360
  public function getMainPopupDesignTab() {
@@ -770,7 +763,7 @@ class popupViewPps extends viewPps {
770
  var js, fjs = d.getElementsByTagName(s)[0];
771
  if (d.getElementById(id)) return;
772
  js = d.createElement(s); js.id = id;
773
- js.src = "//connect.facebook.net/'. utilsPps::getLangCode(). '/sdk.js#xfbml=1&version=v2.5&appId=1612081092370131";
774
  fjs.parentNode.insertBefore(js, fjs);
775
  }(document, \'script\', \'facebook-jssdk\'));</script>';
776
  $res .= '<div class="fb-like-box"';
@@ -783,9 +776,7 @@ class popupViewPps extends viewPps {
783
  ? 'true'
784
  : 'false';
785
  } else {
786
- $value = isset($popup['params']['tpl']['fb_like_opts'][ $fKey ])
787
- ? $popup['params']['tpl']['fb_like_opts'][ $fKey ]
788
- : (isset($fData['def']) ? $fData['def'] : '');
789
  }
790
  $res .= ' '. $dataKey.'="'. $value. '"';
791
  }
204
  $this->assign('userRolesForSelect', $userRolesForSelect);
205
  // Time selects
206
  $this->assign('timeRange', utilsPps::getTimeRange());
 
207
  $this->assign('adminEmail', get_bloginfo('admin_email'));
208
  $this->assign('isPro', framePps::_()->getModule('supsystic_promo')->isPro());
209
  $this->assign('mainLink', framePps::_()->getModule('supsystic_promo')->getMainLink());
323
  'label' => __('Facebook page URL', PPS_LANG_CODE),
324
  'html' => 'text',
325
  'desc' => __('The absolute URL of the Facebook Page that will be liked. This is a required setting.', PPS_LANG_CODE)),
326
+ 'colorscheme' => array(
327
+ 'label' => __('Color scheme', PPS_LANG_CODE),
328
+ 'html' => 'selectbox',
329
+ 'options' => array('light' => __('Light', PPS_LANG_CODE), 'dark' => __('Dark', PPS_LANG_CODE)),
330
+ 'desc' => __('The color scheme used by the plugin. Can be "light" or "dark".', PPS_LANG_CODE)),
331
+ 'force_wall' => array(
332
+ 'label' => __('Force wall', PPS_LANG_CODE),
 
333
  'html' => 'checkbox',
334
+ 'desc' => __('For "place" Pages (Pages that have a physical location that can be used with check-ins), this specifies whether the stream contains posts by the Page or just check-ins from friends.', PPS_LANG_CODE)),
335
+ 'header' => array(
336
+ 'label' => __('Header', PPS_LANG_CODE),
 
337
  'html' => 'checkbox',
338
+ 'desc' => __('Specifies whether to display the Facebook header at the top of the plugin.', PPS_LANG_CODE)),
339
+ 'show_border' => array(
340
+ 'label' => __('Show border', PPS_LANG_CODE),
 
341
  'html' => 'checkbox',
342
+ 'desc' => __('Specifies whether or not to show a border around the plugin.', PPS_LANG_CODE)),
343
+ 'show_faces' => array(
344
+ 'label' => __('Show faces', PPS_LANG_CODE),
 
345
  'html' => 'checkbox',
346
+ 'desc' => __('Specifies whether to display profile photos of people who like the page.', PPS_LANG_CODE)),
347
+ 'stream' => array(
348
+ 'label' => __('Stream', PPS_LANG_CODE),
 
349
  'html' => 'checkbox',
350
+ 'desc' => __('Specifies whether to display a stream of the latest posts by the Page.', PPS_LANG_CODE)),
 
351
  );
352
  }
353
  public function getMainPopupDesignTab() {
763
  var js, fjs = d.getElementsByTagName(s)[0];
764
  if (d.getElementById(id)) return;
765
  js = d.createElement(s); js.id = id;
766
+ js.src = "//connect.facebook.net/'. utilsPps::getLangCode(). '/sdk.js#xfbml=1&version=v2.0&appId=1612081092370131";
767
  fjs.parentNode.insertBefore(js, fjs);
768
  }(document, \'script\', \'facebook-jssdk\'));</script>';
769
  $res .= '<div class="fb-like-box"';
776
  ? 'true'
777
  : 'false';
778
  } else {
779
+ $value = $popup['params']['tpl']['fb_like_opts'][ $fKey ];
 
 
780
  }
781
  $res .= ' '. $dataKey.'="'. $value. '"';
782
  }
modules/popup/views/tpl/popupEditAdminDesignOpts.php CHANGED
@@ -106,15 +106,13 @@
106
  <?php
107
  $html = $fData['html'];
108
  $htmlParams = array();
109
- if(in_array($html, array('selectbox', 'selectlist'))) {
110
  $htmlParams['options'] = $fData['options'];
111
  }
112
  if($html == 'checkbox') {
113
  $htmlParams['checked'] = htmlPps::checkedOpt($this->popup['params']['tpl']['fb_like_opts'], $fKey);
114
  } else {
115
- $htmlParams['value'] = isset($this->popup['params']['tpl']['fb_like_opts'][ $fKey ])
116
- ? $this->popup['params']['tpl']['fb_like_opts'][ $fKey ]
117
- : (isset($fData['def']) ? $fData['def'] : '');
118
  }
119
  if($fKey == 'href') {
120
  $htmlParams['attrs'] = 'style="width: 100%"';
106
  <?php
107
  $html = $fData['html'];
108
  $htmlParams = array();
109
+ if($html == 'selectbox') {
110
  $htmlParams['options'] = $fData['options'];
111
  }
112
  if($html == 'checkbox') {
113
  $htmlParams['checked'] = htmlPps::checkedOpt($this->popup['params']['tpl']['fb_like_opts'], $fKey);
114
  } else {
115
+ $htmlParams['value'] = $this->popup['params']['tpl']['fb_like_opts'][ $fKey ];
 
 
116
  }
117
  if($fKey == 'href') {
118
  $htmlParams['attrs'] = 'style="width: 100%"';
modules/popup/views/tpl/popupEditAdminMainOpts.php CHANGED
@@ -293,16 +293,8 @@
293
  'value' => isset($this->popup['params']['main']['close_on_after_action_time']) ? $this->popup['params']['main']['close_on_after_action_time'] : 1, /*Default - 1 second*/
294
  'attrs' => 'style="width: 60px;"'));?>
295
  <span class="supsystic-tooltip" title="<?php _e('Seconds', PPS_LANG_CODE)?>"><?php _e('sec', PPS_LANG_CODE)?></span>
296
- </label><br />
297
- <label>
298
- <?php echo htmlPps::checkbox('params[main][close_on_after_action_enb_close_btn]', array(
299
- 'checked' => htmlPps::checkedOpt($this->popup['params']['main'], 'close_on_after_action_enb_close_btn')))?>
300
- <span class="supsystic-tooltip-right" title="<?php echo esc_html(__('By default close button for PopUp in this case will be hidden: PopUp will wait until user will make action. But you can enable it here if this is required.', PPS_LANG_CODE))?>">
301
- <?php _e('Enable close button', PPS_LANG_CODE)?>
302
- </span>
303
  </label>
304
- </div>
305
- <?php }?><br />
306
  <label class="supsystic-tooltip-bottom ppsPopupMainOptLbl" title="<?php echo esc_html(__('Close PopUp after it will be visible during specified time.', PPS_LANG_CODE))?>">
307
  <?php echo htmlPps::radiobutton('params[main][close_on]', array(
308
  'attrs' => 'class="ppsProOpt"',
@@ -409,22 +401,6 @@
409
  'value' => (isset($this->popup['params']['main']['show_date_to']) ? $this->popup['params']['main']['show_date_to'] : ''),
410
  ))?>
411
  </span>
412
- <div style="clear: both;"></div>
413
- <span class="ppsOptLabel"><?php _e('Days display settings', PPS_LANG_CODE)?></span>
414
- <hr />
415
- <label class="ppsPopupMainOptLbl">
416
- <?php echo htmlPps::checkbox('params[main][enb_show_days]', array(
417
- 'value' => 'all',
418
- 'checked' => htmlPps::checkedOpt($this->popup['params']['main'], 'enb_show_days')))?>
419
- <?php _e('Set display days', PPS_LANG_CODE)?>
420
- </label><br />
421
- <span class="ppsDaysDisplayOptsShell">
422
- <?php echo htmlPps::selectlist('params[main][show_days]', array(
423
- 'value' => (isset($this->popup['params']['main']['show_days']) ? $this->popup['params']['main']['show_days'] : ''),
424
- 'options' => $this->weekDaysRange,
425
- 'attrs' => 'class="chosen" data-placeholder="'. __('Select Days', PPS_LANG_CODE). '"',
426
- ))?>
427
- </span>
428
  </section>
429
  <section class="ppsPopupMainOptSect">
430
  <span class="ppsOptLabel"><?php _e('Whom to show', PPS_LANG_CODE)?></span>
293
  'value' => isset($this->popup['params']['main']['close_on_after_action_time']) ? $this->popup['params']['main']['close_on_after_action_time'] : 1, /*Default - 1 second*/
294
  'attrs' => 'style="width: 60px;"'));?>
295
  <span class="supsystic-tooltip" title="<?php _e('Seconds', PPS_LANG_CODE)?>"><?php _e('sec', PPS_LANG_CODE)?></span>
 
 
 
 
 
 
 
296
  </label>
297
+ </div><?php }?><br />
 
298
  <label class="supsystic-tooltip-bottom ppsPopupMainOptLbl" title="<?php echo esc_html(__('Close PopUp after it will be visible during specified time.', PPS_LANG_CODE))?>">
299
  <?php echo htmlPps::radiobutton('params[main][close_on]', array(
300
  'attrs' => 'class="ppsProOpt"',
401
  'value' => (isset($this->popup['params']['main']['show_date_to']) ? $this->popup['params']['main']['show_date_to'] : ''),
402
  ))?>
403
  </span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
404
  </section>
405
  <section class="ppsPopupMainOptSect">
406
  <span class="ppsOptLabel"><?php _e('Whom to show', PPS_LANG_CODE)?></span>
modules/popup/views/tpl/popupEditAdminSubOpts.php CHANGED
@@ -365,7 +365,7 @@
365
  <tr>
366
  <th scope="row">
367
  <?php _e('Blacklist', PPS_LANG_CODE)?>
368
- <i class="fa fa-question supsystic-tooltip" title="<?php echo esc_html(__('Here you can add emails, or email doamains, into blacklist - and they will not be able to subscribe. To add several emails (rules) - use "," symbol (coma) as separator. To add email domain - for examle @email.com - use "*@email.com" rule.', PPS_LANG_CODE))?>"></i>
369
  <?php if(!$this->isPro) {?>
370
  <span class="ppsProOptMiniLabel"><a target="_blank" href="<?php echo framePps::_()->getModule('supsystic_promo')->generateMainLink('utm_source=plugin&utm_medium=blacklist&utm_campaign=popup');?>"><?php _e('PRO option', PPS_LANG_CODE)?></a></span>
371
  <?php }?>
@@ -377,21 +377,6 @@
377
  ))?>
378
  </td>
379
  </tr>
380
- <tr>
381
- <th scope="row">
382
- <?php _e('Blacklist error message', PPS_LANG_CODE)?>
383
- <i class="fa fa-question supsystic-tooltip" title="<?php echo esc_html(__('Error message, that user will see if he / she email is in Blacklist', PPS_LANG_CODE))?>"></i>
384
- <?php if(!$this->isPro) {?>
385
- <span class="ppsProOptMiniLabel"><a target="_blank" href="<?php echo framePps::_()->getModule('supsystic_promo')->generateMainLink('utm_source=plugin&utm_medium=blacklist&utm_campaign=popup');?>"><?php _e('PRO option', PPS_LANG_CODE)?></a></span>
386
- <?php }?>
387
- </th>
388
- <td>
389
- <?php echo htmlPps::text('params[tpl][blacklist_error]', array(
390
- 'value' => (isset($this->popup['params']['tpl']['blacklist_error']) ? $this->popup['params']['tpl']['blacklist_error'] : __('Your email is in blacklist', PPS_LANG_CODE)),
391
- 'attrs' => 'class="ppsProOpt"',
392
- ))?>
393
- </td>
394
- </tr>
395
  <tr class="ppsPopupSubTxtsAndRedirect" style="display: none;">
396
  <th scope="row">
397
  <?php _e('"Confirmation sent" message', PPS_LANG_CODE)?>
365
  <tr>
366
  <th scope="row">
367
  <?php _e('Blacklist', PPS_LANG_CODE)?>
368
+ <i class="fa fa-question supsystic-tooltip" title="<?php _e('Here you can add emails, or email doamains, into blacklist - and they will not be able to subscribe. To add several emails (rules) - use "," symbol (coma) as separator. To add email domain - for examle @email.com - use "*@email.com" rule.', PPS_LANG_CODE)?>"></i>
369
  <?php if(!$this->isPro) {?>
370
  <span class="ppsProOptMiniLabel"><a target="_blank" href="<?php echo framePps::_()->getModule('supsystic_promo')->generateMainLink('utm_source=plugin&utm_medium=blacklist&utm_campaign=popup');?>"><?php _e('PRO option', PPS_LANG_CODE)?></a></span>
371
  <?php }?>
377
  ))?>
378
  </td>
379
  </tr>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
380
  <tr class="ppsPopupSubTxtsAndRedirect" style="display: none;">
381
  <th scope="row">
382
  <?php _e('"Confirmation sent" message', PPS_LANG_CODE)?>
modules/statistics/js/admin.statistics.popup.edit.js CHANGED
@@ -454,7 +454,7 @@ function ppsPopupStatRebuildTbl() {
454
  };
455
  if(toeInArrayPps(g_ppsCurrentStats[i]['code'], ['show'])) {
456
  currentData['views'] = parseInt( g_ppsCurrentStats[ i ]['points'][ j ]['total_requests'] );
457
- } else if(!toeInArrayPps(g_ppsCurrentStats[i]['code'], ['close', 'subscribe_error'])) {
458
  currentData['actions'] = parseInt( g_ppsCurrentStats[ i ]['points'][ j ]['total_requests'] );
459
  }
460
  var uniqueRequests = parseInt( g_ppsCurrentStats[ i ]['points'][ j ]['unique_requests'] );
454
  };
455
  if(toeInArrayPps(g_ppsCurrentStats[i]['code'], ['show'])) {
456
  currentData['views'] = parseInt( g_ppsCurrentStats[ i ]['points'][ j ]['total_requests'] );
457
+ } else {
458
  currentData['actions'] = parseInt( g_ppsCurrentStats[ i ]['points'][ j ]['total_requests'] );
459
  }
460
  var uniqueRequests = parseInt( g_ppsCurrentStats[ i ]['points'][ j ]['unique_requests'] );
modules/statistics/models/statistics.php CHANGED
@@ -22,7 +22,7 @@ class statisticsModelPps extends modelPps {
22
  if($isUnique) {
23
  $popupModel->addUniqueViewed( $d['id'] );
24
  }
25
- } elseif(!in_array($d['type'], array('close', 'subscribe_error'))) { // Any action count here
26
  $popupModel->addActionDone( $d['id'] );
27
  }
28
  return $this->insert(array(
22
  if($isUnique) {
23
  $popupModel->addUniqueViewed( $d['id'] );
24
  }
25
+ } else { // Any action count here
26
  $popupModel->addActionDone( $d['id'] );
27
  }
28
  return $this->insert(array(
modules/subscribe/models/subscribe.php CHANGED
@@ -95,22 +95,7 @@ class subscribeModelPps extends modelPps {
95
  ) {
96
  foreach($popup['params']['tpl'][$pref. '_fields'] as $k => $f) {
97
  if(isset($d[ $k ])) {
98
- $value = $d[ $k ];
99
- if($k == 'mailchimp_goup') {
100
- if(isset($popup['params']['tpl']['sub_mailchimp_groups_full'])
101
- && !empty($popup['params']['tpl']['sub_mailchimp_groups_full'])
102
- ) {
103
- $mcGoups = explode(';', $popup['params']['tpl']['sub_mailchimp_groups_full']);
104
- foreach($mcGoups as $g) {
105
- $gIdLabel = explode(':', $g);
106
- if($gIdLabel[0] == $value) { // Find MailChimp Group by it's selected ID
107
- $value = $gIdLabel[1];
108
- break;
109
- }
110
- }
111
- }
112
- }
113
- $subscriberDataArr[] = sprintf($f['label']. ': %s', $value) . '<br />';
114
  }
115
  }
116
  }
@@ -175,9 +160,7 @@ class subscribeModelPps extends modelPps {
175
  $email = isset($popup['params']['tpl'][$pref. '_fields']['email']) && isset($d['email']) ? $d['email'] : '';
176
  if(!empty($email)) {
177
  if(framePps::_()->getModule('add_options')->checkEmailBlackList($email, $popup['params']['tpl']['blacklist'])) {
178
- $errors['email'] = isset($popup['params']['tpl']['blacklist_error']) && !empty($popup['params']['tpl']['blacklist_error'])
179
- ? $popup['params']['tpl']['blacklist_error']
180
- : __('Your email is in blacklist', PPS_LANG_CODE);
181
  }
182
  }
183
  }
@@ -328,19 +311,7 @@ class subscribeModelPps extends modelPps {
328
  }
329
  public function createWpSubscriber($popup, $email, $username, $d, $forReg = false) {
330
  $pref = $forReg ? 'reg' : 'sub';
331
- $password = '';
332
- if(isset($popup['params']['tpl'][$pref. '_fields'])
333
- && !empty($popup['params']['tpl'][$pref. '_fields'])
334
- ) {
335
- foreach($popup['params']['tpl'][$pref. '_fields'] as $k => $f) {
336
- if($f['html'] == 'password' && !empty($d[ $k ])) {
337
- $password = trim( $d[ $k ] );
338
- }
339
- }
340
- }
341
- if(empty($password)) {
342
- $password = wp_generate_password();
343
- }
344
  $userId = wp_create_user($username, $password, $email);
345
  if($userId && !is_wp_error($userId)) {
346
  if(!function_exists('wp_new_user_notification')) {
95
  ) {
96
  foreach($popup['params']['tpl'][$pref. '_fields'] as $k => $f) {
97
  if(isset($d[ $k ])) {
98
+ $subscriberDataArr[] = sprintf($f['label']. ': %s', $d[ $k ]) . '<br />';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  }
100
  }
101
  }
160
  $email = isset($popup['params']['tpl'][$pref. '_fields']['email']) && isset($d['email']) ? $d['email'] : '';
161
  if(!empty($email)) {
162
  if(framePps::_()->getModule('add_options')->checkEmailBlackList($email, $popup['params']['tpl']['blacklist'])) {
163
+ $errors['email'] = __('Your email is in blacklist', PPS_LANG_CODE);
 
 
164
  }
165
  }
166
  }
311
  }
312
  public function createWpSubscriber($popup, $email, $username, $d, $forReg = false) {
313
  $pref = $forReg ? 'reg' : 'sub';
314
+ $password = wp_generate_password();
 
 
 
 
 
 
 
 
 
 
 
 
315
  $userId = wp_create_user($username, $password, $email);
316
  if($userId && !is_wp_error($userId)) {
317
  if(!function_exists('wp_new_user_notification')) {
modules/supsystic_promo/mod.php CHANGED
@@ -313,10 +313,6 @@ array('label' => 'Christmas Tree', 'img_preview' => '365-6-img-prev.png', 'sort_
313
  array('label' => 'Christmas Candies', 'img_preview' => '361-christmas-candies-prev.png', 'sort_order' => 0, 'type_id' => 11),
314
  array('label' => 'Xmas Discount', 'img_preview' => '373-xmas-discount-prev.png', 'sort_order' => 0, 'type_id' => 11),
315
  array('label' => 'Exclusive Subscription', 'img_preview' => '230-7-exclusive-subscr-preview.png', 'sort_order' => 1, 'type_id' => 1),
316
- array('label' => 'Pretty', 'img_preview' => '2016-8-Pretty-prev.png', 'sort_order' => 1, 'type_id' => 1),
317
- array('label' => 'Get Discount', 'img_preview' => '2016-9-get-discount-prev.png', 'sort_order' => 1, 'type_id' => 1),
318
- array('label' => 'Winter Subscribe', 'img_preview' => '2016-10-winter-subscr-prev.png', 'sort_order' => 1, 'type_id' => 1),
319
- array('label' => 'Lavender Mood', 'img_preview' => '2016-11-lavender-mood-prev.png', 'sort_order' => 1, 'type_id' => 1),
320
  );
321
  foreach($promoList as $i => $t) {
322
  $promoList[ $i ]['img_preview_url'] = $imgsPath. $promoList[ $i ]['img_preview'];
313
  array('label' => 'Christmas Candies', 'img_preview' => '361-christmas-candies-prev.png', 'sort_order' => 0, 'type_id' => 11),
314
  array('label' => 'Xmas Discount', 'img_preview' => '373-xmas-discount-prev.png', 'sort_order' => 0, 'type_id' => 11),
315
  array('label' => 'Exclusive Subscription', 'img_preview' => '230-7-exclusive-subscr-preview.png', 'sort_order' => 1, 'type_id' => 1),
 
 
 
 
316
  );
317
  foreach($promoList as $i => $t) {
318
  $promoList[ $i ]['img_preview_url'] = $imgsPath. $promoList[ $i ]['img_preview'];
modules/supsystic_promo/views/supsystic_promo.php CHANGED
@@ -75,12 +75,12 @@ Here you can edit css style of the pop-up window.', PPS_LANG_CODE),
75
  return $content;
76
  }
77
  public function getServerSettings() {
78
- global $wpdb;
79
  return array(
80
  'Operating System' => array('value' => PHP_OS),
81
  'PHP Version' => array('value' => PHP_VERSION),
82
  'Server Software' => array('value' => $_SERVER['SERVER_SOFTWARE']),
83
- 'MySQL' => array('value' => $wpdb->db_version()),
 
84
  'PHP Allow URL Fopen' => array('value' => ini_get('allow_url_fopen') ? __('Yes', PPS_LANG_CODE) : __('No', PPS_LANG_CODE)),
85
  'PHP Memory Limit' => array('value' => ini_get('memory_limit')),
86
  'PHP Max Post Size' => array('value' => ini_get('post_max_size')),
@@ -140,7 +140,6 @@ Here you can edit css style of the pop-up window.', PPS_LANG_CODE),
140
  array('label' => __('Digital Publication Plugin', PPS_LANG_CODE), 'url' => $pluginsUrl. 'digital-publication-plugin/', 'img' => $uploadsUrl. '2016/07/Digital_Publication_256.png', 'desc' => __('Digital Publication WordPress Plugin by Supsystic for Magazines, Catalogs, Portfolios. Convert images, posts, PDF to the page flip book.', PPS_LANG_CODE), 'download' => $downloadsUrl. 'digital-publications-by-supsystic.zip'),
141
  array('label' => __('Contact Form Plugin', PPS_LANG_CODE), 'url' => $pluginsUrl. 'contact-form-plugin/', 'img' => $uploadsUrl. '2016/07/Contact_Form_256.png', 'desc' => __('One of the best plugin for creating Contact Forms on your WordPress site. Changeable fonts, backgrounds, an option for adding fields etc.', PPS_LANG_CODE), 'download' => $downloadsUrl. 'contact-form-by-supsystic.zip'),
142
  array('label' => __('Newsletter Plugin', PPS_LANG_CODE), 'url' => $pluginsUrl. 'newsletter-plugin/', 'img' => $uploadsUrl. '2016/08/icon-256x256.png', 'desc' => __('Supsystic Newsletter plugin for automatic mailing of your letters. You will have no need to control it or send them manually. No coding, hard skills or long hours of customizing are required.', PPS_LANG_CODE), 'download' => $downloadsUrl. 'newsletter-by-supsystic.zip'),
143
- array('label' => __('Membership by Supsystic', PPS_LANG_CODE), 'url' => $pluginsUrl. 'membership-plugin/', 'img' => $uploadsUrl. '2016/09/256.png', 'desc' => __('Create online membership community with custom user profiles, roles, FrontEnd registration and login. Members Directory, activity, groups, messages.', PPS_LANG_CODE), 'download' => $downloadsUrl. 'membership-by-supsystic.zip'),
144
  ));
145
  foreach($this->pluginsList as $i => $p) {
146
  $this->pluginsList[ $i ]['url'] = $this->pluginsList[ $i ]['url']. '?utm_source=plugin&utm_medium=featured_plugins&utm_campaign='. $promoCampaign;
75
  return $content;
76
  }
77
  public function getServerSettings() {
 
78
  return array(
79
  'Operating System' => array('value' => PHP_OS),
80
  'PHP Version' => array('value' => PHP_VERSION),
81
  'Server Software' => array('value' => $_SERVER['SERVER_SOFTWARE']),
82
+ 'MySQL' => array('value' => function_exists('mysql_get_server_info') ? @mysql_get_server_info() : __('Undefined', PPS_LANG_CODE)),
83
+ 'PHP Safe Mode' => array('value' => ini_get('safe_mode') ? __('Yes', PPS_LANG_CODE) : __('No', PPS_LANG_CODE), 'error' => ini_get('safe_mode')),
84
  'PHP Allow URL Fopen' => array('value' => ini_get('allow_url_fopen') ? __('Yes', PPS_LANG_CODE) : __('No', PPS_LANG_CODE)),
85
  'PHP Memory Limit' => array('value' => ini_get('memory_limit')),
86
  'PHP Max Post Size' => array('value' => ini_get('post_max_size')),
140
  array('label' => __('Digital Publication Plugin', PPS_LANG_CODE), 'url' => $pluginsUrl. 'digital-publication-plugin/', 'img' => $uploadsUrl. '2016/07/Digital_Publication_256.png', 'desc' => __('Digital Publication WordPress Plugin by Supsystic for Magazines, Catalogs, Portfolios. Convert images, posts, PDF to the page flip book.', PPS_LANG_CODE), 'download' => $downloadsUrl. 'digital-publications-by-supsystic.zip'),
141
  array('label' => __('Contact Form Plugin', PPS_LANG_CODE), 'url' => $pluginsUrl. 'contact-form-plugin/', 'img' => $uploadsUrl. '2016/07/Contact_Form_256.png', 'desc' => __('One of the best plugin for creating Contact Forms on your WordPress site. Changeable fonts, backgrounds, an option for adding fields etc.', PPS_LANG_CODE), 'download' => $downloadsUrl. 'contact-form-by-supsystic.zip'),
142
  array('label' => __('Newsletter Plugin', PPS_LANG_CODE), 'url' => $pluginsUrl. 'newsletter-plugin/', 'img' => $uploadsUrl. '2016/08/icon-256x256.png', 'desc' => __('Supsystic Newsletter plugin for automatic mailing of your letters. You will have no need to control it or send them manually. No coding, hard skills or long hours of customizing are required.', PPS_LANG_CODE), 'download' => $downloadsUrl. 'newsletter-by-supsystic.zip'),
 
143
  ));
144
  foreach($this->pluginsList as $i => $p) {
145
  $this->pluginsList[ $i ]['url'] = $this->pluginsList[ $i ]['url']. '?utm_source=plugin&utm_medium=featured_plugins&utm_campaign='. $promoCampaign;
pps.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Popup by Supsystic
4
  * Plugin URI: https://supsystic.com/plugins/popup-plugin/
5
  * Description: The Best WordPress popup plugin to help you gain more subscribers, social followers or advertisement. Responsive popups with friendly options
6
- * Version: 1.8.8
7
  * Author: supsystic.com
8
  * Author URI: https://supsystic.com
9
  **/
3
  * Plugin Name: Popup by Supsystic
4
  * Plugin URI: https://supsystic.com/plugins/popup-plugin/
5
  * Description: The Best WordPress popup plugin to help you gain more subscribers, social followers or advertisement. Responsive popups with friendly options
6
+ * Version: 1.8.4
7
  * Author: supsystic.com
8
  * Author URI: https://supsystic.com
9
  **/
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: supsystic.com
3
  Donate link: http://supsystic.com/plugins/popup-plugin
4
  Tags: popup, full screen popup, html popup, wordpress popup, popup contact form, popup builder, modal popup, video popup, youtube popup, social popup, facebook popup, christmas
5
- Tested up to: 4.7.2
6
- Stable tag: 1.8.8
7
 
8
  Popup by Supsystic the best way to convert visitors into subscribers, followers & customers. Create any type of popup with preset popup builder templates
9
 
@@ -279,40 +279,6 @@ Working with adult site content, sometimes is needed to be sure kids not watchin
279
 
280
  == Changelog ==
281
 
282
- = 1.8.8 / 21.02.2017
283
- * Featured plugins updated - added Membership plugin
284
- * Minor issues fix
285
-
286
- = 1.8.7 / 16.02.2017
287
- * WooCommerce categories added to Categories select list
288
- * Facebook Like PopUp fix - to make it work according latest Facebook changes
289
- * Fix HTTP images protocol for christmas snow effect
290
- * Possibility to select week days when you need to show PopUps
291
- * SMTP servers integration
292
- * Send Mail service integration
293
- * Possibility to just close PopUp if email already exists during Registration process
294
- * Fix possible conflict if someone add html tag with name "ajaxurl"
295
- * Setting images for backgrounds only with selected in WordPress library size
296
- * Possibility to show Close button for Close mode - "Only after action (Subscribe / Share / Like)"
297
-
298
- = 1.8.6 / 26.01.2017
299
- * Possibility to manually create Passwords on Frontend PopUp Registration
300
- * Additional re-position and resize PopUp after all images inside was loaded
301
- * Do not use PopUp close and subscribe errors actions - when calculating conversions
302
- * Blacklist error message editing
303
- * Make correct work Layered PopUp with Click outside PopUp option
304
- * Fix issue with displaying PopUp on Posts page listing
305
-
306
- = 1.8.5 / 12.01.2017
307
- * Fix MailChimp Groups List sending value in email
308
- * Fixed old code for php 7 compatibility
309
- * SendGrid API update
310
- * Added PopUp Template "Lavender Mood"
311
- * Added PopUp Template "Winter Subscribe"
312
- * Added PopUp Template "Get Discount"
313
- * Added PopUp Template "Pretty"
314
- * Minor code review
315
-
316
  = 1.8.4 / 19.12.2016 =
317
  * Redesign PopUp Theme "New York"
318
  * Redesign PopUp Theme "Video List"
2
  Contributors: supsystic.com
3
  Donate link: http://supsystic.com/plugins/popup-plugin
4
  Tags: popup, full screen popup, html popup, wordpress popup, popup contact form, popup builder, modal popup, video popup, youtube popup, social popup, facebook popup, christmas
5
+ Tested up to: 4.7
6
+ Stable tag: 1.8.4
7
 
8
  Popup by Supsystic the best way to convert visitors into subscribers, followers & customers. Create any type of popup with preset popup builder templates
9
 
279
 
280
  == Changelog ==
281
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
  = 1.8.4 / 19.12.2016 =
283
  * Redesign PopUp Theme "New York"
284
  * Redesign PopUp Theme "Video List"