<?php namespace sgpb; use sgpb\AdminHelper; use \SGPBConfigDataHelper; class ConvertToNewVersion { private $id; private $content = ''; private $type; private $title; private $options; private $customOptions = array(); public function setContent($content) { $this->content = $content; } public function getContent() { return $this->content; } public function setType($type) { if ($type == 'shortcode') { $type = 'html'; } $this->type = $type; } public function getType() { return $this->type; } public function setTitle($title) { $this->title = $title; } public function getTitle() { return $this->title; } public function setId($id) { $this->id = (int)$id; } public function getId() { return $this->id; } public function setOptions($options) { $this->options = $options; } public function getOptions() { return $this->options; } public function setCustomOptions($customOptions) { $this->customOptions = $customOptions; } public function getCustomOptions() { return $this->customOptions; } public static function convert() { $obj = new self(); $obj->insertDataToNew(); } public function insertDataToNew() { $idsMapping = array(); Installer::install(); Installer::registerPlugin(); $popups = $this->getAllSavedPopups(); $this->convertSettings(); $arr = array(); $popupPreviewId = get_option('popupPreviewId'); foreach ($popups as $popup) { if (empty($popup)) { continue; } // we should not convert preview popup if ($popup['id'] == $popupPreviewId) { continue; } $popupObj = $this->popupObjectFromArray($popup); $arr[] = $popupObj; $args = array( 'post_title' => $popupObj->getTitle(), 'post_content' => $popupObj->getContent(), 'post_status' => 'publish', 'post_type' => SG_POPUP_POST_TYPE ); $id = $popupObj->getId(); $newOptions = $this->getNewOptionsFormSavedData($popupObj); $newPopupId = @wp_insert_post($args); $newOptions['sgpb-post-id'] = $newPopupId; $this->saveOtherOptions($newOptions); update_post_meta($newPopupId, 'sg_popup_options', $newOptions); $idsMapping[$id] = $newPopupId; } $this->convertCounter($idsMapping); $this->convertSubscribers(); update_option('sgpbConvertedIds', $idsMapping); return $arr; } public function convertSubscribers() { global $wpdb; $oldsubscribersTableName = $wpdb->prefix.'sg_subscribers'; $subscribersTableName = $wpdb->prefix.SGPB_SUBSCRIBERS_TABLE_NAME; $subscribers = $wpdb->get_results( $wpdb->prepare( "SELECT `id`, `firstName`, `lastName`, `email`, `subscriptionType`, `status` from $oldsubscribersTableName" ), ARRAY_A); if (empty($subscribers)) { return false; } foreach ($subscribers as $subscriber) { $subscriber['subscriptionType'] = $this->getPostByTitle($subscriber['subscriptionType']); $date = gmdate('Y-m-d'); $wpdb->query( $wpdb->prepare("INSERT INTO $subscribersTableName (`firstName`, `lastName`, `email`, `cDate`, `subscriptionType`, `unsubscribed`) VALUES (%s, %s, %s, %s, %d, %d) ", $subscriber['firstName'], $subscriber['lastName'], $subscriber['email'], $date, $subscriber['subscriptionType'], 0) ); } } private function getPostByTitle($pageTitle, $output = OBJECT) { global $wpdb; $post = $wpdb->get_var($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE post_title = %s AND post_type='popupbuilder'", $pageTitle)); if (!empty($post)) { return get_post($post, $output)->ID; } return null; } /** * Convert settings section saved options to new version * * @since 2.6.7.6 * * @return bool */ private function convertSettings() { global $wpdb; $settings = $wpdb->get_row('SELECT options FROM '.$wpdb->prefix .'sg_popup_settings WHERE id = 1', ARRAY_A); if (empty($settings['options'])) { return false; } $settings = json_decode($settings['options'], true); $deleteData = 0; if (!empty($settings['tables-delete-status'])) { $deleteData = 1; } $userRoles = $settings['plugin_users_role']; if (empty($userRoles) || !is_array($userRoles)) { $userRoles = array(); } $userRoles = array_map(function($role) { // it's remove sgpb_ keyword from selected values $role = substr($role, 5, strlen($role)-1); return $role; }, $userRoles); update_option('sgpb-user-roles', $userRoles); update_option('sgpb-dont-delete-data', $deleteData); return true; } private function convertCounter($idsMapping) { $oldCounter = get_option('SgpbCounter'); if (!$oldCounter) { return false; } $newCounter = array(); foreach ($oldCounter as $key => $value) { if (isset($idsMapping[$key])){ $newId = $idsMapping[$key]; $newCounter[$newId] = $value; } } update_option('SgpbCounter', $newCounter); return true; } private function getAllSavedPopups() { global $wpdb; $oldsg_popupsTableName = $wpdb->prefix.'sg_popup'; $popups = $wpdb->get_results( $wpdb->prepare("SELECT `id`, `type`, `title`, `options` from $oldsg_popupsTableName ORDER BY id" ), ARRAY_A); return $popups; } public function getNewOptionsFormSavedData($popup) { $options = $popup->getOptions(); $customOptions = $popup->getCustomOptions(); $options = array_merge($options, $customOptions); // return addons event from add_connections data $addonsEvent = $this->getAddonsEventFromPopup($popup); if ($addonsEvent) { $options = array_merge($options, $addonsEvent); } $options = $this->filterOptions($options); $names = $this->getNamesMapping(); $newData = array(); $type = $popup->getType(); if (empty($names)) { return $newData; } $newData['sgpb-type'] = $type; foreach ($names as $oldName => $newName) { if (isset($options[$oldName])) { $optionName = $this->changeOldValues($oldName, $options[$oldName]); $newData[$newName] = $optionName; } } $newData['sgpb-enable-popup-overlay'] = 'on'; $newData['sgpb-show-background'] = 'on'; return $newData; } private function saveOtherOptions($options) { $popupId = (int)$options['sgpb-post-id']; $mobileOperator = ''; $conditions = array(); $conditions['sgpb-target'] = array(array(array('param' => 'not_rule'))); $conditions['sgpb-conditions'] = array(array()); $eventsInitialData = array( array( ) ); if (!empty($options['sgpb-option-exit-intent-enable'])) { $eventsInitialData[0][] = array( 'param' => 'exitIntent', 'value' => isset($options['sgpb-option-exit-intent-type']) ? $options['sgpb-option-exit-intent-type'] : '', 'hiddenOption' => array( 'sgpb-exit-intent-expire-time' => isset($options['sgpb-exit-intent-expire-time']) ? $options['sgpb-exit-intent-expire-time'] : '', 'sgpb-exit-intent-cookie-level' => isset($options['sgpb-exit-intent-cookie-level']) ? $options['sgpb-exit-intent-cookie-level'] : '', 'sgpb-exit-intent-soft-from-top' => isset($options['sgpb-exit-intent-soft-from-top']) ? $options['sgpb-exit-intent-soft-from-top'] : '' ) ); } else if (!empty($options['sgpb-option-enable-ad-block'])) { $eventsInitialData[0][] = array( 'param' => 'AdBlock', 'value' => $options['sgpb-popup-delay'], 'hiddenOption' => array() ); } // after inactivity if (!empty($options['sgpb-inactivity-status'])) { $eventsInitialData[0][] = array( 'param' => 'inactivity', 'value' => isset($options['sgpb-inactivity-timer']) ? $options['sgpb-inactivity-timer'] : '', 'hiddenOption' => array() ); } // after scroll if (!empty($options['sgpb-onscroll-status'])) { $eventsInitialData[0][] = array( 'param' => 'onScroll', 'value' => isset($options['sgpb-onscroll-percentage']) ? $options['sgpb-onscroll-percentage'] : '', 'hiddenOption' => array() ); } if (empty($eventsInitialData[0])) { $eventsInitialData[0][] = array('param' => 'load', 'value' => ''); } update_post_meta($popupId, 'sg_popup_events', $eventsInitialData); // by user status (logged in/out) if (!empty($options['sgpb-by-user-status'])) { $operator = '=='; if (isset($options['sgpb-for-logged-in-user']) && $options['sgpb-for-logged-in-user'] === 'false') { $operator = '!='; } $conditions['sgpb-conditions'][0][] = array( 'param' => 'groups_user_role', 'operator' => $operator, 'value' => 'loggedIn' ); } // hide or show on mobile if (isset($options['sgpb-hide-on-mobile']) && $options['sgpb-hide-on-mobile'] == 'on') { $conditions['sgpb-conditions'][0][] = array( 'param' => 'groups_devices', 'operator' => '!=', 'value' => array( 'is_mobile' ) ); } if (isset($options['sgpb-only-on-mobile']) && $options['sgpb-only-on-mobile'] == 'on') { $conditions['sgpb-conditions'][0][] = array( 'param' => 'groups_devices', 'operator' => '==', 'value' => array( 'is_mobile' ) ); } // detect by country if (isset($options['sgpb-by-country']) && $options['sgpb-by-country'] == 'on') { if (isset($options['sgpb-allow-countries'])) { $options['sgpb-allow-countries'] = '!='; if ($options['sgpb-allow-countries'] == 'allow') { $options['sgpb-allow-countries'] = '=='; } } $conditions['sgpb-conditions'][0][] = array( 'param' => 'groups_countries', 'operator' => isset($options['sgpb-allow-countries']) ? $options['sgpb-allow-countries'] : '', 'value' => explode(',', (isset($options['sgpb-countries-iso']) ? $options['sgpb-countries-iso'] : '')) ); } update_post_meta($popupId, 'sg_popup_target', $conditions); // random popup if (isset($options['sgpb-random-popup']) && $options['sgpb-random-popup'] == 'on') { $randomPopupCategory = AdminHelper::getTaxonomyBySlug(SG_RANDOM_TAXONOMY_SLUG); wp_set_object_terms($popupId, SG_RANDOM_TAXONOMY_SLUG, SG_POPUP_CATEGORY_TAXONOMY, true); } $this->saveProTarget($options); // MailChimp $mailchimpApiKey = get_option("SG_MAILCHIMP_API_KEY"); if ($mailchimpApiKey) { update_option('SGPB_MAILCHIMP_API_KEY', $mailchimpApiKey); } // AWeber $aweberAccessToken = get_option('sgAccessToken'); if ($aweberAccessToken) { $requestTokenSecret = get_option('requestTokenSecret'); $accessTokenSecret = get_option('sgAccessTokenSecret'); update_option('sgpbRequestTokenSecret', $requestTokenSecret); update_option('sgpbAccessTokenSecret', $accessTokenSecret); update_option('sgpbAccessToken', $aweberAccessToken); } return $options; } public function saveProTarget($options) { if (empty($options)) { return; } $popupId = (int)$options['sgpb-post-id']; // It's got already saved targets for do not override already saved data $popupSavedTarget = get_post_meta($popupId, 'sg_popup_target'); $target = array(); $target['sgpb-target'] = array(); $target['sgpb-conditions'] = array(); if (!empty($popupSavedTarget[0]['sgpb-conditions'])) { $target['sgpb-conditions'] = $popupSavedTarget[0]['sgpb-conditions']; } $isSavedToHome = false; if (!empty($options['allPagesStatus'])) { if ($options['allPages'] == 'selected') { $savedPages = isset($options['allSelectedPages']) ? (array)$options['allSelectedPages'] : array(); $savedPagesValues = array_values($savedPages); // -1 mean saved for home page if (in_array('-1', $savedPagesValues)) { $isSavedToHome = true; } $args = array( 'post__in' => $savedPagesValues, 'posts_per_page' => 10, 'post_type' => 'page' ); $searchResults = SGPBConfigDataHelper::getPostTypeData($args); if (!empty($searchResults)) { $target['sgpb-target'][0][] = array('param' => 'page_selected', 'operator' => '==', 'value' => $searchResults); } } else { $target['sgpb-target'][0][] = array('param' => 'page_all', 'operator' => '=='); } } if (!empty($options['allPostsStatus'])) { $allPosts = $options['allPosts']; if ($allPosts == 'selected') { $savedPosts = (array)$options['allSelectedPosts']; $savedPostsValues = array_values($savedPosts); // -1 mean saved for home page if (in_array('-1', $savedPostsValues)) { $isSavedToHome = true; } $args = array( 'post__in' => $savedPostsValues, 'posts_per_page' => 10, 'post_type' => 'post' ); $searchResults = SGPBConfigDataHelper::getPostTypeData($args); if (!empty($searchResults)) { $target['sgpb-target'][0][] = array('param' => 'post_selected', 'operator' => '==', 'value' => $searchResults); } } else if ($allPosts == 'all') { $target['sgpb-target'][0][] = array('param' => 'post_all', 'operator' => '=='); } else { $selectedPostCategories = array_values($options['posts-all-categories']); $target['sgpb-target'][0][] = array('param' => 'post_category', 'operator' => '==', 'value' => $selectedPostCategories); } } if ($isSavedToHome) { $target['sgpb-target'][0][] = array('param' => 'page_type', 'operator' => '==', 'value' => array('is_home_page', 'is_home')); } if (!empty($options['allCustomPostsStatus'])) { $customPostTypes = $options['all-custom-posts']; if (!empty($customPostTypes)) { $selectedCustomPosts = $options['allSelectedCustomPosts']; if ($options['showAllCustomPosts'] == 'selected') { foreach ($customPostTypes as $customPostType) { $args = array( 'post__in' => array_values($selectedCustomPosts), 'posts_per_page' => 10, 'post_type' => $customPostType ); $searchResults = SGPBConfigDataHelper::getPostTypeData($args); if (!empty($searchResults)) { $target['sgpb-target'][0][] = array('param' => $customPostType.'_selected', 'operator' => '==', 'value' => $searchResults); } } } else { $target['sgpb-target'][0][] = array('param' => 'post_type', 'operator' => '==', 'value' => array_values($customPostTypes)); } } } update_post_meta($popupId, 'sg_popup_target', $target); } /** * Get Addons options * * @param obj $popup * * @return bool|array */ private function getAddonsEventFromPopup($popup) { if (empty($popup)) { return false; } $popupId = $popup->getId(); global $wpdb; $sg_popup_addons_connectionTableName = $wpdb->prefix.'sg_popup_addons_connection'; $results = $wpdb->get_results($wpdb->prepare( "SELECT options FROM $sg_popup_addons_connectionTableName WHERE popupId = %d and extensionType = 'option'", $popupId) , ARRAY_A); if (empty($results)) { return false; } $options = array(); // it's collect all events saved values ex Exit Intent and AdBlock foreach ($results as $result) { $currentOptions = json_decode($result['options'], true); if (empty($currentOptions)) { continue; } $options = array_merge($options, $currentOptions); } return $options; } /** * Filter and change some related values for new version * * @param array $options * * @return array $options */ private function filterOptions($options) { if (isset($options['effect']) && $options['effect'] != 'No effect') { $options['sgpb-open-animation'] = 'on'; } if (isset($options['isActiveStatus']) && $options['isActiveStatus'] == 'off') { $options['isActiveStatus'] = ''; } if (empty($options['sgTheme3BorderColor'])) { $options['sgTheme3BorderColor'] = '#000000'; } if (isset($options['popupContentBackgroundRepeat']) && ($options['popupContentBackgroundRepeat'] != 'no-repeat' && $options['popupContentBackgroundSize'] == 'auto')) { $options['popupContentBackgroundSize'] = 'repeat'; } $themeNumber = 1; if (isset($options['theme'])) { $themeNumber = preg_replace('/[^0-9]/', '', $options['theme']); } if (isset($options['aweber-success-behavior']) && $options['aweber-success-behavior'] == 'redirectToUrl') { $options['aweber-success-behavior'] = 'redirectToURL'; } // pro options if (isset($options['disablePopupOverlay'])) { $options['sgpb-enable-popup-overlay'] = ''; } // contact form new options if (isset($options['contact-success-behavior']) && $options['contact-success-behavior'] == 'redirectToUrl') { $options['contact-success-behavior'] = 'redirectToURL'; } if (isset($options['contact-text-input-bgcolor'])) { $options['sgpb-contact-message-bg-color'] = $options['contact-text-input-bgcolor']; } if (isset($options['contact-text-bordercolor'])) { $options['sgpb-contact-message-border-color'] = $options['contact-text-bordercolor']; } if (isset($options['contact-inputs-color'])) { $options['sgpb-contact-message-text-color'] = $options['contact-inputs-color']; } if (isset($options['contact-placeholder-color'])) { $options['sgpb-contact-message-placeholder-color'] = $options['contact-placeholder-color']; } if (isset($options['contact-inputs-border-width'])) { $options['sgpb-contact-message-border-width'] = $options['contact-inputs-border-width']; } if (isset($options['contact-success-popups-list'])) { $options['contact-success-popups-list'] = sgpGetCorrectPopupId($options['contact-success-popups-list']); } if (isset($options['popup-content-padding'])) { // add theme default padding to content padding switch ($themeNumber) { case 1: $options['popup-content-padding'] += 7; break; case 4: case 6: $options['popup-content-padding'] += 12; break; case 2: case 3: $options['popup-content-padding'] += 0; break; case 5: $options['popup-content-padding'] += 5; break; } } switch ($themeNumber) { case 1: $buttonImageWidth = 21; $buttonImageHeight = 21; break; case 2: $buttonImageWidth = 20; $buttonImageHeight = 20; break; case 3: $buttonImageWidth = 38; $buttonImageHeight = 19; break; case 5: $buttonImageWidth = 17; $buttonImageHeight = 17; break; case 6: $buttonImageWidth = 30; $buttonImageHeight = 30; break; default: $buttonImageWidth = 0; $buttonImageHeight = 0; } // social popup add to default value if (empty($options['sgMailLable'])) { $options['sgMailLable'] = 'E-mail'; } if (empty($options['fbShareLabel'])) { $options['fbShareLabel'] = 'Share'; } if (empty($options['lindkinLabel'])) { $options['lindkinLabel'] = 'Share'; } if (empty($options['googLelabel'])) { $options['googLelabel'] = '+1'; } if (empty($options['twitterLabel'])) { $options['twitterLabel'] = 'Tweet'; } if (empty($options['pinterestLabel'])) { $options['pinterestLabel'] = 'Pin it'; } if (isset($options['subs-success-behavior']) && $options['subs-success-behavior'] == 'redirectToUrl') { $options['subs-success-behavior'] = 'redirectToURL'; } $options['sgpb-subs-form-bg-color'] = '#FFFFFF'; $options['sgpb-button-image-width'] = $buttonImageWidth; $options['sgpb-button-image-height'] = $buttonImageHeight; // pro options customizations if (SGPB_POPUP_PKG > SGPB_POPUP_PKG_FREE) { if (empty($options['sgpb-restriction-yes-btn-radius-type'])) { $options['sgpb-restriction-yes-btn-radius-type'] = '%'; } if (empty($options['sgpb-restriction-no-btn-radius-type'])) { $options['sgpb-restriction-no-btn-radius-type'] = '%'; } if (empty($options['sgpb-restriction-yes-btn-border-color'])) { // border color should be like background color $options['sgpb-restriction-yes-btn-border-color'] = $options['yesButtonBackgroundColor']; } if (empty($options['sgpb-restriction-no-btn-border-color'])) { // border color should be like background color $options['sgpb-restriction-no-btn-border-color'] = $options['noButtonBackgroundColor']; } } return $options; } public function changeOldValues($optionName, $optionValue) { if ($optionName == 'theme') { $themeNumber = preg_replace('/[^0-9]/', '', $optionValue); $optionValue = 'sgpb-theme-'.$themeNumber; } return $optionValue; } private function popupObjectFromArray($arr) { global $wpdb; $options = json_decode($arr['options'], true); $type = $arr['type']; if (empty($type)) { return false; } $this->setId($arr['id']); $this->setType($type); $this->setTitle($arr['title']); $this->setContent(''); switch ($type) { case 'image': $sg_image_popup = $wpdb->prefix.'sg_image_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `url` FROM $sg_image_popup WHERE id = %d", $arr['id']) , ARRAY_A); if (!empty($result['url'])) { $options['image-url'] = $result['url']; } break; case 'html': $sg_html_popup = $wpdb->prefix.'sg_html_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `content` FROM $sg_html_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['content'])) { $this->setContent($result['content']); } break; case 'fblike': $sg_fblike_popup = $wpdb->prefix.'sg_fblike_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `content`, `options` FROM $sg_fblike_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['content'])) { $this->setContent($result['content']); } $customOptions = $result['options']; $customOptions = json_decode($customOptions, true); if (!empty($options)) { $this->setCustomOptions($customOptions); } break; case 'shortcode': $sg_shortCode_popup = $wpdb->prefix.'sg_shortCode_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `url` FROM $sg_shortCode_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['url'])) { $this->setContent($result['url']); } break; case 'iframe': $sg_iframe_popup = $wpdb->prefix.'sg_iframe_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `url` FROM $sg_iframe_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['url'])) { $options['iframe-url'] = $result['url']; } break; case 'video': $sg_video_popup = $wpdb->prefix.'sg_video_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `url`, `options` FROM $sg_video_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['url'])) { $options['video-url'] = $result['url']; } $customOptions = $result['options']; $customOptions = json_decode($customOptions, true); if (!empty($customOptions)) { $this->setCustomOptions($customOptions); } break; case 'ageRestriction': $sg_age_restriction_popup = $wpdb->prefix.'sg_age_restriction_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `content`, `yesButton` as `yesButtonLabel`, `noButton` as `noButtonLabel`, `url` as `restrictionUrl` FROM $sg_age_restriction_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['content'])) { $this->setContent($result['content']); } unset($result['content']); if (!empty($result)) { $this->setCustomOptions($result); } break; case 'social': $sg_social_popup = $wpdb->prefix.'sg_social_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `socialContent`, `buttons`, `socialOptions` FROM $sg_social_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['socialContent'])) { $this->setContent($result['socialContent']); } $buttons = json_decode($result['buttons'], true); $socialOptions = json_decode($result['socialOptions'], true); $socialAllOptions = array_merge($buttons, $socialOptions); $this->setCustomOptions($socialAllOptions); break; case 'subscription': $sg_subscription_popup = $wpdb->prefix.'sg_subscription_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `content`, `options` FROM $sg_subscription_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['content'])) { $this->setContent($result['content']); } $subsOptions = $result['options']; $subsOptions = json_decode($subsOptions, true); if (!empty($subsOptions)) { $this->setCustomOptions($subsOptions); } break; case 'countdown': $sg_countdown_popup = $wpdb->prefix.'sg_countdown_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `content`, `options` FROM $sg_countdown_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['content'])) { $this->setContent($result['content']); } $customOptions = $result['options']; $customOptions = json_decode($customOptions, true); if (!empty($options)) { $this->setCustomOptions($customOptions); } break; case 'contactForm': $sg_contact_form_popup = $wpdb->prefix.'sg_contact_form_popup'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `content`, `options` FROM $sg_contact_form_popup WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['content'])) { $this->setContent($result['content']); } $customOptions = $result['options']; $customOptions = json_decode($customOptions, true); if (!empty($options)) { $this->setCustomOptions($customOptions); } break; case 'mailchimp': $sg_popup_mailchimp = $wpdb->prefix.'sg_popup_mailchimp'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `content`, `options` FROM $sg_popup_mailchimp WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['content'])) { $this->setContent($result['content']); } $customOptions = $result['options']; $customOptions = json_decode($customOptions, true); if (!empty($options)) { $this->setCustomOptions($customOptions); } break; case 'aweber': $sg_popup_aweber = $wpdb->prefix.'sg_popup_aweber'; $result = $wpdb->get_row( $wpdb->prepare("SELECT `content`, `options` FROM $sg_popup_aweber WHERE id = %d", $arr['id']), ARRAY_A); if (!empty($result['content'])) { $this->setContent($result['content']); } $customOptions = $result['options']; $customOptions = json_decode($customOptions, true); if (!empty($options)) { $this->setCustomOptions($customOptions); } break; } $this->setOptions($options); return $this; } public function getNamesMapping() { $names = array( 'type' => 'sgpb-type', 'delay' => 'sgpb-popup-delay', 'isActiveStatus' => 'sgpb-is-active', 'image-url' => 'sgpb-image-url', 'theme' => 'sgpb-popup-themes', 'effect' => 'sgpb-open-animation-effect', 'duration' => 'sgpb-open-animation-speed', 'popupOpenSound' => 'sgpb-open-sound', 'popupOpenSoundFile' => 'sgpb-sound-url', 'popup-dimension-mode' => 'sgpb-popup-dimension-mode', 'popup-responsive-dimension-measure' => 'sgpb-responsive-dimension-measure', 'width' => 'sgpb-width', 'height' => 'sgpb-height', 'maxWidth' => 'sgpb-max-width', 'maxHeight' => 'sgpb-max-height', 'escKey' => 'sgpb-esc-key', 'closeButton' => 'sgpb-enable-close-button', 'buttonDelayValue' => 'sgpb-close-button-delay', 'scrolling' => 'sgpb-enable-content-scrolling', 'disable-page-scrolling' => 'sgpb-disable-page-scrolling', 'overlayClose' => 'sgpb-overlay-click', 'contentClick' => 'sgpb-content-click', 'content-click-behavior' => 'sgpb-content-click-behavior', 'click-redirect-to-url' => 'sgpb-click-redirect-to-url', 'redirect-to-new-tab' => 'sgpb-redirect-to-new-tab', 'reopenAfterSubmission' => 'sgpb-reopen-after-form-submission', 'repeatPopup' => 'sgpb-show-popup-same-user', 'popup-appear-number-limit' => 'sgpb-show-popup-same-user-count', 'onceExpiresTime' => 'sgpb-show-popup-same-user-expiry', 'save-cookie-page-level' => 'sgpb-show-popup-same-user-page-level', 'popupContentBgImage' => 'sgpb-show-background', 'popupContentBackgroundSize' => 'sgpb-background-image-mode', 'popupContentBgImageUrl' => 'sgpb-background-image', 'sgOverlayColor' => 'sgpb-overlay-color', 'sg-content-background-color' => 'sgpb-background-color', 'popup-background-opacity' => 'sgpb-content-opacity', 'opacity' => 'sgpb-overlay-opacity', 'sgOverlayCustomClasss' => 'sgpb-overlay-custom-class', 'sgContentCustomClasss' => 'sgpb-content-custom-class', 'popup-z-index' => 'sgpb-popup-z-index', 'popup-content-padding' => 'sgpb-content-padding', 'popupFixed' => 'sgpb-popup-fixed', 'fixedPostion' => 'sgpb-popup-fixed-position', 'sgpb-open-animation' => 'sgpb-open-animation', 'theme-close-text' => 'sgpb-button-text', 'sgTheme3BorderRadius' => 'sgpb-border-radius', 'sgTheme3BorderColor' => 'sgpb-border-color', 'fblike-like-url' => 'sgpb-fblike-like-url', 'fblike-layout' => 'sgpb-fblike-layout', 'fblike-dont-show-share-button' => 'sgpb-fblike-dont-show-share-button', 'sgpb-button-image-width' => 'sgpb-button-image-width', 'sgpb-button-image-height' => 'sgpb-button-image-height' ); // iframe pro popup type $names['iframe-url'] = 'sgpb-iframe-url'; // video pro popup type $names['video-url'] = 'sgpb-video-url'; $names['video-autoplay'] = 'sgpb-video-autoplay'; // age restriction $names['yesButtonLabel'] = 'sgpb-restriction-yes-btn'; $names['noButtonLabel'] = 'sgpb-restriction-no-btn'; $names['restrictionUrl'] = 'sgpb-restriction-no-url'; $names['yesButtonBackgroundColor'] = 'sgpb-restriction-yes-btn-bg-color'; $names['yesButtonTextColor'] = 'sgpb-restriction-yes-btn-text-color'; $names['yesButtonRadius'] = 'sgpb-restriction-yes-btn-radius'; $names['sgRestrictionExpirationTime'] = 'sgpb-restriction-yes-expiration-time'; $names['restrictionCookeSavingLevel'] = 'sgpb-restriction-cookie-level'; $names['noButtonBackgroundColor'] = 'sgpb-restriction-no-btn-bg-color'; $names['noButtonTextColor'] = 'sgpb-restriction-no-btn-text-color'; $names['noButtonRadius'] = 'sgpb-restriction-no-btn-radius'; // age restriction new options $names['sgpb-restriction-yes-btn-radius-type'] = 'sgpb-restriction-yes-btn-radius-type'; $names['sgpb-restriction-no-btn-radius-type'] = 'sgpb-restriction-no-btn-radius-type'; $names['sgpb-restriction-yes-btn-border-color'] = 'sgpb-restriction-yes-btn-border-color'; $names['sgpb-restriction-no-btn-border-color'] = 'sgpb-restriction-no-btn-border-color'; $proNames = array( 'autoClosePopup' => 'sgpb-auto-close', 'popupClosingTimer' => 'sgpb-auto-close-time', 'disablePopupOverlay' => 'sgpb-enable-popup-overlay', 'disablePopup' => 'sgpb-disable-popup-closing', 'popup-schedule-status' => 'sgpb-schedule-status', 'schedule-start-weeks' => 'sgpb-schedule-weeks', 'schedule-start-time' => 'sgpb-schedule-start-time', 'schedule-end-time' => 'sgpb-schedule-end-time', 'popup-timer-status' => 'sgpb-popup-timer-status', 'popup-start-timer' => 'sgpb-popup-start-timer', 'popup-finish-timer' => 'sgpb-popup-end-timer', 'inActivityStatus' => 'sgpb-inactivity-status', 'inactivity-timout' => 'sgpb-inactivity-timer', 'onScrolling' => 'sgpb-onscroll-status', 'beforeScrolingPrsent' => 'sgpb-onscroll-percentage', 'sg-user-status' => 'sgpb-by-user-status', 'loggedin-user' => 'sgpb-for-logged-in-user', 'forMobile' => 'sgpb-hide-on-mobile', 'openMobile' => 'sgpb-only-on-mobile', 'countryStatus' => 'sgpb-by-country', 'allowCountries' => 'sgpb-allow-countries', 'countryIso' => 'sgpb-countries-iso', 'randomPopup' => 'sgpb-random-popup' ); $names = array_merge($names, $proNames); // pro options $names['allPagesStatus'] = 'allPagesStatus'; $names['showAllPages'] = 'allPages'; $names['allSelectedPages'] = 'allSelectedPages'; $names['allPostsStatus'] = 'allPostsStatus'; $names['showAllPosts'] = 'allPosts'; $names['allSelectedPosts'] = 'allSelectedPosts'; $names['posts-all-categories'] = 'posts-all-categories'; $names['allCustomPostsStatus'] = 'allCustomPostsStatus'; $names['all-custom-posts'] = 'all-custom-posts'; $names['showAllCustomPosts'] = 'showAllCustomPosts'; $names['allSelectedCustomPosts'] = 'allSelectedCustomPosts'; // countdown pro popup type $names['countdownNumbersBgColor'] = 'sgpb-counter-background-color'; $names['countdownNumbersTextColor'] = 'sgpb-counter-text-color'; $names['sg-due-date'] = 'sgpb-countdown-due-date'; $names['sg-countdown-type'] = 'sgpb-countdown-type'; $names['sg-time-zone'] = 'sgpb-countdown-timezone'; $names['counts-language'] = 'sgpb-countdown-language'; $names['pushToBottom'] = 'sgpb-countdown-show-on-top'; $names['countdown-autoclose'] = 'sgpb-countdown-close-timeout'; // contact form pro popup type $names['show-form-to-top'] = 'sgpb-contact-show-form-to-top'; $names['contact-name-status'] = 'sgpb-contact-field-name'; $names['contact-name'] = 'sgpb-contact-name-placeholder'; $names['contact-name-required'] = 'sgpb-contact-name-required'; $names['contact-subject-status'] = 'sgpb-contact-field-subject'; $names['contact-subject'] = 'sgpb-contact-subject-placeholder'; $names['contact-subject-required'] = 'sgpb-contact-subject-required'; $names['contact-email'] = 'sgpb-contact-email-placeholder'; $names['contact-message'] = 'sgpb-contact-message-placeholder'; $names['contact-fail-message'] = 'sgpb-contact-error-message'; $names['contact-receive-email'] = 'sgpb-contact-to-email'; $names['contact-validation-message'] = 'sgpb-contact-required-message'; $names['contact-validate-email'] = 'sgpb-contact-invalid-email-message'; $names['contact-inputs-width'] = 'sgpb-contact-inputs-width'; $names['contact-inputs-height'] = 'sgpb-contact-inputs-height'; $names['contact-inputs-border-width'] = 'sgpb-contact-inputs-border-width'; $names['contact-text-input-bgcolor'] = 'sgpb-contact-inputs-bg-color'; $names['contact-text-bordercolor'] = 'sgpb-contact-inputs-border-color'; $names['contact-inputs-color'] = 'sgpb-contact-inputs-text-color'; $names['contact-placeholder-color'] = 'sgpb-contact-inputs-placeholder-color'; $names['contact-area-width'] = 'sgpb-contact-message-width'; $names['contact-area-height'] = 'sgpb-contact-message-height'; $names['sg-contact-resize'] = 'sgpb-contact-message-resize'; $names['contact-btn-width'] = 'sgpb-contact-submit-width'; $names['contact-btn-height'] = 'sgpb-contact-submit-height'; $names['contact-btn-title'] = 'sgpb-contact-submit-title'; $names['contact-btn-progress-title'] = 'sgpb-contact-submit-title-progress'; $names['contact-button-bgcolor'] = 'sgpb-contact-submit-bg-color'; $names['contact-button-color'] = 'sgpb-contact-submit-text-color'; $names['dont-show-content-to-contacted-user'] = 'sgpb-contact-hide-for-contacted-users'; $names['contact-success-behavior'] = 'sgpb-contact-success-behavior'; $names['contact-success-message'] = 'sgpb-contact-success-message'; $names['contact-success-redirect-url'] = 'sgpb-contact-success-redirect-URL'; $names['contact-success-redirect-new-tab'] = 'sgpb-contact-success-redirect-new-tab'; $names['contact-success-popups-list'] = 'sgpb-contact-success-popup'; $names['contact-gdpr'] = 'sgpb-contact-gdpr-status'; $names['contact-gdpr-label'] = 'sgpb-contact-gdpr-label'; $names['contact-gdpr-text'] = 'sgpb-contact-gdpr-text'; $names['sgpb-contact-message-bg-color'] = 'sgpb-contact-message-bg-color'; $names['sgpb-contact-message-border-color'] = 'sgpb-contact-message-border-color'; $names['sgpb-contact-message-text-color'] = 'sgpb-contact-message-text-color'; $names['sgpb-contact-message-placeholder-color'] = 'sgpb-contact-message-placeholder-color'; $names['sgpb-contact-message-border-width'] = 'sgpb-contact-message-border-width'; // Social $names['shareUrlType'] = 'sgpb-social-share-url-type'; $names['sgShareUrl'] = 'sgpb-social-share-url'; $names['sgSocialTheme'] = 'sgpb-social-share-theme'; $names['sgSocialButtonsSize'] = 'sgpb-social-theme-size'; $names['sgSocialLabel'] = 'sgpb-social-show-labels'; $names['sgSocialShareCount'] = 'sgpb-social-share-count'; $names['sgRoundButton'] = 'sgpb-social-round-buttons'; $names['sgEmailStatus'] = 'sgpb-social-status-email'; $names['sgMailLable'] = 'sgpb-social-label-email'; $names['sgFbStatus'] = 'sgpb-social-status-facebook'; $names['fbShareLabel'] = 'sgpb-social-label-facebook'; $names['sgLinkedinStatus'] = 'sgpb-social-status-linkedin'; $names['lindkinLabel'] = 'sgpb-social-label-linkedin'; $names['sgGoogleStatus'] = 'sgpb-social-status-googleplus'; $names['googLelabel'] = 'sgpb-social-label-googleplus'; $names['sgTwitterStatus'] = 'sgpb-social-status-twitter'; $names['twitterLabel'] = 'sgpb-social-label-twitter'; $names['sgPinterestStatus'] = 'sgpb-social-status-pinterest'; $names['pinterestLabel'] = 'sgpb-social-label-pinterest'; // Subscription $names['subscription-email'] = 'sgpb-subs-email-placeholder'; $names['subs-gdpr'] = 'sgpb-subs-gdpr-status'; $names['subs-gdpr-label'] = 'sgpb-subs-gdpr-label'; $names['subs-gdpr-text'] = 'sgpb-subs-gdpr-text'; $names['subs-first-name-status'] = 'sgpb-subs-first-name-status'; $names['subs-first-name'] = 'sgpb-subs-first-placeholder'; $names['subs-first-name-required'] = 'sgpb-subs-first-name-required'; $names['subs-last-name-status'] = 'sgpb-subs-last-name-status'; $names['subs-last-name'] = 'sgpb-subs-last-placeholder'; $names['subs-last-name-required'] = 'sgpb-subs-last-name-required'; $names['subs-validation-message'] = 'sgpb-subs-validation-message'; $names['subs-text-width'] = 'sgpb-subs-text-width'; $names['subs-text-height'] = 'sgpb-subs-text-height'; $names['subs-text-border-width'] = 'sgpb-subs-text-border-width'; $names['subs-text-input-bgColor'] = 'sgpb-subs-text-bg-color'; $names['subs-text-borderColor'] = 'sgpb-subs-text-border-color'; $names['subs-inputs-color'] = 'sgpb-subs-text-color'; $names['subs-placeholder-color'] = 'sgpb-subs-text-placeholder-color'; $names['subs-btn-width'] = 'sgpb-subs-btn-width'; $names['subs-btn-height'] = 'sgpb-subs-btn-height'; $names['subs-btn-title'] = 'sgpb-subs-btn-title'; $names['subs-btn-progress-title'] = 'sgpb-subs-btn-progress-title'; $names['subs-button-bgColor'] = 'sgpb-subs-btn-bg-color'; $names['subs-button-color'] = 'sgpb-subs-btn-text-color'; $names['subs-success-behavior'] = 'sgpb-subs-success-behavior'; $names['subs-success-message'] = 'sgpb-subs-success-message'; $names['subs-success-redirect-url'] = 'sgpb-subs-success-redirect-URL'; $names['subs-success-redirect-new-tab'] = 'sgpb-subs-success-redirect-new-tab'; $names['subs-success-popups-list'] = 'sgpb-subs-success-popup'; // Subscription new option $names['sgpb-subs-form-bg-color'] = 'sgpb-subs-form-bg-color'; // Exit Intent extension names $names['option-exit-intent-enable'] = 'sgpb-option-exit-intent-enable'; $names['option-exit-intent-type'] = 'sgpb-option-exit-intent-type'; $names['option-exit-intent-expire-time'] = 'sgpb-exit-intent-expire-time'; $names['option-exit-intent-cookie-level'] = 'sgpb-exit-intent-cookie-level'; $names['option-exit-intent-soft-from-top'] = 'sgpb-exit-intent-soft-from-top'; // Adblock extension names $names['option-enable-ad-block'] = 'sgpb-option-enable-ad-block'; // MailChimp extension names $names['mailchimp-list-id'] = 'sgpb-mailchimp-lists'; $names['mailchimp-double-optin'] = 'sgpb-enable-double-optin'; $names['mailchimp-only-required'] = 'sgpb-show-required-fields'; $names['mailchimp-form-aligment'] = 'sgpb-mailchimp-form-align'; $names['mailchimp-label-aligment'] = 'sgpb-mailchimp-label-alignment'; $names['mailchimp-indicates-required-fields'] = 'sgpb-enable-asterisk-label'; $names['mailchimp-asterisk-label'] = 'sgpb-mailchimp-asterisk-label'; $names['mailchimp-required-error-message'] = 'sgpb-mailchimp-required-message'; $names['mailchimp-email-validate-message'] = 'sgpb-mailchimp-email-message'; $names['mailchimp-email-label'] = 'sgpb-mailchimp-email-label'; $names['mailchimp-error-message'] = 'sgpb-mailchimp-error-message'; $names['mailchimp-show-form-to-top'] = 'sgpb-mailchimp-show-form-to-top'; $names['mailchimp-label-color'] = 'sgpb-mailchimp-label-color'; $names['mailchimp-input-width'] = 'sgpb-mailchimp-input-width'; $names['mailchimp-input-height'] = 'sgpb-mailchimp-input-height'; $names['mailchimp-input-border-radius'] = 'sgpb-mailchimp-border-radius'; $names['mailchimp-input-border-width'] = 'sgpb-mailchimp-border-width'; $names['mailchimp-input-border-color'] = 'sgpb-mailchimp-border-color'; $names['mailchimp-input-bg-color'] = 'sgpb-mailchimp-background-color'; $names['sgpb-mailchimp-input-color'] = 'sgpb-mailchimp-input-color'; $names['mailchimp-submit-title'] = 'sgpb-mailchimp-submit-title'; $names['mailchimp-submit-width'] = 'sgpb-mailchimp-submit-width'; $names['mailchimp-submit-height'] = 'sgpb-mailchimp-submit-height'; $names['mailchimp-submit-border-width'] = 'sgpb-mailchimp-submit-border-width'; $names['mailchimp-submit-border-radius'] = 'sgpb-mailchimp-submit-border-radius'; $names['mailchimp-submit-border-color'] = 'sgpb-mailchimp-submit-border-color'; $names['mailchimp-submit-button-bgcolor'] = 'sgpb-mailchimp-submit-background-color'; $names['mailchimp-submit-color'] = 'sgpb-mailchimp-submit-color'; $names['mailchimp-success-behavior'] = 'sgpb-mailchimp-success-behavior'; $names['mailchimp-success-message'] = 'sgpb-mailchimp-success-message'; $names['mailchimp-success-redirect-url'] = 'sgpb-mailchimp-success-redirect-URL'; $names['mailchimp-success-redirect-new-tab'] = 'sgpb-mailchimp-success-redirect-new-tab'; $names['mailchimp-success-popups-list'] = 'sgpb-mailchimp-success-popup'; $names['mailchimp-close-popup-already-subscribed'] = 'sgpb-mailchimp-close-popup-already-subscribed'; // AWeber extension $names['sg-aweber-list'] = 'sgpb-aweber-list'; $names['sg-aweber-webform'] = 'sgpb-aweber-signup-form'; $names['aweber-custom-invalid-email-message'] = 'sgpb-aweber-invalid-email'; $names['aweber-invalid-email'] = 'sgpb-aweber-invalid-email-message'; $names['aweber-already-subscribed-message'] = 'sgpb-aweber-custom-subscribed-message'; $names['aweber-required-message'] = 'sgpb-aweber-required-message'; $names['aweber-validate-email-message'] = 'sgpb-aweber-validate-email-message'; $names['aweber-success-behavior'] = 'sgpb-aweber-success-behavior'; $names['aweber-success-message'] = 'sgpb-aweber-success-message'; $names['aweber-success-redirect-url'] = 'sgpb-aweber-success-redirect-URL'; $names['aweber-success-redirect-new-tab'] = 'sgpb-aweber-success-redirect-new-tab'; $names['aweber-success-popups-list'] = 'sgpb-aweber-success-popup'; return $names; } public static function saveCustomInserted() { global $post; if (empty($post)) { return false; } $postId = $post->ID; if (get_option('sgpbSaveOldData'.$postId)) { return false; } update_option('sgpbSaveOldData'.$postId, 1); add_filter('sgpbConvertedPopupId', 'sgpb\sgpGetCorrectPopupId', 10, 1); self::saveMetaboxPopup($postId); $content = get_post_field('post_content', $postId); SGPopup::deletePostCustomInsertedData($postId); SGPopup::deletePostCustomInsertedEvents($postId); // We detect all the popups that were inserted as a custom ones, in the content. SGPopup::savePopupsFromContentClasses($content, $post); } public static function saveMetaboxPopup($postId) { $selectedPost = get_post_meta($postId, 'sg_promotional_popup', true); if (empty($selectedPost)) { return false; } global $SGPB_DATA_CONFIG_ARRAY; $postType = get_post_type($postId); $postTitle = get_the_title($postId); $popupId = sgpGetCorrectPopupId($selectedPost); $popupTargetParam = $postType.'_selected'; if (!get_post_meta($popupId, 'sg_popup_events')) { update_post_meta($popupId, 'sg_popup_events', array($SGPB_DATA_CONFIG_ARRAY['events']['initialData'])); } $savedTarget = get_post_meta($popupId, 'sg_popup_target'); if (empty($savedTarget[0]['sgpb-target'][0])) { $savedTarget['sgpb-target'][] = array(array('param' => $popupTargetParam, 'operator' => '==', 'value' => array($postId => $postTitle))); $savedTarget['sgpb-conditions'][] = $SGPB_DATA_CONFIG_ARRAY['conditions']['initialData']; update_post_meta($popupId, 'sg_popup_target', $savedTarget, true); return true; } $targets = $savedTarget[0]['sgpb-target'][0]; $targetExists = false; foreach ($targets as $key => $target) { if ($key == 0 && $target['param'] == 'not_rule') { $target['param'] = $popupTargetParam; $savedTarget[0]['sgpb-target'][0][$key]['param'] = $popupTargetParam; } if ($target['param'] == $popupTargetParam) { $targetExists = true; $targetValue = array(); if (!empty($target['value'])) { $targetValue = $target['value']; } $targetValue[$postId] = $postTitle; $savedTarget[0]['sgpb-target'][0][$key]['value'] = $targetValue; break; } } if (!$targetExists) { $savedTargetsLength = count($savedTarget[0]['sgpb-target'][0]); $savedTarget[0]['sgpb-target'][0][$savedTargetsLength] = array('param' => $popupTargetParam, 'operator' => '==', 'value' => array($postId => $postTitle)); } delete_post_meta($postId, 'sg_promotional_popup'); delete_post_meta($popupId, 'sg_popup_target'); update_post_meta($popupId, 'sg_popup_target', $savedTarget[0], true); return true; } } function sgpGetCorrectPopupId($popupId) { $convertedIds = get_option('sgpbConvertedIds'); if (empty($convertedIds) || empty($convertedIds[$popupId])) { return $popupId; } return $convertedIds[$popupId]; }