PK qhYJF F ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/thread-self/root/proc/self/root/proc/self/cwd/wp-content/plugins/wp-automatic/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/thread-self/root/proc/self/root/proc/self/cwd/wp-content/plugins/wp-automatic/core.php |
<?php // spintax require_once ('inc/class.spintax.php'); // youtube require_once ('inc/youtube_class.php'); /* * ---* Auto Link Builder Class --- */ class wp_automatic { public $ch = ''; public $db = ''; public $spintax = ''; public $plugin_url = ''; public $wp_prefix = ''; public $used_keyword = ''; public $used_link = ''; public $used_tags = ''; public $duplicate_id = ''; public $cached_file_path = ''; public $minimum_post_timestamp = ''; public $minimum_post_timestamp_camp = ''; public $debug = false; public $translationSuccess; public $currentCampID; // Excluded links cache public $campExcludedLinks; // excluded links of the currecnt campaign comma separated public $campExcludedLinksFetched; // true if the excluded links fetched from the database // Duplicated links cache public $campOldDuplicateLinks; // duplicate links found from last run public $campOldDuplicateLinksFetched; // loaded or not? public $campNewDuplicateLinks; // new checked and found duplicate links public $campDuplicateLinksUpdate; // update them or not flag // Call limit public $sourceCallLimit; // number of times allowed to call the source if reached exists public $sourceCallTimes; // number of times the source was called // Link sufix public $isLinkSuffixed; // link once public $isLinkOnce; // proxy connected or not public $isProxified; // general banned words public $generalBannedWords; // if amazon location was simulated public $isAmazonLocationSimulated; public $soundCloudAPIKey = ''; public $is_cookie_loaded = false; public $loaded_cookie_name = ''; public $camp_opt = array (); public $camp_general = array (); // public variable to flag if there were any openai failed calls public $openaiFailed = false; // flag for full content extraction success or fail defaults to true public $fullContentSuccess = true; // currentSourceLink holds the currenly being processed source link: used for prompt caching to cache the prompt for each source post and also clean it when imported successfully public $currentSourceLink = ''; /* * ---* Class Constructor --- */ function __construct() { // plugin url $siteurl = get_bloginfo ( 'url' ); $this->plugin_url = $siteurl . '/wp-content/plugins/alb/'; // debug if (isset ( $_GET ['debug'] )) $this->debug = true; // db global $wpdb; $this->db = $wpdb; $this->wp_prefix = $wpdb->prefix; // $this->db->show_errors(); @$this->db->query ( "set session wait_timeout=28800" ); // curl $this->ch = curl_init (); curl_setopt ( $this->ch, CURLOPT_HEADER, 0 ); curl_setopt ( $this->ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $this->ch, CURLOPT_CONNECTTIMEOUT, 10 ); curl_setopt ( $this->ch, CURLOPT_TIMEOUT, 300 ); curl_setopt ( $this->ch, CURLOPT_REFERER, 'http://www.bing.com/' ); curl_setopt ( $this->ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36' ); //curl_setopt($this->ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2'); curl_setopt ( $this->ch, CURLOPT_MAXREDIRS, 20 ); // Good leeway for redirections. @curl_setopt ( $this->ch, CURLOPT_FOLLOWLOCATION, 1 ); // Many login forms redirect at least once. // cooke jar to save cookies, without a cookie jar, cURL will not remember any cookie set and will never send a cookie saved $cjname = $this->cookieJarName (); @curl_setopt ( $this->ch, CURLOPT_COOKIEJAR, str_replace ( 'core.php', $cjname, __FILE__ ) ); @curl_setopt ( $this->ch, CURLOPT_COOKIEJAR, $cjname ); curl_setopt ( $this->ch, CURLOPT_SSL_VERIFYPEER, false ); // verbose $verbose_eanbled = false; if ($verbose_eanbled){ $verbose = fopen ( str_replace ( 'core.php', 'verbose.txt', __FILE__ ), 'w' ); curl_setopt ( $this->ch, CURLOPT_VERBOSE, 1 ); curl_setopt ( $this->ch, CURLOPT_STDERR, $verbose ); } // spintax $this->spintax = new Spintax (); // Ini excluded links $this->campExcludedLinksFetched = false; $this->campOldDuplicateLinksFetched = false; $this->campDuplicateLinksUpdate = false; $this->campNewDuplicateLinks = array (); // Link suffix $this->isLinkSuffixed = false; // Link once $this->isLinkOnce = false; // Call Limit $this->sourceCallLimit = 2; $this->sourceCallTimes = 0; // proxified $this->isProxified = false; // wp_automatic_ccc_stop $this->generalBannedWords = get_option ( 'wp_automatic_ccc_stop', '' ); $this->isAmazonLocationSimulated = false; } /* * ---* Function Process Campaigns --- */ function process_campaigns($cid = false) { // DB prefix $prefix = $this->db->prefix; // Single or all check if (trim ( $cid ) == '') { // All campaings $last = get_option ( 'gm_last_processed', 0 ); // get all the campaigns from the db lower than the last processed $query = "SELECT * FROM {$this->wp_prefix}automatic_camps where camp_id < $last ORDER BY camp_id DESC"; $camps = $this->db->get_results ( $query ); // check if results returned with id less than the last processed or not if not using regular method $query = "SELECT * FROM {$this->wp_prefix}automatic_camps WHERE camp_id >= $last ORDER BY camp_id DESC"; $camps2 = $this->db->get_results ( $query ); // merging 2 arrays $camps = array_merge ( $camps, $camps2 ); } else { // Single campaign process $query = "SELECT * FROM {$this->wp_prefix}automatic_camps where camp_id = $cid ORDER BY camp_id DESC"; $camps = $this->db->get_results ( $query ); } // check if need to process camaigns or skip if (count ( $camps ) == 0) { echo '<br>No valid campaigns to process '; return; } else { if (trim ( $cid ) == '') echo '<br>DB contains ' . count ( $camps ) . ' campaigns<br>'; } // now processing each fetched campaign $i = 0; foreach ( $camps as $campaign ) { // reading post status $status = get_post_status ( $campaign->camp_id ); // if published process if ($status == 'publish') { if ($i != 0) echo '<br>'; echo "<b>Processing Campaign</b> $campaign->camp_name { $campaign->camp_id }"; // updating the last id processed update_option ( 'gm_last_processed', $campaign->camp_id ); // check if deserve spinning now or not if (trim ( $cid ) == false) { // read post every x minutes if (stristr ( $campaign->camp_general, 'a:' )) $campaign->camp_general = base64_encode ( $campaign->camp_general ); $camp_general = unserialize ( base64_decode ( $campaign->camp_general ) ); $camp_general = array_map ( 'wp_automatic_stripslashes', $camp_general ); if (! is_array ( $camp_general ) || ! isset ( $camp_general ['cg_update_every'] )) { $camp_general = array ( 'cg_update_every' => 60, 'cg_update_unit' => 1 ); } $post_every = $camp_general ['cg_update_every'] * $camp_general ['cg_update_unit']; echo '<br>Campaign scheduled to process every ' . $post_every . ' minutes '; // get last check time $last_update = get_post_meta ( $campaign->camp_id, 'last_update', 1 ); if (trim ( $last_update ) == '') $last_update = 1388692276; // echo '<br>Last updated stamp '.$last_update; $difference = $this->get_time_difference ( $last_update, time () ); echo '<br> last processing was <strong>' . $difference . '</strong> minutes ago '; if ($difference > $post_every) { echo '<br>Campaign passed the time and eligible to be processed'; update_post_meta ( $campaign->camp_id, 'last_update', time () ); $this->log ( '<strong>Cron</strong> >> eligible waiting campaign', $campaign->camp_name . '{' . $campaign->camp_id . '} last processing was <strong>' . $difference . '</strong> minutes ago ' ); // process $this->log ( '<strong>Cron</strong> >> Processing Campaign:' . $campaign->camp_id, $campaign->camp_name . '{' . $campaign->camp_id . '}' ); $this->process_campaign ( $campaign ); } else { echo '<br>Campaign still not passed ' . $post_every . ' minutes'; } } else { // No cron just regular call // update last run update_post_meta ( $campaign->camp_id, 'last_update', time () ); // process $this->log ( '<strong>User</strong> >> Processing Campaign:' . $campaign->camp_id, $campaign->camp_name . '{' . $campaign->camp_id . '}' ); $this->process_campaign ( $campaign ); } $i ++; } elseif (! $status) { /* * commented starting from 3.51.2 * // deleting Camp record * $query = "delete from {$this->wp_prefix}automatic_camps where camp_id= '$campaign->camp_id'"; * $this->db->query ( $query ); * // deleting matching records for keywords * $query = "delete from {$this->wp_prefix}automatic_keywords where keyword_camp ='$campaign->camp_id'"; * $this->db->query ( $query ); */ } else { echo 'Campaign should be published firstly to run..'; } } } /* * ---* Processing Single Campaign Function --- */ function process_campaign($camp) { // Ini get options $this->currentCampID = $camp->camp_id; //reset openai flag $this->openaiFailed = false; $camp_post_every = $camp->camp_post_every; $wp_automatic_tw = get_option ( 'wp_automatic_tw', 400 ); $wp_automatic_options = get_option ( 'wp_automatic_options', array () ); $camp_type = $camp->camp_type; $camp_post_custom_k = unserialize ( $camp->camp_post_custom_k ); $camp_post_custom_v = unserialize ( $camp->camp_post_custom_v ); // camp general options if (stristr ( $camp->camp_general, 'a:' )) $camp->camp_general = base64_encode ( $camp->camp_general ); $camp_general = unserialize ( base64_decode ( $camp->camp_general ) ); @$camp_general = array_map ( 'wp_automatic_stripslashes', $camp_general ); $this->camp_general = $camp_general; // get the count of posted posts so far $key = 'Posted:' . $camp->camp_id; $query = "select count(id) as count from {$this->wp_prefix}automatic_log where action='$key'"; $temp = $this->db->get_results ( $query ); $temps = $temp [0]; $posted = $temps->count; // if maximum reached skip if ($camp_post_every <= $posted) { echo '<br>The set maximum number of posts was reached. You have set this campaign to post a maximum of ' . $camp_post_every . ' posts.'; $this->log ( 'Cancel Campaign', 'campaign reached maximum number of posts' ); return false; } // campaign options $camp_opt = unserialize ( $camp->camp_options ); if (! is_array ( $camp_opt )) $camp_opt = array (); $this->camp_opt = $camp_opt; // link suffix if (in_array ( 'OPT_LINK_PREFIX', $camp_opt ) || in_array ( 'OPT_LINK_PREFIX_POLY', $camp_opt )) { $this->isLinkSuffixed = true; } // never post same link flag if (in_array ( 'OPT_LINK_ONCE', $camp_opt )) { $this->isLinkOnce = true; } // reading keywords that need to be processed $rawKeywords = trim ( $camp->camp_keywords ); if (! stristr ( $rawKeywords, ',' )) { $newLinesCount = substr_count ( $rawKeywords, "\n" ); if ($newLinesCount > 0) { $keywords = explode ( "\n", $rawKeywords ); $rawKeywords = implode ( ',', $keywords ); echo '<br>keywords suspected to be one per line adapting...'; } } $keywords = explode ( ',', $rawKeywords ); $keywords = array_filter ( $keywords ); $keywords = array_map ( 'trim', $keywords ); // set minimum item date if exists if (in_array ( 'OPT_YT_DATE', $camp_opt )) { // check if dynamic date if (in_array ( 'OPT_YT_DATE_T', $camp_opt ) && is_numeric ( trim ( $camp_general ['cg_yt_dte_minutes'] ) )) { $cg_yt_dte_minutes = trim ( $camp_general ['cg_yt_dte_minutes'] ); $current_time = time (); $minimum_time = $current_time - $cg_yt_dte_minutes * 60; // echo '<br>Minimum timestamp:'.$minimum_time; $this->minimum_post_timestamp = $minimum_time; } else { $this->minimum_post_timestamp = strtotime ( $camp_general ['cg_yt_dte_year'] . '-' . $camp_general ['cg_yt_dte_month'] . '-' . $camp_general ['cg_yt_dte_day'] . 'T00:00:00.000Z' ); } $this->minimum_post_timestamp_camp = $camp->camp_id; } // Rotate Keywords if (in_array ( 'OPT_ROTATE', $camp_opt )) { echo '<br>Rotating Keywords Enabled'; // last used keyword $last_keyword = get_post_meta ( $camp->camp_id, 'last_keyword', 1 ); if (! trim ( $last_keyword ) == '') { // found last keyword usage let's split echo '<br>Last Keyword: ' . $last_keyword; // add all keywords after the last keyword $add = false; foreach ( $keywords as $current_keword ) { if ($add) { // set add flag to add all coming keywords $rotatedKeywords [] = $current_keword; } elseif (trim ( $current_keword ) == trim ( $last_keyword )) { $add = true; } } // add all keywords before the last keyword foreach ( $keywords as $current_keword ) { $rotatedKeywords [] = $current_keword; if (trim ( $current_keword ) == trim ( $last_keyword )) break; } // set keywords to rotated keywords if (count ( $rotatedKeywords ) != 0) $keywords = $rotatedKeywords; $keywordsString = implode ( ',', $rotatedKeywords ); $camp->camp_keywords = $keywordsString; } } else { $camp->camp_keywords = implode ( ',', $keywords ); } // Rotate feeds if (in_array ( 'OPT_ROTATE_FEEDS', $camp_opt )) { echo '<br>Rotating feeds Enabled'; // last used feed $last_feed = get_post_meta ( $camp->camp_id, 'last_feed', 1 ); if (! trim ( $last_feed ) == '') { // found last feed usage let's split echo '<br>Last feed: ' . $last_feed; // add all feeds after the last feed $add = false; $feeds = explode ( "\n", $camp->feeds ); $feeds = array_filter ( $feeds ); foreach ( $feeds as $current_feed ) { if ($add) { // set add flag to add all coming feeds $rotatedfeeds [] = $current_feed; } elseif (trim ( $current_feed ) == trim ( $last_feed )) { $add = true; } } // add all feeds before the last feed foreach ( $feeds as $current_feed ) { $rotatedfeeds [] = $current_feed; if (trim ( $current_feed ) == trim ( $last_feed )) break; } // set feeds to rotated feeds if (count ( $rotatedfeeds ) != 0) $feeds = $rotatedfeeds; $feedsString = implode ( "\n", $rotatedfeeds ); $camp->feeds = $feedsString; } } $post_content = stripslashes ( $camp->camp_post_content ); $post_title = stripslashes ( $camp->camp_post_title ); if (in_array ( 'OPT_USE_PROXY', $camp_opt ) && $camp_type != 'Articles' && $camp_type != 'ArticlesBase') { $this->fire_proxy (); } // ini content $abcont = ''; $title = ''; // ini if ($camp_type == 'gpt3') { $article = $this->gpt3_get_post ( $camp ); if(isset($article['item_content'])){ $abcont = $article ['item_content']; $title = $article ['item_title']; $source_link = $article ['item_url']; } $img = $article; } elseif ($camp_type == 'Articles') { // proxyfy $this->fire_proxy (); $article = $this->articlebase_get_post ( $camp ); $abcont = $article ['cont']; $title = $article ['title']; $source_link = $article ['source_link']; $img = $article; } elseif ($camp_type == 'ArticlesBase') { // proxyfy $this->fire_proxy (); $article = $this->articlebase_get_post ( $camp ); $abcont = $article ['cont']; $title = $article ['title']; $source_link = $article ['source_link']; $img = $article; } elseif ($camp_type == 'Feeds') { // feeds posting echo '<br>Should get content from feeds'; $article = $this->feeds_get_post ( $camp ); if (isset ( $article ['title'] )) { $abcont = $article ['cont']; $title = $article ['title']; $source_link = $article ['source_link']; } $img = $article; } elseif ($camp_type == 'Amazon') { echo '<br>Trying to post a new Amazon product...'; $product = $this->amazon_get_post ( $camp ); // update offer url to add to chart if (in_array ( 'OPT_LINK_CHART', $camp_opt )) { $product ['product_link'] = $product ['chart_url']; } $img = $product; $abcont = @$product ['offer_desc']; $title = @$product ['offer_title']; $source_link = @$product ['source_link']; $product_img = @$product ['offer_img']; $product_price = @$product ['offer_price']; } elseif ($camp_type == 'Clickbank') { echo '<br>Clickbank product is required'; $img = $product = $this->clickbank_get_post ( $camp ); $abcont = $product ['offer_desc']; $title = $product ['title']; $source_link = $product ['offer_link']; $product_img = $product ['img']; $product_original_link = $product ['original_link']; // print_r($product); } elseif ($camp_type == 'Youtube') { $_SERVER ['REQUEST_SCHEME'] = isset ( $_SERVER ['REQUEST_SCHEME'] ) ? $_SERVER ['REQUEST_SCHEME'] : 'http'; // refer restrictions curl_setopt ( $this->ch, CURLOPT_REFERER, $_SERVER ['REQUEST_SCHEME'] . '://' . $_SERVER ['SERVER_NAME'] ); echo '<br>Youtube Vid is required'; $img = $vid = $this->youtube_get_post ( $camp ); if (isset ( $img ['vid_title'] )) { $abcont = $vid ['vid_desc']; $original_title = $vid ['vid_title']; $title = $vid ['vid_title']; $source_link = $vid ['vid_url']; } } elseif ($camp_type == 'Vimeo') { echo '<br>Vimeo campaign let\'s get vimeo vid'; $img = $vid = $this->vimeo_get_post ( $camp ); // set player width and hieght if (isset ( $vid ['vid_title'] )) { $abcont = $vid ['vid_description']; $original_title = $vid ['vid_title']; $title = $vid ['vid_title']; $source_link = $vid ['vid_url']; } } elseif ($camp_type == 'Flicker') { echo '<br>Flicker image is required'; $img = $this->flicker_get_post ( $camp ); if (isset ( $img ['img_title'] )) { $abcont = $img ['img_description']; $original_title = $img ['img_title']; $title = $img ['img_title']; $source_link = $img ['img_link']; } } elseif ($camp_type == 'eBay') { echo '<br>eBay item is required'; $img = $this->ebay_get_post ( $camp ); if (isset ( $img ['item_title'] )) { $abcont = $img ['item_desc']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_link']; } // affiliate link if (isset ( $img ['item_affiliate_link'] ) && trim ( $img ['item_affiliate_link'] ) != '') $img ['item_link'] = $img ['item_affiliate_link']; } elseif ($camp_type == 'Spintax') { echo '<p>Processing spintax campaign'; $abconts = $post_title . '(99999)' . $post_content; if (in_array ( 'OPT_TBS', $camp_opt )) { $abconts = $this->spin ( $abconts ); } if (in_array ( 'OPT_SP_SIMILAR', $camp_opt )) { $abconts = $this->spintax->spin ( $abconts, TRUE ); } else { $abconts = $this->spintax->spin ( $abconts ); } $tempz = explode ( '(99999)', $abconts ); // Rewrite the title if (! in_array ( 'OPT_TBS_TTL', $camp_opt )) { echo '<br>Spinning the title'; $post_title = $tempz [0]; } $post_content = $tempz [1]; $title = trim ( $post_title ); $img = array (); } elseif ($camp_type == 'Facebook') { $img = $this->fb_get_post ( $camp ); if (isset ( $img ['original_title'] )) { $abcont = @$img ['matched_content']; $original_title = @$img ['original_title']; $title = @$img ['original_title']; $source_link = @$img ['original_link']; } } elseif ($camp_type == 'Pinterest') { $img = $this->pinterest_get_post ( $camp ); if (isset ( $img ['pin_title'] )) { $abcont = $img ['pin_description']; $original_title = $img ['pin_title']; $title = $img ['pin_title']; $source_link = $img ['pin_url']; } } elseif ($camp_type == 'Instagram') { $img = $this->instagram_get_post ( $camp ); if (isset ( $img ['item_title'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_url']; } } elseif ($camp_type == 'Aliexpress') { $img = $this->aliexpress_get_post ( $camp ); $title = ''; if (isset ( $img ['item_title'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_url']; } } elseif ($camp_type == 'TikTok') { $img = $this->tiktok_get_post ( $camp ); $title = ''; if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_url']; } } elseif ($camp_type == 'Twitter') { $img = $this->twitter_get_post ( $camp ); if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_url']; } } elseif ($camp_type == 'SoundCloud') { $img = $this->sound_get_post ( $camp ); if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_url']; } } elseif ($camp_type == 'Craigslist') { $img = $this->craigslist_get_post ( $camp ); if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_link']; } } elseif ($camp_type == 'Reddit') { $img = $this->reddit_get_post ( $camp ); if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_url']; } } elseif ($camp_type == 'Careerjet') { $img = $this->careerjet_get_post ( $camp ); if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_url']; } } elseif ($camp_type == 'Itunes') { $img = $this->itunes_get_post ( $camp ); if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_link']; } } elseif ($camp_type == 'Envato') { $img = $this->envato_get_post ( $camp ); if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_link']; } } elseif ($camp_type == 'DailyMotion') { $img = $this->DailyMotion_get_post ( $camp ); if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_link']; } } elseif ($camp_type == 'Walmart') { $img = $this->walmart_get_post ( $camp ); if (isset ( $img ['item_description'] )) { $abcont = $img ['item_description']; $original_title = $img ['item_title']; $title = $img ['item_title']; $source_link = $img ['item_link']; } } elseif ($camp_type == 'Single') { $img = $this->single_get_post ( $camp ); if (isset ( $img ['original_title'] )) { $abcont = $img ['matched_content']; $original_title = $img ['original_title']; $title = $img ['original_title']; $source_link = $img ['source_link']; } } // set currently being processed source link $this->currentSourceLink = $source_link; // add a now time to img array $img ['now'] = time (); // default tags fill if (in_array ( 'OPT_DEFAULT_TAGS', $camp_opt )) { $cg_default_tags = $camp_general ['cg_default_tags']; $cg_default_tags_arr = array_filter ( explode ( "\n", $cg_default_tags ) ); foreach ( $cg_default_tags_arr as $cg_default_tags_single ) { if (trim ( $cg_default_tags_single ) != '' && stristr ( $cg_default_tags_single, '|' )) { $cg_default_tags_single_parts = explode ( '|', $cg_default_tags_single ); $cg_default_tags_single_key = $cg_default_tags_single_parts [0]; if (! isset ( $img [$cg_default_tags_single_key] ) || trim ( $img [$cg_default_tags_single_key] ) == '') { $img [$cg_default_tags_single_key] = $cg_default_tags_single_parts [1]; } } } } // adjust tags OPT_DEFAULT_TAGS if (in_array ( 'OPT_ADJUST_TAGS', $camp_opt )) { $cg_adjust_tags = $camp_general ['cg_adjust_tags']; $cg_adjust_tags_arr = array_filter ( explode ( "\n", $cg_adjust_tags ) ); foreach ( $cg_adjust_tags_arr as $cg_adjust_tags_single ) { if (trim ( $cg_adjust_tags_single ) != '' && stristr ( $cg_adjust_tags_single, '|' )) { $cg_adjust_tags_single_parts = explode ( '|', $cg_adjust_tags_single ); $cg_adjust_tags_single_key = $cg_adjust_tags_single_parts [0]; // adjust if (isset ( $img [$cg_adjust_tags_single_key] ) && is_numeric ( str_replace ( ',', '', $img [$cg_adjust_tags_single_key] ) )) { echo '<br>Adjusting tag named:' . $cg_adjust_tags_single_key; // remove the , $img [$cg_adjust_tags_single_key] = str_replace ( ',', '', $img [$cg_adjust_tags_single_key] ); $adjust_rule = $cg_adjust_tags_single_parts [1]; if (stristr ( $adjust_rule, '*' )) { $adjust_rule_arr = explode ( '*', $adjust_rule ); if (trim ( $adjust_rule_arr [0] ) == $cg_adjust_tags_single_key && is_numeric ( trim ( $adjust_rule_arr [1] ) )) { $img [$cg_adjust_tags_single_key] = $img [$cg_adjust_tags_single_key] * trim ( $adjust_rule_arr [1] ); echo '<--adjusted'; } else { echo '<-- Invalid format'; } } elseif (stristr ( $adjust_rule, '+' )) { $adjust_rule_arr = explode ( '+', $adjust_rule ); if (trim ( $adjust_rule_arr [0] ) == $cg_adjust_tags_single_key && is_numeric ( trim ( $adjust_rule_arr [1] ) )) { $img [$cg_adjust_tags_single_key] = $img [$cg_adjust_tags_single_key] + trim ( $adjust_rule_arr [1] ); echo '<--adjusted'; } else { echo '<-- Invalid format'; } } elseif (stristr ( $adjust_rule, '-' )) { $adjust_rule_arr = explode ( '-', $adjust_rule ); if (trim ( $adjust_rule_arr [0] ) == $cg_adjust_tags_single_key && is_numeric ( trim ( $adjust_rule_arr [1] ) )) { $img [$cg_adjust_tags_single_key] = $img [$cg_adjust_tags_single_key] - trim ( $adjust_rule_arr [1] ); echo '<--adjusted'; } else { echo '<-- Invalid format'; } } } } } } // source domain // featured_img_local_source ini $img ['featured_img_local_source'] = ''; $img ['featured_img_source'] = ''; // link suffix if ($this->isLinkSuffixed == true && isset ( $source_link )) { if (stristr ( $source_link, '?' )) { $source_link = $source_link . '&rand=' . $this->currentCampID; } else { $source_link = $source_link . '?rand=' . $this->currentCampID; } } // limit the content returned if (in_array ( 'OPT_LIMIT', $camp_opt )) { echo '<br>Triming post content to ' . $camp_general ['cg_content_limit'] . ' chars'; $abcont = $this->truncateHtml ( $abcont, $camp_general ['cg_content_limit'] ); } if (in_array ( 'OPT_LIMIT_TITLE', $camp_opt ) && trim ( $title ) != '') { echo '<br>Triming post title to ' . $camp_general ['cg_title_limit'] . ' chars'; $titleCharsCount = $this->chars_count ( $title ); if ($camp_general ['cg_title_limit'] < $titleCharsCount) { $non_truncated_title = $title; if (function_exists ( 'mb_substr' )) { $title = mb_substr ( $title, 0, $camp_general ['cg_title_limit'] ); } else { $title = substr ( $title, 0, $camp_general ['cg_title_limit'] ); } $title = $this->removeEmoji ( $title ); // remove last truncated word if (in_array ( 'OPT_LIMIT_NO_TRUN', $camp_opt )) { // get last truncated word $truncated_title_parts = explode ( ' ', $title ); $last_truncated_word = $truncated_title_parts [count ( $truncated_title_parts ) - 1]; // check if really truncated $non_truncated_title_parts = explode ( ' ', $non_truncated_title ); foreach ( $non_truncated_title_parts as $non_truncated_word ) { if ($non_truncated_word === $last_truncated_word) { // last truncated word is not truncated break; } } if ($non_truncated_word === $last_truncated_word) { } else { unset ( $truncated_title_parts [count ( $truncated_title_parts ) - 1] ); $title = implode ( ' ', $truncated_title_parts ); } } if (! in_array ( 'OPT_LIMIT_NO_DOT', $camp_opt )) $title = $title . '...'; } } // check if valid content fetched before filling the template if (trim ( $title ) != '') { // Validate if the content contains wanted or execluded texts $valid = true; $exact = $camp->camp_post_exact; $execl = $camp->camp_post_execlude; $execr = ''; $execr = @$camp_general ['cg_camp_post_regex_exact']; $excludeRegex = @$camp_general ['cg_camp_post_regex_exclude']; // Before filling the template, check banned and must exist words and length $valid = $this->validate_exacts ( $abcont, $title, $camp_opt, $camp, false, $camp_general ); // If valid validate criteria if ($valid && in_array ( 'OPT_CRITERIA', $camp_opt )) { $valid = $this->validate_criterias ( $img, $camp_opt, $camp, $camp_general ); } // If valid validate must exact criteria if ($valid && in_array ( 'OPT_CRITERIA_MUST', $camp_opt )) { $valid = $this->validate_criterias_must ( $img, $camp_opt, $camp, $camp_general ); } // duplicate title check if ($valid == true) { // check if there is a post published with the same title if (in_array ( 'OPT_FEED_TITLE_SKIP', $camp_opt )) { $title_to_check = $title; if ($title != '[original_title]') $title_to_check = @str_replace ( '[original_title]', strip_tags ( $title ), $camp->camp_post_title ); if ($this->is_title_duplicate ( $title_to_check, $camp->camp_post_type )) { echo '<-- duplicate title skipping..'; $valid = false; } } } // if not valid process the campaign again and exit if ($valid == false) { // blacklisting the link so we don'g teg it again and cause a loop $this->link_execlude ( $camp->camp_id, $source_link ); $this->process_campaign ( $camp ); exit (); } // strip links if (in_array ( 'OPT_STRIP', $camp_opt )) { echo '<br>Striping links '; // $abcont = strip_tags ( $abcont, '<p><img><b><strong><br><iframe><embed><table><del><i><div>' ); // domain $leave_external = false; if (in_array ( 'OPT_STRIP_EXT', $camp_opt )) { $leave_external = true; $source_domain = (parse_url ( $source_link, PHP_URL_HOST )); } if ($leave_external || strpos ( $abcont, 'twitter.com' )) { preg_match_all ( '{<a .*?>(.*?)</a>}s', $abcont, $allLinksMatchs ); $allLinksTexts = $allLinksMatchs [1]; $allLinksMatchs = $allLinksMatchs [0]; // print_r ( $allLinksMatchs ); $allLinksMatchs_sorted = $allLinksMatchs; // copy of the original links usort ( ($allLinksMatchs_sorted), 'wp_automatic_sort' ); $j = 0; foreach ( $allLinksMatchs_sorted as $singleLink ) { // index on the original non-sorted array $original_key = array_search ( $singleLink, $allLinksMatchs ); $singleLink_no_images = preg_replace ( '{<img.*?>}', '', $singleLink ); if (! stristr ( $singleLink, 'twitter.com' ) && ! ($leave_external && ! stristr ( $singleLink_no_images, $source_domain ))) { $abcont = str_replace ( $singleLink, $allLinksTexts [$original_key], $abcont ); } $j ++; } } else { $abcont = preg_replace ( '{<a .*?>}s', '', $abcont ); $abcont = str_replace ( array ( '</a>', '</ a>', '< /a>' ), '', $abcont ); } if ($camp_type == 'Youtube') { echo '...striping inline links'; $abcont = preg_replace ( '/https?:\/\/[^<\s]+/', '', $abcont ); } // inline links removal if (in_array ( 'OPT_STRIP_INLINE', $camp_opt )) { echo '<br>Stripping inline links'; $abcont_no_html = preg_replace ( '{<.*?>}s', '', $abcont ); $abcont_no_html = preg_replace ( '{<.*?>}s', '', $abcont ); $abcont_no_html = strip_shortcodes ( $abcont_no_html ); // find links preg_match_all ( '/https?:\/\/[^<\s]+/s', $abcont_no_html, $inline_matches ); $inline_matches = $inline_matches [0]; foreach ( $inline_matches as $inline_matches_link ) { if (! stristr ( $inline_matches_link, '[' )) { echo '<br>Removing link:' . $inline_matches_link; $abcont = str_replace ( $inline_matches_link, '', $abcont ); } } } } // links in new tab if (in_array ( 'OPT_LNK_BLNK', $camp_opt )) { $abcont = str_replace ( '<a ', '<a target="_blank" ', $abcont ); } // nofollow attribute if (in_array ( 'OPT_LNK_NOFOLLOW', $camp_opt )) { $abcont = str_replace ( '<a ', '<a rel="nofollow" ', $abcont ); } // translate the cotent $img ['content_to_translate'] = ''; if (in_array ( 'OPT_TRANSLATE', $camp_opt ) && trim ( $abcont ) != '' && $camp->camp_translate_from != '' && $camp->camp_translate_from != 'no' && $camp->camp_translate_to != '') { echo '<br>Translating the post...' . $title; $img ['content_to_translate'] = $abcont; // to translate tags $tagsToTranslate = ''; if (isset ( $img ['tags'] ) && trim ( $img ['tags'] ) != '') { $tagsToTranslate = trim ( $img ['tags'] ); } if (isset ( $img ['custom_fields'] )) { foreach ( $img ['custom_fields'] as $customFieldArr ) { if ($customFieldArr [0] == 'tags') { $tagsToTranslate = $customFieldArr [1]; break; } } } // YT tags if (trim ( $this->used_tags ) != '') { $tagsToTranslate = $this->used_tags; } if (trim ( $tagsToTranslate ) != '') { $tagsToTranslate = explode ( ',', $tagsToTranslate ); $tagsToTranslate = array_filter ( $tagsToTranslate ); $tagsToTranslate = array_map ( 'trim', $tagsToTranslate ); $tagsToTranslate = implode ( '[t]', $tagsToTranslate ); $abcont = $abcont . ' [tagsToTranslate]' . $tagsToTranslate; } // Translation Method $translationMethod = $camp_general ['cg_translate_method']; if ($translationMethod != 'googleTranslator' && $translationMethod != 'yandexTranslator' && $translationMethod != 'deeplTranslator') { $translationMethod = 'microsoftTranslator'; } // Translation success flag ini $this->translationSuccess = false; // fix translation wrong config en->no->fr if ($camp->camp_translate_from != 'no') { // en->no->fr if ($camp->camp_translate_to == 'no' && $camp->camp_translate_to_2 != 'no') { $camp->camp_translate_to = $camp->camp_translate_to_2; $camp->camp_translate_to_2 = 'no'; } } $translation = $this->gtranslate ( $title, $abcont, $camp->camp_translate_from, $camp->camp_translate_to, $translationMethod ); if (in_array ( 'OPT_TRANSLATE_TITLE', $camp_opt )) { $title = $translation [0]; } $abcont = $translation [1]; // check if another translation needed if (trim ( $camp->camp_translate_to_2 ) != 'no' && trim ( $camp->camp_translate_to_2 ) != '') { // another translate echo '<br>translating the post another time '; $translation = $this->gtranslate ( $title, $abcont, $camp->camp_translate_to, $camp->camp_translate_to_2, $translationMethod ); if (in_array ( 'OPT_TRANSLATE_TITLE', $camp_opt )) { $title = $translation [0]; } $abcont = $translation [1]; } // strip tagstotransate if (stristr ( $abcont, 'tagsToTranslate' ) || stristr ( $abcont, '(t)' )) { $abcont = str_replace ( '(t )', '(t)', $abcont ); $abcont = str_replace ( '(tagsToTranslate)', '[tagsToTranslate]', $abcont ); $abcont = str_replace ( '(t)', '[t]', $abcont ); preg_match ( '{\[tagsToTranslate\](.*)}', $abcont, $tagMatchs ); $tagsTranslated = $tagMatchs [1]; $tagsTranslated = str_replace ( '[t]', ',', $tagsTranslated ); // strip the tags $abcont = preg_replace ( '{\[tagsToTranslate.*}', '', $abcont ); if (stristr ( $abcont, '[t]' )) { preg_match ( '{\[t\].*}', $abcont, $tagMatchs ); $tagsTranslated = $tagMatchs [0]; $tagsTranslated = explode ( '[t]', $tagsTranslated ); $tagsToTranslate = implode ( ',', array_filter ( $tagsTranslated ) ); $abcont = preg_replace ( '{\[t\].*}', '', $abcont ); } // restore tags if (isset ( $img ['tags'] ) && trim ( $img ['tags'] ) != '') { $img ['tags'] = $tagsTranslated; } elseif (trim ( $this->used_tags ) != '') { $this->used_tags = $tagsTranslated; } $newFields = array (); if (isset ( $img ['custom_fields'] )) { foreach ( $img ['custom_fields'] as $customFieldArr ) { if ($customFieldArr [0] == 'tags') { $newFields [] = array ( 'tags', $tagsTranslated ); } else { $newFields [] = $customFieldArr; } } $img ['custom_fields'] = $newFields; } } // translated values overwrite for custom field geneation $img ['original_title'] = $title; $img ['matched_content'] = $abcont; } // title words as hashtags if (stristr ( $camp->camp_post_content . $camp->camp_post_title, '[title_words_as_hashtags]' )) { $separate_tags = $this->wp_automatic_generate_tags ( $title ); $title_as_hash = ''; foreach ( $separate_tags as $separate_tag ) { $title_as_hash .= " #{$separate_tag}"; } $img ['title_words_as_hashtags'] = trim ( $title_as_hash ); } $post_slug = ''; // post slug init //if option enabled OPT_CUSTOM_SLUG enabled if (in_array ( 'OPT_CUSTOM_SLUG', $camp_opt )) { $post_slug = $camp_general ['cg_custom_slug']; } // replacing general terms title and source link if ($camp_type != 'Facebook') { if (isset ( $source_link )) $post_content = str_replace ( '[source_link]', $source_link, $post_content ); } $post_title = @str_replace ( '[original_title]', strip_tags ( $title ), $post_title ); $post_content = str_replace ( '[original_title]', $title, $post_content ); $post_slug = str_replace ( '[original_title]', $title, $post_slug ); //add the origina title to the img array for custom fields section to have access to it $img ['original_title'] = $title; if ( $camp_type == 'Feeds' || $camp_type == 'Articles' || $camp_type == 'ArticlesBase' || $camp_type == 'gpt3') { $post_content = str_replace ( '[matched_content]', $abcont, $post_content ); //add the matched content to the img array for custom fields section to have access to it $img ['matched_content'] = $abcont; } elseif ($camp_type == 'Amazon') { $post_content = str_replace ( '[product_desc]', $abcont, $post_content ); $post_content = str_replace ( '[product_img]', $product_img, $post_content ); // $post_content = str_replace ( '[product_link]', $source_link, $post_content ); $post_content = str_replace ( '[product_price]', $product_price, $post_content ); // remove built-in gallery for amazon products when a woo gallery is used if ($camp->camp_post_type == 'product' && in_array ( 'OPT_AM_GALLERY', $camp_opt )) { $post_content = str_replace ( '[product_imgs_html]', '', $post_content ); } } elseif ($camp_type == 'Clickbank') { $post_content = str_replace ( '[product_desc]', $abcont, $post_content ); $post_content = str_replace ( '[product_img]', $product_img, $post_content ); $post_content = str_replace ( '[product_link]', $source_link, $post_content ); $post_content = str_replace ( '[product_original_link]', $product_original_link, $post_content ); } elseif ($camp_type == 'Youtube') { $post_content = str_replace ( '[vid_player]', addslashes ( $vid ['vid_player'] ), $post_content ); $post_content = str_replace ( '[vid_desc]', $abcont, $post_content ); $post_content = str_replace ( '[vid_views]', $vid ['vid_views'], $post_content ); $post_content = str_replace ( '[vid_rating]', $vid ['vid_rating'], $post_content ); $post_content = str_replace ( '[vid_img]', $vid ['vid_img'], $post_content ); } elseif ($camp_type == 'eBay') { $post_content = str_replace ( '[item_desc]', $abcont, $post_content ); // remove built-in gallery for amazon products when a woo gallery is used if ($camp->camp_post_type == 'product' && in_array ( 'OPT_EB_GALLERY', $camp_opt ) && is_array ( $img ['item_images'] )) { $post_content = str_replace ( '[item_images]', '', $post_content ); } elseif (stristr ( $post_content, '[item_images]' ) && is_array ( $img ['item_images'] )) { $cg_eb_full_img_t = html_entity_decode ( $camp_general ['cg_eb_full_img_t'] ); $imgs = $img ['item_images']; if (! stristr ( $cg_eb_full_img_t, '[img_src]' )) { $cg_eb_full_img_t = '<img src="[img_src]" class="wp_automatic_gallery" />'; } $contimgs = ''; foreach ( $imgs as $newimg ) { $tempimg = $cg_eb_full_img_t; $contimgs .= str_replace ( '[img_src]', $newimg, $tempimg ); } $post_content = str_replace ( '[item_images]', $contimgs, $post_content ); } } elseif ($camp_type == 'Flicker') { $post_content = str_replace ( '[img_description]', $abcont, $post_content ); } elseif ($camp_type == 'Vimeo') { $post_content = str_replace ( '[vid_description]', $abcont, $post_content ); // set player width and height $vm_width = $camp_general ['cg_vm_width']; $vm_height = $camp_general ['cg_vm_height']; if (trim ( $vm_width ) != '') { $img ['vid_embed'] = $vid ['vid_embed'] = str_replace ( 'width="560"', 'width="' . $vm_width . '"', $vid ['vid_embed'] ); } if (trim ( $vm_height ) != '') { $img ['vid_embed'] = $vid ['vid_embed'] = str_replace ( 'height="315"', 'height="' . $vm_height . '"', $vid ['vid_embed'] ); } } elseif ($camp_type == 'Pinterest') { $post_content = str_replace ( '[pin_description]', $abcont, $post_content ); } elseif ($camp_type == 'Instagram') { $post_content = str_replace ( '[item_description]', $abcont, $post_content ); // if video hide it's image if (stristr ( $abcont, '[embed' ) && ! in_array ( 'OPT_IT_NO_VID_IMG_HIDE', $camp_opt )) { echo '<br>Hiding vid image'; $post_content = str_replace ( '[item_img]"', '[item_img]" style="display:none;" ', $post_content ); $post_content = str_replace ( '[item_img]\"', '[item_img]\" style="display:none;" ', $post_content ); } } elseif ($camp_type == 'Twitter') { $post_content = str_replace ( '[item_description]', $abcont, $post_content ); } elseif ($camp_type == 'TikTok') { $post_content = str_replace ( '[item_description]', $abcont, $post_content ); } elseif ($camp_type == 'Craigslist') { if ($camp->camp_post_type == 'product' && in_array ( 'OPT_CL_GALLERY', $camp_opt )) { $post_content = str_replace ( '[item_imgs_html]', '', $post_content ); } } elseif ($camp_type == 'Aliexpress') { // remove built-in gallery for amazon products when a woo gallery is used if ($camp->camp_post_type == 'product' && in_array ( 'OPT_AE_GALLERY', $camp_opt )) { $post_content = str_replace ( '[item_imgs_html]', '', $post_content ); } $post_content = str_replace ( '[item_description]', $abcont, $post_content ); } elseif ($camp_type == 'Facebook' || $camp_type == 'Single') { $post_content = str_replace ( '[matched_content]', $abcont, $post_content ); } elseif ($camp_type == 'SoundCloud' || $camp_type == 'Craigslist' || $camp_type == 'Itunes' || $camp_type == 'Envato' || $camp_type == 'DailyMotion' || $camp_type == 'Reddit' || $camp_type == 'Walmart' || $camp_type == 'Careerjet') { $post_content = str_replace ( '[item_description]', $abcont, $post_content ); } else { $post_content .= "<br>$abcont"; } // Replacing generic tags if (stristr ( $this->used_keyword, '_' )) { $pan = explode ( '_', $this->used_keyword ); $this->used_keyword = $pan [1]; } // used keyword ini if (isset ( $this->used_keyword )) { $img ['keyword'] = $this->used_keyword; } $post_content = str_replace ( '[keyword]', $this->used_keyword, $post_content ); $post_title = str_replace ( '[keyword]', $this->used_keyword, $post_title ); $post_slug = str_replace ( '[keyword]', $this->used_keyword, $post_slug ); // replacing attributes foreach ( $img as $key => $val ) { if (! is_array ( $val )) { $post_content = str_replace ( '[' . $key . ']', $val, $post_content ); $post_title = str_replace ( '[' . $key . ']', $val, $post_title ); $post_slug = str_replace ( '[' . $key . ']', $val, $post_slug ); } } // openai gpt 3 tags replacement for content and title if available $post_content = $this->openai_gpt3_tags_replacement($post_content); $post_title = $this->openai_gpt3_tags_replacement($post_title); //if title is wrapped in " then remove them if (substr($post_title, 0, 1) == '"' && substr($post_title, -1) == '"') { echo '<br>Title wrapped in " then remove them...'; $post_title = substr($post_title, 1, -1); } // replacing custom attributes for feeds if ($camp_type == 'Feeds') { $attributes = $img ['attributes']; foreach ( $attributes as $attributeKey => $attributeValue ) { $post_content = str_replace ( '[' . $attributeKey . ']', $attributeValue [0] ['data'], $post_content ); $post_title = str_replace ( '[' . $attributeKey . ']', $attributeValue [0] ['data'], $post_title ); } } // formated date if (stristr ( $post_content, 'formated_date' ) || stristr ( $post_title, 'formated_date' )) { $tags = array ( 'formated_date' ); global $shortcode_tags; $_tags = $shortcode_tags; // store temp copy foreach ( $_tags as $tag => $callback ) { if (! in_array ( $tag, $tags )) // filter unwanted shortcode unset ( $shortcode_tags [$tag] ); } $post_title = do_shortcode ( $post_title ); $post_content = do_shortcode ( $post_content ); $shortcode_tags = $_tags; // put all shortcode back } // replacing the keywords with affiliate links if (in_array ( 'OPT_REPLACE', $camp_opt )) { foreach ( $keywords as $keyword ) { $keyword = trim ( $keyword ); if (trim ( $keyword != '' )) { // $post_content = str_replace ( $keyword, '<a href="' . $camp->camp_replace_link . '">' . $keyword . '</a>', $post_content ); $post_content = preg_replace ( '/\b' . preg_quote ( $keyword, '/' ) . '\b/', '<a href="' . $camp->camp_replace_link . '">' . $keyword . '</a>', $post_content ); } } } // replace keywords with specific links if (in_array ( 'OPT_REPLACE_KEYWORD', $camp_opt )) { $cg_keywords_replace = $camp_general ['cg_keywords_replace']; $cg_keywords_replace_arr = array_filter ( explode ( "\n", $cg_keywords_replace ) ); $cg_keywords_replace_all =array();// init array for all keywords foreach ( $cg_keywords_replace_arr as $cg_keywords_replace_rule ) { // validating rule if (stristr ( $cg_keywords_replace_rule, '|' )) { $cg_keywords_replace_rule_parts = explode ( '|', $cg_keywords_replace_rule ); $cg_keywords_replace_rule_kewyrod = $cg_keywords_replace_rule_parts [0]; $cg_keywords_replace_rule_link = trim ( $cg_keywords_replace_rule_parts [1] ); $cg_keywords_replace_rule_kewyrod_arr = explode ( ',', $cg_keywords_replace_rule_kewyrod ); foreach ( $cg_keywords_replace_rule_kewyrod_arr as $cg_keywords_replace_rule_kewyrod_arr_single ) { $cg_keywords_replace_all [] = $cg_keywords_replace_rule_kewyrod_arr_single; $cg_keywords_replace_all_vals [md5 ( $cg_keywords_replace_rule_kewyrod_arr_single )] = $cg_keywords_replace_rule_link; } } // valid rule if } // sort by length usort ( ($cg_keywords_replace_all), 'wp_automatic_sort' ); $limit = -1; // -1 for no limit default //it optin OPT_REPLACE_KEYWORD_ONCE is set, set limit to 1 if(in_array('OPT_REPLACE_KEYWORD_ONCE', $camp_opt)){ $limit = 1; } // replace found keywords with {number} $i = 0; foreach ( $cg_keywords_replace_all as $cg_keywords_replace_all_single ) { $post_content = preg_replace ( '/\b' . preg_quote ( $cg_keywords_replace_all_single, '/' ) . '\b/i', '{' . $i . '}', $post_content , $limit ); $i ++; } // replace found {number} with correct link foreach ( $cg_keywords_replace_all as $key => $cg_keywords_replace_all_single ) { $replace_link = $cg_keywords_replace_all_vals [md5 ( $cg_keywords_replace_all_single )]; echo '<br>Hyperlinking the keyword:' . $cg_keywords_replace_all_single . ' with this link:' . $replace_link; $post_content = str_replace ( '{' . $key . '}', '<a href="' . $replace_link . '">' . $cg_keywords_replace_all_single . '</a>', $post_content ); } } // replacing patterns if (in_array ( 'OPT_RGX_REPLACE', $camp_opt )) { $separator = '|'; if (in_array ( 'OPT_RGX_REPLACE_SEP', $camp_opt )) { $separator = '#'; } $regex_patterns = trim ( $camp_general ['cg_regex_replace'] ); echo '<br>Replacing using REGEX'; // protecting tags if (in_array ( 'OPT_RGX_REPLACE_PROTECT', $camp_opt )) { echo '..protecting tags.'; preg_match_all ( "/<[^<>]+>/is", $post_content, $matches, PREG_PATTERN_ORDER ); $htmlfounds = $matches [0]; // extract all fucken shortcodes $pattern = "\[.*?\]"; preg_match_all ( "/" . $pattern . "/s", $post_content, $matches2, PREG_PATTERN_ORDER ); $shortcodes = $matches2 [0]; $htmlfounds = array_merge ( $htmlfounds, $shortcodes ); $htmlfounds = array_filter ( array_unique ( $htmlfounds ) ); $i = 1; foreach ( $htmlfounds as $htmlfound ) { $post_content = str_replace ( $htmlfound, "[" . str_repeat ( '*', $i ) . "]", $post_content ); $i ++; } } if (stristr ( $regex_patterns, $separator )) { $regex_patterns_arr = explode ( "\n", $regex_patterns ); foreach ( $regex_patterns_arr as $regex_pattern ) { $regex_pattern = trim ( $regex_pattern ); if (stristr ( $regex_pattern, $separator )) { // title only flag $isTitleOnly = false; $isContentOnly = false; if (stristr ( $regex_pattern, $separator . 'titleonly' )) { $isTitleOnly = true; $regex_pattern = str_replace ( $separator . 'titleonly', '', $regex_pattern ); } if (stristr ( $regex_pattern, $separator . 'contentonly' )) { $isContentOnly = true; $regex_pattern = str_replace ( $separator . 'contentonly', '', $regex_pattern ); } $regex_pattern_parts = explode ( $separator, $regex_pattern ); $regex_pattern_search = $regex_pattern_parts [0]; if (count ( $regex_pattern_parts ) > 2) { $regex_pattern_replace = $regex_pattern_parts [rand ( 1, count ( $regex_pattern_parts ) - 1 )]; } else { $regex_pattern_replace = $regex_pattern_parts [1]; } // space in replacement $regex_pattern_replace = str_replace ( '\s', ' ', $regex_pattern_replace ); echo '<br>*Replacing ' . htmlentities ( $regex_pattern_search ) . ' with ' . htmlentities ( $regex_pattern_replace ); $replacements_count = 0; // echo $post_content; // exit; if ((! $isTitleOnly) || $isContentOnly) { if (! in_array ( 'OPT_RGX_REPLACE_WORD', $camp_opt )) { // replacing in content $post_content = preg_replace ( '{' . $regex_pattern_search . '}su', $regex_pattern_replace, $post_content, - 1, $replacements_count ); // replacing in rules $i = 1; while ( isset ( $img ["rule_$i"] ) ) { $img ["rule_$i"] = preg_replace ( '{' . $regex_pattern_search . '}su', $regex_pattern_replace, $img ["rule_$i"] ); $i ++; } } else { $post_content = preg_replace ( '{\b' . preg_quote ( $regex_pattern_search ) . '\b}su', $regex_pattern_replace, $post_content, - 1, $replacements_count ); // replacing in rules $i = 1; while ( isset ( $img ["rule_$i"] ) ) { $img ["rule_$i"] = preg_replace ( '{\b' . preg_quote ( $regex_pattern_search ) . '\b}su', $regex_pattern_replace, $img ["rule_$i"] ); $i ++; } } echo '<-- ' . $replacements_count . ' replacements done in content ... '; } else { echo ' on titles only'; } if ((in_array ( 'OPT_RGX_REPLACE_TTL', $camp_opt ) || $isTitleOnly) && ! $isContentOnly) { if (! in_array ( 'OPT_RGX_REPLACE_WORD', $camp_opt )) { $post_title = preg_replace ( '{' . $regex_pattern_search . '}su', $regex_pattern_replace, $post_title, - 1, $replacements_count ); } else { $post_title = preg_replace ( '{\b' . preg_quote ( $regex_pattern_search ) . '\b}su', $regex_pattern_replace, $post_title, - 1, $replacements_count ); } echo ' & ' . $replacements_count . ' replacements in title ... '; } } } } else { echo '<-- added config for replacement is not correct/empty'; } // restore protected tags if (isset ( $htmlfounds ) and count ( $htmlfounds ) > 0) { // restoring $i = 1; foreach ( $htmlfounds as $htmlfound ) { $post_content = str_replace ( '[' . str_repeat ( '*', $i ) . ']', $htmlfound, $post_content ); $i ++; } } } // gallery will download images ini cache and add to media if (in_array ( 'OPT_GALLERY_ALL', $camp_opt )) { $camp_opt [] = 'OPT_CACHE'; $camp_opt [] = 'OPT_FEED_MEDIA'; } // cache images locally ? $attachements_to_attach = array (); $already_cached_imgs = array (); if (in_array ( 'OPT_CACHE', $camp_opt ) || $camp_type == 'Instagram' || $camp_type == 'Clickbank' || $camp_type == 'Facebook') { // strip srcset srcset= if (! in_array ( 'OPT_FEED_SRCSET', $camp_opt )) { $post_content = preg_replace ( '{srcset=".*?"}', '', $post_content ); $post_content = preg_replace ( '{sizes=".*?"}', '', $post_content ); } preg_match_all ( '/<img [^>]*src=["|\']([^"|\']+)/i', stripslashes ( $post_content ), $matches ); $srcs = $matches [1]; $srcs = array_unique ( $srcs ); $current_host = parse_url ( home_url (), PHP_URL_HOST ); $first_image_cache = true; // copy of the first image if used for the featured image foreach ( $srcs as $image_url ) { // check inline images if (stristr ( $image_url, 'data:image' )) { continue; } // instantiate so we replace . note we modify image_url $image_url_original = $image_url; // decode html entitiies $image_url = html_entity_decode ( $image_url ); if (stristr ( $image_url, '%' )) { // commented for version 3.44+ // $image_url = urldecode($image_url); } // file name to store $filename = basename ( $image_url ); // clean names if (in_array ( 'OPT_CACHE_CLEAN', $camp_opt ) || ($camp_type == 'Instagram' && in_array ( 'OPT_THUMB_CLEAN', $camp_opt ))) { $post_title_to_generate_from = $this->spintax->spin ( $post_title ); $post_title_to_generate_from = str_replace ( array ( '[nospin]', '[/nospin]' ), '', $post_title_to_generate_from ); $clean_name = $this->file_name_from_title ( $post_title_to_generate_from ); if (trim ( $clean_name ) != "") { // get the image extension \.\w{3} $ext = pathinfo ( $filename, PATHINFO_EXTENSION ); if ($camp_type == 'Instagram' || $camp_type == 'Facebook') $ext = 'jpg'; if (stristr ( $ext, '?' )) { $ext_parts = explode ( '?', $ext ); $ext = $ext_parts [0]; } // clean parameters after filename $filename = trim ( $clean_name ); if (trim ( $ext ) != '') { $filename = $filename . '.' . $ext; } } } if (stristr ( $image_url, '%' ) || stristr ( $filename, '%' )) { $filename = urldecode ( $filename ); } if (stristr ( $image_url, ' ' )) { $image_url = str_replace ( ' ', '%20', $image_url ); } $imghost = parse_url ( $image_url, PHP_URL_HOST ); if (stristr ( $imghost, 'http://' )) { $imgrefer = $imghost; } else { $imgrefer = 'http://' . $imghost; } if ($imghost != $current_host) { echo '<br>Caching image : ' . $image_url; // let's cache this image // set thumbnail $upload_dir = wp_upload_dir (); // curl get $x = 'error'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $image_url ) ); // empty referal if (! in_array ( 'OPT_CACHE_REFER_NULL', $camp_opt )) { curl_setopt ( $this->ch, CURLOPT_REFERER, $imgrefer ); } else { curl_setopt ( $this->ch, CURLOPT_REFERER, '' ); } // amazon fix https://m.media-amazon.com/images/I/41Vg3dKd4WL.jpg returns fastly error if (strpos ( $image_url, 'amazon' )) curl_setopt ( $this->ch, CURLOPT_HTTPHEADER, array ( 'Host: ' . $imghost ) ); curl_setopt ( $this->ch, CURLOPT_HEADER, 0 ); $image_data = $this->curl_exec_follow ( $this->ch ); $x = curl_error ( $this->ch ); if (trim ( $x ) != '') { echo ' <-- Error: ' . $x; } $contentType = curl_getinfo ( $this->ch, CURLINFO_CONTENT_TYPE ); if (! stristr ( $contentType, 'image' ) && ! stristr ( $image_data, 'WEBP' )) { echo '<-- can not verify if the content returned is an image skipping returned ' . $contentType; continue; } // now we know the mime, lets add an ext to fname if not existing $filename = $this->append_file_ext ( $filename, $contentType ); $image_data_md5 = md5 ( $image_data ); // check if already cached before $is_cached = $this->is_cached ( $image_url, $image_data_md5 ); if ($is_cached != false) { echo '<--already cached *'; $post_content = str_replace ( $image_url_original, $is_cached, $post_content ); $already_cached_imgs [] = $is_cached; continue; } $x = curl_error ( $this->ch ); if (trim ( $image_data ) != '') { $x = curl_error ( $this->ch ); if (stristr ( $filename, '?' )) { $farr = explode ( '?', $filename ); $filename = $farr [0]; } if (wp_mkdir_p ( $upload_dir ['path'] )) $file = $upload_dir ['path'] . '/' . $filename; else $file = $upload_dir ['basedir'] . '/' . $filename; // check if same image name already exists if (file_exists ( $file )) { $filename = time () . '_' . rand ( 0, 999 ) . '_' . $filename; if (wp_mkdir_p ( $upload_dir ['path'] )) $file = $upload_dir ['path'] . '/' . $filename; else $file = $upload_dir ['basedir'] . '/' . $filename; } else { } file_put_contents ( $file, $image_data ); $file_link = $upload_dir ['url'] . '/' . $filename; $guid = $upload_dir ['url'] . '/' . basename ( $filename ); // replace original src with new file link $post_content = str_replace ( $image_url_original, $file_link, $post_content ); $this->img_cached ( $image_url_original, $file_link, $image_data_md5, $file ); echo '<-- cached'; if ($first_image_cache) { $first_image_cache = false; $first_cached_image_data = $image_data; $first_cached_image_link = $file_link; $first_cached_image_type = $contentType; } // add to media library and attach to the post if (in_array ( 'OPT_FEED_MEDIA', $camp_opt )) { // atttatchment check if exists or not global $wpdb; $query = "select * from $wpdb->posts where guid = '$guid' limit 1"; $already_saved_attachment = $wpdb->get_row ( $query ); if (isset ( $already_saved_attachment->ID )) { $attach_id = $already_saved_attachment->ID; } else { $wp_filetype = wp_check_filetype ( $filename, null ); if ($wp_filetype ['type'] == false) { $wp_filetype ['type'] = 'image/jpeg'; } // Title handling $imgTitle = sanitize_file_name ( $filename ); if (in_array ( 'OPT_THUMB_ALT', $camp_opt )) { $imgTitle = wp_trim_words ( $post_title, 10, '' ); } $attachment = array ( 'guid' => $guid, 'post_mime_type' => $wp_filetype ['type'], 'post_title' => $imgTitle, 'post_content' => '', 'post_status' => 'inherit' ); // add attachements to attach after post publish $attachements_to_attach [] = array ( $file, $attachment ); } } } else { echo '<-- can not get image content ' . $x; } } } // end foreach image // Instagram added images for caching to delete class="delete" $post_content = preg_replace ( '{<img class="delete.*?>}', '', $post_content ); } // attaching media $attach_ids = array (); if (isset ( $attachements_to_attach ) && count ( $attachements_to_attach ) > 0) { require_once (ABSPATH . 'wp-admin/includes/image.php'); foreach ( $attachements_to_attach as $attachements_to_attach_single ) { $file = $attachements_to_attach_single [0]; $attachment = $attachements_to_attach_single [1]; // $post_id = $id; if (! function_exists ( 'wp_automatic_filter_image_sizes' )) { function wp_automatic_filter_image_sizes($sizes) { $sizes = array (); return $sizes; } } if (! in_array ( 'OPT_FEED_MEDIA_ALL', $camp_opt )) { add_filter ( 'intermediate_image_sizes_advanced', 'wp_automatic_filter_image_sizes' ); } $attach_id = wp_insert_attachment ( $attachment, $file ); $attach_data = wp_generate_attachment_metadata ( $attach_id, $file ); wp_update_attachment_metadata ( $attach_id, $attach_data ); $attach_ids [] = $attach_id; // add attach ID for gallery option OPT_GALLERY_ALL } // remove sizes filter remove_filter ( 'intermediate_image_sizes_advanced', 'wp_automatic_filter_image_sizes' ); } // replacing words that should be replaced $sets = stripslashes ( get_option ( 'wp_automatic_replace', '' ) ); $sets_arr = array_filter ( explode ( "\n", $sets ) ); if (count ( $sets_arr ) > 0 && ! in_array ( 'OPT_REPLACE_NO_PROTECT', $wp_automatic_options )) { preg_match_all ( "/<[^<>]+>/is", $post_content, $matches, PREG_PATTERN_ORDER ); $htmlfounds = $matches [0]; // extract all shortcodes $pattern = "\[.*?\]"; preg_match_all ( "/" . $pattern . "/s", $post_content, $matches2, PREG_PATTERN_ORDER ); $shortcodes = $matches2 [0]; $htmlfounds = array_merge ( $htmlfounds, $shortcodes ); $htmlfounds = array_filter ( array_unique ( $htmlfounds ) ); $i = 1; foreach ( $htmlfounds as $htmlfound ) { $post_content = str_replace ( $htmlfound, "[" . str_repeat ( '*', $i ) . "]", $post_content ); $i ++; } } foreach ( $sets_arr as $set ) { if (trim ( $set ) != '' && stristr ( $set, '|' )) { // valid set let's replace $set_words = explode ( '|', $set ); // cleaning empty words $i = 0; foreach ( $set_words as $setword ) { if (trim ( $setword ) == '') { unset ( $set_words [$i] ); } $i ++; } if (count ( $set_words ) > 1) { // word 1 $word1 = trim ( $set_words [0] ); // randomize replacing word $rand = rand ( 1, count ( $set_words ) - 1 ); $replaceword = trim ( $set_words [$rand] ); echo '<br>replacing "' . $word1 . '" by "' . $replaceword . '"'; if (in_array ( 'OPT_REPLACE_NO_REGEX', $wp_automatic_options )) { $post_title = str_replace ( $word1, $replaceword, $post_title ); $post_content = str_replace ( $word1, $replaceword, $post_content ); } else { $post_title = preg_replace ( '/\b' . trim ( preg_quote ( $word1, '/' ) ) . '\b/iu', $replaceword, $post_title ); $post_content = preg_replace ( '/\b' . trim ( preg_quote ( $word1, '/' ) ) . '\b/iu', $replaceword, $post_content ); } } } } // restore protected tags if (isset ( $htmlfounds ) and count ( $htmlfounds ) > 0) { // restoring $i = 1; foreach ( $htmlfounds as $htmlfound ) { $post_content = str_replace ( '[' . str_repeat ( '*', $i ) . ']', $htmlfound, $post_content ); $i ++; } } $abcontTxt = $camp->camp_post_content; $abtitleTxt = $camp->camp_post_title; // spin the content if (in_array ( 'OPT_TBS', $camp_opt ) && trim ( $abcontTxt ) != '' || stristr ( $abcontTxt, '{' ) && stristr ( $abcontTxt, '}' ) && stristr ( $abcontTxt, '|' ) || stristr ( $abtitleTxt, '{' ) && stristr ( $abtitleTxt, '}' ) && stristr ( $abtitleTxt, '|' )) { if ($camp_type != 'Spintax') { echo '<br>Spin the content enabled'; $abconts = $post_title . '(99999)' . $post_content; if (in_array ( 'OPT_TBS', $camp_opt )) { $abconts = $this->spin ( $abconts ); } $abconts = $this->spintax->spin ( $abconts ); $tempz = explode ( '(99999)', $abconts ); // Rewrite the title if (! in_array ( 'OPT_TBS_TTL', $camp_opt )) { echo '<br>Spinning the title'; $post_title = $tempz [0]; } $post_content = $tempz [1]; // remove nospin tags $post_title = str_replace ( '[nospin]', '', $post_title ); $post_title = str_replace ( '[/nospin]', '', $post_title ); $post_content = str_replace ( '[nospin]', '', $post_content ); $post_content = str_replace ( '[/nospin]', '', $post_content ); } // not spintax } // categories for post if (stristr ( $camp->camp_post_category, ',' )) { $categories = array_filter ( explode ( ',', $camp->camp_post_category ) ); } else { $categories = array ( $camp->camp_post_category ); } // check if dummy title (notitle) $post_title = str_replace ( '(notitle)', '', $post_title ); // Keyword to category $new_categories = array (); if (in_array ( 'OPT_KEYWORD_CAT', $camp_opt ) && trim ( $camp_general ['cg_keyword_cat'] ) != '') { echo '<br>Keyword to category check started...'; $content_to_check = in_array ( 'OPT_KEYWORD_NO_CNT', $camp_opt ) ? '' : $post_content; $content_to_check .= in_array ( 'OPT_KEYWORD_TTL', $camp_opt ) ? ' ' . $post_title : ''; $cg_keyword_cat = $camp_general ['cg_keyword_cat']; $cg_keyword_cat_rules = array_filter ( explode ( "\n", $cg_keyword_cat ) ); foreach ( $cg_keyword_cat_rules as $cg_keyword_cat_rule ) { if (stristr ( $cg_keyword_cat_rule, '|' )) { $cg_keyword_cat_rule = trim ( $cg_keyword_cat_rule ); $cg_keyword_cat_rule_parts = explode ( '|', $cg_keyword_cat_rule ); $cg_keyword_cat_rule_keyword = $cg_keyword_cat_rule_parts [0]; $cg_keyword_cat_rule_category = $cg_keyword_cat_rule_parts [1]; $was_found = true; $cg_keyword_cat_rule_keywords = explode ( ',', $cg_keyword_cat_rule_keyword ); foreach ( $cg_keyword_cat_rule_keywords as $cg_keyword_cat_rule_keyword_single ) { if (in_array ( 'OPT_KEYWORD_EXACT_NO', $camp_opt )) { // exact match if (! stristr ( $content_to_check, trim ( $cg_keyword_cat_rule_keyword_single ) )) { $was_found = false; break; } } else { // word match if (! (preg_match ( '{\b' . preg_quote ( $cg_keyword_cat_rule_keyword_single ) . '\b}siu', $content_to_check ) || (stristr ( $cg_keyword_cat_rule_keyword_single, '#' ) && stristr ( $content_to_check, trim ( $cg_keyword_cat_rule_keyword_single ) )))) { $was_found = false; break; } } } if ($was_found) { echo '<br><- Key ' . $cg_keyword_cat_rule_keyword . ' exists adding category:' . $cg_keyword_cat_rule_category; if (is_numeric ( $cg_keyword_cat_rule_category )) { $new_categories [] = $cg_keyword_cat_rule_category; } elseif (stristr ( $cg_keyword_cat_rule_category, ',' )) { $new_categories = array_merge ( $new_categories, explode ( ',', $cg_keyword_cat_rule_category ) ); } } } } // now new categories are available to consider if (count ( $new_categories ) > 0) { if (in_array ( 'OPT_KEYWORD_CAT_FORGET', $camp_opt )) { $categories = $new_categories; } else { $categories = array_merge ( $categories, $new_categories ); } } } // post status if (in_array ( 'OPT_DRAFT_PUBLISH', $camp_opt ) && $camp->camp_post_status == 'publish') { echo '<br>Setting post status to draft temporarily'; $postStatus = 'draft'; } else { $postStatus = $camp->camp_post_status; } // Gallery from found images, delete images and add gallery // prepare gallery attachments if (in_array ( 'OPT_GALLERY_ALL', $camp_opt )) { $gallery_attach_ids = array (); if (count ( $attach_ids ) > 0) $gallery_attach_ids = $attach_ids; // add already attached this run if (isset ( $already_cached_imgs ) && count ( $already_cached_imgs ) > 0) { echo '<br>Found ' . count ( $already_cached_imgs ) . ' cached images, finding ids for gallery attachments'; foreach ( $already_cached_imgs as $already_cached_img ) { echo '<br> -- finding id for ' . $already_cached_img . ' '; $query = "select * from {$this->wp_prefix}posts where guid = '$already_cached_img' limit 1"; $pres = $this->db->get_row ( $query ); if (isset ( $pres->ID )) { echo ' <-- found ' . $pres->ID; $gallery_attach_ids [] = $pres->ID; } else { echo '<-- not found'; } } } } if ((in_array ( 'OPT_GALLERY_ALL', $camp_opt ) && count ( $gallery_attach_ids ) > 0) && ! (count ( $gallery_attach_ids ) == 1 && ! in_array ( 'OPT_FEED_GALLERY_LIMIT', $camp_opt ))) { echo '<br>Found ' . count ( $gallery_attach_ids ) . ' images to attach as a gallery, creating the gallery'; $gallery_content = '<!-- wp:gallery {"linkTo":"none"} --> <figure class="wp-block-gallery has-nested-images columns-default is-cropped">'; foreach ( $gallery_attach_ids as $attach_ids_single ) { $gallery_content .= '<!-- wp:image {"id":' . $attach_ids_single . ',"sizeSlug":"large","linkDestination":"none"} --> <figure class="wp-block-image size-large"><img src="' . wp_get_attachment_image_url ( $attach_ids_single ) . '" alt="" class="wp-image-' . $attach_ids_single . '"/></figure> <!-- /wp:image -->'; } $gallery_content .= '</figure> <!-- /wp:gallery -->'; // remove content images? if (in_array ( 'OPT_FEED_GALLERY_DELETE', $camp_opt )) { $post_content = preg_replace ( '!<img .*?>!s', '', $post_content ); } if (stristr ( $post_content, '[the_gallery]' )) { $post_content = str_replace ( '[the_gallery]', $gallery_content, $post_content ); } else { $post_content = $gallery_content . $post_content; } } elseif (stristr ( $post_content, '[the_gallery]' )) { $post_content = str_replace ( '[the_gallery]', '', $post_content ); } // building post $my_post = array ( 'post_title' => ($post_title), 'post_content' => $post_content, 'post_status' => $postStatus, 'post_author' => $camp->camp_post_author, 'post_type' => $camp->camp_post_type, 'post_category' => $categories ); // Pending for non english if (in_array ( 'OPT_MUST_ENGLISH', $camp_opt )) { echo '<br>Checking If English or not'; if ($this->is_english ( $post_title )) { echo '<-- English '; } else { echo '<--Guessed as Not English setting as pending'; $my_post ['post_status'] = 'pending'; } } // pending if openaiFailed is true and option OPT_OPENAI_PENDING is set if (in_array ( 'OPT_OPENAI_PENDING', $camp_opt ) && $this->openaiFailed == true) { echo '<br>OpenAI Failed, setting as pending'; $my_post ['post_status'] = 'pending'; } // if posting from a specific list of posts and auto detect content method failed, set post to pending as content at this case will be just the link if (in_array ( 'OPT_MULTI_FIXED_LIST', $camp_opt ) && $this->fullContentSuccess == false) { echo '<br>Auto detect content failed, setting as pending'; $my_post ['post_status'] = 'pending'; } // If the camp type is multi and the post title contains http:// or https:// set the post status to pending if ($camp_type == 'Multi' && (stristr ( $post_title, 'http://' ) || stristr ( $post_title, 'https://' ))) { echo '<br>Post title contains http:// or https://, setting as pending'; $my_post ['post_status'] = 'pending'; } // Pending for transation fail // skip if translation failed if (in_array ( 'OPT_TRANSLATE', $camp_opt ) && in_array ( 'OPT_TRANSLATE_FTP', $camp_opt )) { echo '<br>Checking if translation faild..'; if ($this->translationSuccess == false) { echo ' Found Failed... set to pending..'; $my_post ['post_status'] = 'pending'; } else { echo ' Found succeeded '; } } // prepare author if ($camp_type == 'Feeds' && isset ( $img ['author'] ) && trim ( $img ['author'] ) != '' && in_array ( 'OPT_ORIGINAL_AUTHOR', $camp_opt )) { echo '<br>Trying to set the post author to ' . $img ['author']; $author_id = $this->get_user_id_by_display_name ( $img ['author'] ); if ($author_id != false) { $my_post ['post_author'] = $author_id; } } kses_remove_filters (); if ($camp_type == 'Feeds' && in_array ( 'OPT_ORIGINAL_TIME', $camp_opt )) { if (isset ( $article ['wpdate'] ) && trim ( $article ['wpdate'] ) != '') { $wpdate = get_date_from_gmt ( $article ['wpdate'] ); echo '<br>Setting date for the post to ' . $wpdate; // compare to current time to eliminate scheduled post if (strtotime ( $wpdate ) <= current_time ( 'timestamp' )) { $my_post ['post_date'] = $wpdate; } else { echo ' problem: asked time is higher than current time, ignoring...'; } } else { echo '<br>No date found to set as the original post date'; } } if ($camp_type == 'Craigslist' && in_array ( 'OPT_CL_TIME', $camp_opt )) { $wpdate = get_date_from_gmt ( gmdate ( 'Y-m-d H:i:s', strtotime ( $img ['item_date'] ) ) ); echo '<br>Setting date for the post to ' . $wpdate; $my_post ['post_date'] = $wpdate; } if ($camp_type == 'Reddit' && in_array ( 'OPT_RD_TIME', $camp_opt )) { $wpdate = get_date_from_gmt ( gmdate ( 'Y-m-d H:i:s', ($img ['item_date']) ) ); echo '<br>Setting date for the post to ' . $wpdate; $my_post ['post_date'] = $wpdate; } if (($camp_type == 'Instagram' || $camp_type == 'TikTok') && in_array ( 'OPT_IT_DATE', $camp_opt )) { echo '<br>Setting date for the post to ' . $img ['item_created_date']; $my_post ['post_date'] = $img ['item_created_date']; } if (($camp_type == 'Twitter' && in_array ( 'OPT_IT_DATE', $camp_opt )) || ($camp_type == 'SoundCloud' && in_array ( 'OPT_SC_DATE', $camp_opt ))) { $item_created_at = date ( 'Y-m-d H:i:s', strtotime ( $img ['item_created_at'] ) ); // $item_created_at = get_date_from_gmt($item_created_at); echo '<br>Setting date for the post to ' . $item_created_at; $my_post ['post_date'] = $item_created_at; } if ($camp_type == 'Youtube' && in_array ( 'OPT_YT_ORIGINAL_TIME', $camp_opt )) { $realDate = get_date_from_gmt ( gmdate ( 'Y-m-d H:i:s', $vid ['vid_time'] ) ); echo '<br>Setting date for the post to ' . $realDate; $my_post ['post_date'] = $realDate; } if ($camp_type == 'Youtube' && in_array ( 'OPT_YT_AUTHOR', $camp_opt )) { echo '<br>Setting author for the post to ' . $img ['vid_author_title']; $author_id = $this->get_user_id_by_display_name ( $img ['vid_author_title'] ); if ($author_id != false) { $my_post ['post_author'] = $author_id; } } if ($camp_type == 'Twitter' && in_array ( 'OPT_TW_AUTHOR', $camp_opt )) { echo '<br>Setting author for the post to ' . $img ['item_author_name']; $author_id = $this->get_user_id_by_display_name ( $img ['item_author_name'] ); if ($author_id != false) { $my_post ['post_author'] = $author_id; } } if ($camp_type == 'Reddit' && in_array ( 'OPT_RD_AUTHOR', $camp_opt )) { echo '<br>Setting author for the post to ' . $img ['item_author']; $author_id = $this->get_user_id_by_display_name ( $img ['item_author'] ); if ($author_id != false) { $my_post ['post_author'] = $author_id; } } if ($camp_type == 'DailyMotion' && in_array ( 'OPT_DM_ORIGINAL_TIME', $camp_opt )) { $realDate = get_date_from_gmt ( gmdate ( 'Y-m-d H:i:s', $img ['item_published_at'] ) ); echo '<br>Setting date for the post to ' . $realDate; $my_post ['post_date'] = $realDate; } if ($camp_type == 'Vimeo' && in_array ( 'OPT_VM_ORIGINAL_TIME', $camp_opt )) { $realDate = $vid ['vid_created_time']; echo '<br>Setting date for the post to ' . $realDate; $my_post ['post_date'] = $realDate; } if ($camp_type == 'Facebook' && in_array ( 'OPT_ORIGINAL_FB_TIME', $camp_opt )) { $realDate = $img ['original_date']; $my_post ['post_date'] = $realDate; //when an event, set the start date of the event instead if(trim($realDate) == '' && isset($img['start_time'])){ $my_post ['post_date'] = $img['start_time']; } echo '<br>Setting date for the post to ' . $my_post ['post_date']; } // set excerpt of amazon product post type if ($camp_type == 'Amazon' && in_array ( 'OPT_AMAZON_EXCERPT', $camp_opt )) { echo '<br>Setting product short description'; $my_post ['post_excerpt'] = $img ['product_desc']; } // set excerpt of ebay product post type if ($camp_type == 'eBay' && $camp->camp_post_type == 'product' && in_array ( 'OPT_EBAY_EXCERPT', $camp_opt )) { echo '<br>Setting product short description'; $my_post ['post_excerpt'] = $img ['item_desc']; } // remove filter kses for security remove_filter ( 'content_save_pre', 'wp_filter_post_kses' ); // fixing utf8 // echo ' Fixing ... '.$my_post['post_content']; $my_post ['post_content'] = $this->fix_utf8 ( $my_post ['post_content'] ); $my_post ['post_title'] = $this->fix_utf8 ( $my_post ['post_title'] ); // truemag instagram remove embed if (($camp_type == 'Instagram') && stristr ( $abcont, '[embed]' )) { if ((defined ( 'PARENT_THEME' ) && (PARENT_THEME == 'truemag' || PARENT_THEME == 'newstube')) || class_exists ( 'Cactus_video' )) { // extract video url $my_post ['post_content'] = preg_replace ( '{\[embed\](.*?)\[/embed\]}', '', $my_post ['post_content'] ); } } // Exact match check after filling the template // validating exact $valid = true; $valid = $this->validate_exacts ( $my_post ['post_content'], $title, $camp_opt, $camp, true, $camp_general ); // if not valid process the campaign again and exit if ($valid == false) { // blacklisting the link so we don'g teg it again and cause a loop $this->link_execlude ( $camp->camp_id, $source_link ); $this->process_campaign ( $camp ); exit (); } // fix html entities // Emoji fix if (! isset ( $wpdb )) global $wpdb; $emoji_fields = array ( 'post_title', 'post_content', 'post_excerpt' ); foreach ( $emoji_fields as $emoji_field ) { if (isset ( $my_post [$emoji_field] )) { $charset = $wpdb->get_col_charset ( $wpdb->posts, $emoji_field ); if ('utf8' === $charset) { $my_post [$emoji_field] = wp_encode_emoji ( $my_post [$emoji_field] ); $my_post [$emoji_field] = preg_replace ( '/[\x{10000}-\x{10FFFF}]/u', "", $my_post [$emoji_field] ); } } } // single campaign decide the decision if ($camp_type == 'Single') { $previousPostID = get_post_meta ( $camp->camp_id, 'wp_automatic_previous_id', 1 ); $previousHash = get_post_meta ( $camp->camp_id, 'wp_automatic_previous_hash', 1 ); $currentHash = md5 ( $my_post ['post_title'] . $my_post ['post_content'] ); $cg_sn_after = $camp_general ['cg_sn_after']; if ($cg_sn_after == 'justnew') { // ignore all of that, a new post should be created ignoring last post } else { if (trim ( $previousPostID ) == '') { // inogre that, it is the first post ever echo '<br>First time posting...'; } else { // previous post exists if ($cg_sn_after == 'delete') { // always delete old post, lets delete it echo '<br>Deleting previous post with ID:' . $previousPostID; wp_delete_post ( $previousPostID, true ); } else { // we have a previous post, let's see if new post is a differnet or the same if ($previousHash == $currentHash) { // nothing changed, it is the same post echo '<br>Previous post contains the latest content as nothing changed...'; exit (); } else { // post changed if ($cg_sn_after == 'deletechange') { // delete and create new one echo '<br>Content changed, Deleting previous post with ID:' . $previousPostID; wp_delete_post ( $previousPostID, true ); } elseif ($cg_sn_after == 'new') { // don't delete anything, just create a new post echo '<br>Content changed, keeping old post and create a new one'; } elseif ($cg_sn_after == 'update') { // update an existing post echo '<br>Content changed, updating post with ID:' . $previousPostID; $my_post ['ID'] = $previousPostID; } } } } } } // post parent if (in_array ( 'OPT_PARENT', $camp_opt )) { $cg_post_parent = $camp_general ['cg_post_parent']; if (is_numeric ( $cg_post_parent )) $my_post ['post_parent'] = $cg_post_parent; } // original slug if (in_array ( 'OPT_FEED_ORIGINAL_SLUG', $camp_opt )) { $final_slug = trim ( $this->get_final_slug ( $source_link ) ); echo '<br>Source slug:' . $final_slug; if (trim ( $final_slug ) != '') $my_post ['post_name'] = $final_slug; } // custom slug if option enalbed OPT_CUSTOM_SLUG and not empty $post_slug if (in_array ( 'OPT_CUSTOM_SLUG', $camp_opt ) && trim ( $post_slug ) != '') { $my_post ['post_name'] = sanitize_title ( $post_slug ); } // filter $my_post = apply_filters ( 'wp_automatic_before_insert', $my_post ); // fix \include where \ get removed https://core.trac.wordpress.org/ticket/54601#ticket ticked ID 19524 if ($camp_type != 'Youtube') { if (stristr ( $my_post ['post_title'], "\\" )) $my_post ['post_title'] = wp_slash ( $my_post ['post_title'] ); if (stristr ( $my_post ['post_content'], "\\" )) $my_post ['post_content'] = wp_slash ( $my_post ['post_content'] ); } // remove emojis option if (in_array ( 'OPT_REMOVE_EMOJI', $camp_opt )) { $my_post ['post_content'] = $this->removeEmoji ( $my_post ['post_content'] ); $my_post ['post_title'] = $this->removeEmoji ( $my_post ['post_title'] ); } // log ready to insert using wp_automatic_log_new function $title_without_emoji = $this->removeEmoji ( $my_post ['post_title'] ); wp_automatic_log_new('INSERTING....','Inserting post with title ' . $title_without_emoji ); // Insert the post into the database if ($my_post ['post_type'] == 'topic' && function_exists ( 'bbp_insert_topic' )) { $cg_bb_fid = $camp_general ['cg_bb_fid']; if (is_numeric ( $cg_bb_fid )) { $my_post ['post_parent'] = $cg_bb_fid; } $topicMeta = array (); $topicMeta ['forum_id'] = $cg_bb_fid; $id = bbp_insert_topic ( $my_post, $topicMeta ); } else { if (isset ( $my_post ['ID'] )) { // update exising post $id = wp_update_post ( $my_post ); } else { // insert new post $id = wp_insert_post ( $my_post ); } } //log insert error if any if (is_wp_error ( $id )) { // log error wp_automatic_log_new('INSERTING....','Insertion error: ' . $id->get_error_message() ); } if ($id == 0) { echo '<br>Error:Post Insertion failure'; // maybe contains emojis } else { $args ['post_id'] = $id; $args ['img'] = $img; $args ['my_post'] = $my_post; do_action ( 'wp_automatic_post_added', $args ); } // attachements to attach from cached files old location /* * $attach_ids = array(); * if (isset ( $attachements_to_attach ) && count ( $attachements_to_attach ) > 0) { * * require_once (ABSPATH . 'wp-admin/includes/image.php'); * * foreach ( $attachements_to_attach as $attachements_to_attach_single ) { * * $file = $attachements_to_attach_single [0]; * $attachment = $attachements_to_attach_single [1]; * $post_id = $id; * * if (! function_exists ( 'wp_automatic_filter_image_sizes' )) { * function wp_automatic_filter_image_sizes($sizes) { * $sizes = array (); * return $sizes; * } * } * * if (! in_array ( 'OPT_FEED_MEDIA_ALL', $camp_opt )) { * add_filter ( 'intermediate_image_sizes_advanced', 'wp_automatic_filter_image_sizes' ); * } * * $attach_id = wp_insert_attachment ( $attachment, $file, $post_id ); * $attach_data = wp_generate_attachment_metadata ( $attach_id, $file ); * wp_update_attachment_metadata ( $attach_id, $attach_data ); * * $attach_ids[] = $attach_id; //add attach ID for gallery option OPT_GALLERY_ALL * * } * * // remove sizes filter * remove_filter ( 'intermediate_image_sizes_advanced', 'wp_automatic_filter_image_sizes' ); * } * */ // wpml internal cron patch if (! stristr ( $_SERVER ['REQUEST_URI'], 'wp_automatic' ) && function_exists ( 'icl_object_id' )) { $wpml_options = get_option ( 'icl_sitepress_settings' ); $default_lang = $wpml_options ['default_language']; $args ['element_id'] = $id; $args ['element_type'] = 'post_' . $camp->camp_post_type; $args ['language_code'] = $default_lang; do_action ( 'wpml_set_element_language_details', $args ); } // wpml integration if (in_array ( 'OPT_WPML', $camp_opt ) && function_exists ( 'icl_object_id' )) { include_once (WP_PLUGIN_DIR . '/sitepress-multilingual-cms/inc/wpml-api.php'); $language_code = trim ( $camp_general ['cg_wpml_lang'] ); // change the language code echo '<br>Setting WPML language to: ' . $language_code; if (function_exists ( 'wpml_update_translatable_content' )) { wpml_update_translatable_content ( 'post_' . $camp->camp_post_type, $id, ($language_code) ); echo '<--Done'; // find if there is a previous instance in another language global $sitepress; $sitepress->switch_lang ( $language_code ); $cleanSource = preg_replace ( '{.rand\=.*}', '', $source_link ); $sourceMD5 = md5 ( $cleanSource ); $keyName = $sourceMD5 . '_wpml'; $Qresults = $this->db->get_results ( "SELECT * FROM {$this->db->prefix}postmeta WHERE `meta_key` = '$keyName' limit 1", ARRAY_A ); if (count ( $Qresults ) != 0) { // we have a previous instance $metaRow = $Qresults [0]; $metaValue = $metaRow ['meta_value']; $metaParts = explode ( '_', $metaValue ); echo '<br>Found a previous instance of the post in a different langauge:' . $metaValue . ' connecting...'; $sitepress->set_element_language_details ( $id, $my_post ['post_type'] . '_' . $my_post ['post_type'], $metaParts [0], $language_code, $metaParts [1] ); } else { // record the post for next translation $trid = ($sitepress->get_element_trid ( $id )); add_post_meta ( $id, $sourceMD5 . '_wpml', $trid . '_' . $language_code ); } } else { echo '<--Failed make sure wpml directory is named "sitepress-multilingual-cms"'; } } // PolyLang if (in_array ( 'OPT_POLY', $camp_opt ) && function_exists ( 'pll_set_post_language' )) { $language_code = trim ( $camp_general ['cg_poly_lang'] ); echo '<br>Setting language of Polylang plugin to ' . $language_code; pll_set_post_language ( $id, $language_code ); // connect older posts? $cleanSource = preg_replace ( '{.rand\=.*}', '', $source_link ); $sourceMD5 = md5 ( $cleanSource ); $keyName = $sourceMD5 . '_poly'; $Qresults = $this->db->get_results ( "SELECT * FROM {$this->db->prefix}postmeta WHERE `meta_key` = '$keyName' limit 1", ARRAY_A ); if (count ( $Qresults ) != 0) { // we have a previous instance $metaRow = $Qresults [0]; $metaValue = $metaRow ['meta_value']; echo '<br>Found a previous instance of the post in a different langauge:' . $metaValue . ' connecting...'; PLL ()->model->post->save_translations ( $id, array ( $metaValue => $metaRow ['post_id'] ) ); } else { // mark the post for next translation add_post_meta ( $id, $sourceMD5 . '_poly', $language_code ); } } // setting categories for custom post types if (true | $camp->camp_post_type != 'post') { $customPostTaxonomies = get_object_taxonomies ( $camp->camp_post_type ); if (count ( $customPostTaxonomies ) > 0) { foreach ( $customPostTaxonomies as $tax ) { if (is_taxonomy_hierarchical ( $tax )) { if (trim ( $camp->camp_post_category ) != '') echo '<br>Setting taxonomy ' . $tax . ' to ' . $camp->camp_post_category; @wp_set_post_terms ( $id, $categories, $tax, true ); } } } } else { } // Original Categories // hack to add any categories to categories_to_set so they get set on the fly if (isset ( $img ['categories_to_set'] ) && trim ( $img ['categories_to_set'] ) != '' && ! isset ( $img ['cats'] )) $img ['cats'] = $img ['categories_to_set']; if (($camp_type == 'Feeds' && in_array ( 'OPT_ORIGINAL_CATS', $camp_opt ) && trim ( $img ['cats'] != '' )) || (isset ( $img ['categories_to_set'] ) && trim ( $img ['categories_to_set'] ) != '')) { // Removed @v3.24.0 // add_post_meta ( $id, 'original_cats', $img['cats'] ); if (! in_array ( 'OPT_ORIGINAL_CATS_TAGS', $camp_opt )) { $img ['cats'] = wp_automatic_fix_json_and_slashes ( $img ['cats'] ); echo '<br>Setting Categories to :' . $img ['cats']; // parent format? Electronics > Car & Vehicle Electronics $is_parent_format = false; if (stristr ( $img ['cats'], ' > ' )) { $cats = array_filter ( explode ( ' > ', $img ['cats'] ) ); $is_parent_format = true; } else { $cats = array_filter ( explode ( ',', $img ['cats'] ) ); } // taxonomy name if ($camp->camp_post_type == 'post') { $taxonomy = 'category'; } else { $taxonomy = $camp_general ['cg_camp_tax']; } echo ' Taxonomy:' . $taxonomy; $new_cats = array (); // convert cats to ids foreach ( $cats as $cat_name ) { echo '<br>Processing cat:' . $cat_name; $cat = get_term_by ( 'name', $cat_name, $taxonomy ); // check existence if ($cat == false) { echo '<-- cat does not already exist... creating...'; // parent $args = array (); if ($is_parent_format && isset ( $cat_id )) { $args = array ( 'parent' => $cat_id ); // set the last cat created as the parent echo '<br>Setting parent to ' . $cat_id . ' for cat ' . $cat_name; } elseif (in_array ( 'OPT_ORIGINAL_CATS_PARENT', $camp_opt ) && is_numeric ( trim ( $camp_general ['cg_parent_cat'] ) )) { $cg_parent_cat = $camp_general ['cg_parent_cat']; $args = array ( 'parent' => trim ( $cg_parent_cat ) ); } // cateogry not exist create it $cat = wp_insert_term ( $cat_name, $taxonomy, $args ); if (! is_wp_error ( $cat )) { // category id of inserted cat $cat_id = $cat ['term_id']; echo '<-- Created with ID: ' . $cat_id; $new_cats [] = $cat_id; } } else { // category already exists let's get it's id $cat_id = $cat->term_id; $new_cats [] = $cat_id; echo '<-- Cat exists with ID: ' . $cat_id; } } // insert cats if (count ( $new_cats ) > 0) wp_set_post_terms ( $id, $new_cats, $taxonomy, true ); // delete uncategorized if ($taxonomy == 'category') { // get uncategorized slug by term id $uncatObject = get_term ( 1 ); $the_uncategorized_slug = isset ( $uncatObject->slug ) ? $uncatObject->slug : 'uncategorized'; wp_remove_object_terms ( $id, $the_uncategorized_slug, $taxonomy ); } } elseif (in_array ( 'OPT_ORIGINAL_CATS', $camp_opt )) { // as tags instead $camp_opt [] = 'OPT_ORIGINAL_TAGS'; // simulate tags option activated // merge tags $post_tags = array (); $new_tags = explode ( ',', $img ['cats'] ); if (count ( $new_tags ) > 0) { $post_tags = array_merge ( $post_tags, $new_tags ); } } } // end set original categories option // If post type== product, set the tags taxonomy to product_tags if ($camp->camp_post_type == 'product' && ! in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { $camp_opt [] = 'OPT_TAXONOMY_TAG'; $camp_general ['cg_tag_tax'] = 'product_tag'; } // Feeds part to field extraction set if ($camp_type == 'Feeds') { $customFieldsArr = $img ['custom_fields']; if (is_array ( $customFieldsArr ) && count ( $customFieldsArr ) != 0) { foreach ( $customFieldsArr as $customFieldSet ) { if ($customFieldSet [0] == 'excerpt') { $my_post = array ( 'ID' => $id, 'post_excerpt' => $customFieldSet [1] ); wp_update_post ( $my_post ); } elseif ($customFieldSet [0] == 'tags') { // case 'microsoft', 'xbox-scarlett' // fix josn // remove slashes $customFieldSet [1] = wp_automatic_fix_json_and_slashes ( $customFieldSet [1] ); echo '<br>Setting tags:' . $customFieldSet [1]; if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $customFieldSet [1], trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $customFieldSet [1], true ); } } elseif (stristr ( $customFieldSet [0], 'taxonomy_' )) { wp_set_post_terms ( $id, $customFieldSet [1], str_replace ( 'taxonomy_', '', $customFieldSet [0] ), true ); print_r ( $customFieldSet [0] ); print_r ( $customFieldSet [1] ); //elseif starts with attribute, use function wp_automatic_add_product_attribute }elseif( stristr($customFieldSet [0], 'attribute_' ) ){ $attribute_name = str_replace('attribute_', '', $customFieldSet [0]); $attribute_value = $customFieldSet [1]; wp_automatic_add_product_attribute($id, $attribute_name, $attribute_value); } else { if (! isset ( $my_post ['ID'] )) add_post_meta ( $id, $customFieldSet [0], $customFieldSet [1] ); } } // foreach field } // if array } // if feed $post_id = $id; if (! isset ( $my_post ['ID'] )) add_post_meta ( $id, 'wp_automatic_camp', $camp->camp_id ); if (isset ( $source_link )) { if (! isset ( $my_post ['ID'] )) $addedLink = add_post_meta ( $id, md5 ( $source_link ), $post_title ); if (! isset ( $addedLink ) || $addedLink === false) { if (! isset ( $my_post ['ID'] )) add_post_meta ( $id, md5 ( $source_link ), md5 ( $source_link ) ); } $set_original_link = $source_link; // for change permalink source if (! isset ( $my_post ['ID'] )) { if ($camp_type == 'Amazon' && in_array ( 'OPT_LINK_SOURSE', $camp_opt )) { add_post_meta ( $id, 'original_link', $img ['product_link'] ); $set_original_link = $img ['product_link']; } elseif ($camp_type == 'Aliexpress' && in_array ( 'OPT_LINK_SOURSE', $camp_opt )) { add_post_meta ( $id, 'original_link', $img ['item_affiliate_url'] ); $set_original_link = $img ['item_affiliate_url']; } elseif ($camp_type == 'eBay' && in_array ( 'OPT_LINK_SOURSE', $camp_opt )) { add_post_meta ( $id, 'original_link', $img ['item_link'] ); $set_original_link = $img ['item_link']; } else { add_post_meta ( $id, 'original_link', $source_link ); } } } // Record link if posted before if (in_array ( 'OPT_LINK_ONCE', $camp_opt )) { $query = "insert into {$this->wp_prefix}automatic_links( link_url ,link_keyword ) values ('" . md5 ( $source_link ) . "','" . $camp->camp_id . "')"; $this->db->query ( $query ); } // if link to source set flag if (in_array ( 'OPT_LINK_SOURSE', $camp_opt )) { if (! isset ( $my_post ['ID'] )) { if ($camp->camp_post_type == 'post') { add_post_meta ( $id, '_link_to_source', 'yes' ); } else { if (! isset ( $set_original_link )) $set_original_link = $source_link; add_post_meta ( $id, '_links_to', $set_original_link ); } } } // if link canonical _yoast_wpseo_canonical if (in_array ( 'OPT_LINK_CANONICAL', $camp_opt )) { if (defined ( 'WPSEO_VERSION' )) { if (! isset ( $my_post ['ID'] )) add_post_meta ( $id, '_yoast_wpseo_canonical', $source_link ); } else { if (! isset ( $my_post ['ID'] )) add_post_meta ( $id, 'canonical_url', $source_link ); } } // add featured image if (in_array ( 'OPT_REPLACE', $camp_opt )) { foreach ( $keywords as $keyword ) { $keyword = trim ( $keyword ); if (trim ( $keyword != '' )) { $post_content = str_replace ( $keyword, '<a href="' . $camp->camp_replace_link . '">' . $keyword . '</a>', $post_content ); } } } // Featured image if (in_array ( 'OPT_THUMB', $camp_opt )) { $srcs = array (); // ini $srcs_alts = array (); // if force og_img if (in_array ( 'OPT_FEEDS_OG_IMG', $camp_opt ) && isset ( $img ['og_img'] ) && trim ( $img ['og_img'] ) != '') { if (in_array ( 'OPT_FEEDS_OG_IMG_REVERSE', $camp_opt ) && stristr ( $post_content, '<img' )) { echo '<br>og:image found but will be skipped'; // here the image contains a first image and og:image should skipped // set an og:image variable so it get appended to the end of found images. If width check is active and all images on post are not wide enough $og_image = $img ['og_img']; } else { $srcs = array ( $img ['og_img'] ); $srcs_alts [] = $img ['og_alt']; } } // if youtube set thumbnail to video thum if ($camp_type == 'Youtube' || $camp_type == 'Vimeo') { // set youtube/vimeo image as featured image // check if maxres exists if (stristr ( $vid ['vid_img'], 'hqdefault' )) { $maxres = str_replace ( 'hqdefault', 'maxresdefault', $vid ['vid_img'] ); $maxhead = wp_remote_head ( $maxres ); if (! is_wp_error ( $maxhead ) && $maxhead ['response'] ['code'] == 200) { $vid ['vid_img'] = $maxres; } } $srcs = array ( $vid ['vid_img'] ); echo '<br>Vid Thumb:' . $vid ['vid_img']; } elseif ($camp_type == 'DailyMotion') { $srcs = array ( $img ['item_image'] ); } elseif ($camp_type == 'SoundCloud') { if (trim ( $img ['item_thumbnail'] ) != '') { $srcs = array ( $img ['item_thumbnail'] ); } elseif (trim ( $img ['item_user_thumbnail'] ) != '') { // $srcs = array($img['item_user_thumbnail']); } } elseif ($camp_type == 'Twitter' && isset ( $img ['item_image'] ) && trim ( $img ['item_image'] ) != '') { $srcs = array ( $img ['item_image'] ); } elseif ($camp_type == 'TikTok' || $camp_type == 'Craigslist' || $camp_type == 'Aliexpress') { $srcs = array ( $img ['item_img'] ); } elseif ($camp_type == 'Amazon') { $srcs = array ( $img ['product_img'] ); } elseif ($camp_type == 'eBay') { $srcs = array ( $img ['item_img'] ); } elseif (isset ( $srcs ) && count ( $srcs ) > 0) { } else { $post_content_to_check_for_src_imgs = $post_content; $post_content_to_check_for_src_imgs = preg_replace ( '!src="data:image.*?"!', '', $post_content_to_check_for_src_imgs ); // extract first image preg_match_all ( '/<img [^>]*src[\s]*=[\s]*"(.*?)".*?>/i', stripslashes ( $post_content_to_check_for_src_imgs ), $matches ); $srcs = $matches [1]; $srcs_html = $matches [0]; foreach ( $srcs_html as $src_html ) { preg_match ( '/alt[\s]*=[\s]*"(.*?)"/i', $src_html, $alt_matches ); if (isset ( $alt_matches [1] )) { $srcs_alts [] = $alt_matches [1]; } else { $srcs_alts [] = ''; } } if (isset ( $og_image )) { $og_arr = array (); $og_arr [] = $og_image; $srcs = array_merge ( $srcs, $og_arr ); } } // may be a wp_automatic_Readability missed the image on the content get it from summary ? if (count ( $srcs ) == 0 && $camp_type == 'Feeds' && in_array ( 'OPT_FULL_FEED', $camp_opt )) { echo '<br>Featured image is missing at full content searching for it in feed instead'; preg_match_all ( '/<img [^>]*src="([^"]+).*?/i', stripslashes ( $article ['original_content'] ), $matches ); $srcs = $matches [1]; $srcs_html = $matches [0]; foreach ( $srcs_html as $src_html ) { preg_match ( '/alt[\s]*=[\s]*"(.*?)"/i', $src_html, $alt_matches ); $srcs_alts [] = $alt_matches [1]; } if (count ( $srcs ) == 0) { echo '<br>No image found at the feed summary'; if (trim ( $img ['og_img'] ) != '') { echo '<br>Graph image thumb found'; $srcs = array ( $img ['og_img'] ); } } } // No featured image found let's check if random image list found if (count ( $srcs ) == 0 && in_array ( 'OPT_THUMB_LIST', $camp_opt )) { echo '<br>Trying to set random image as featured image'; $cg_thmb_list = $camp_general ['cg_thmb_list']; $cg_imgs = explode ( "\n", $cg_thmb_list ); $cg_imgs = array_filter ( $cg_imgs ); $cg_rand_img = trim ( $cg_imgs [rand ( 0, count ( $cg_imgs ) - 1 )] ); // validate image if (trim ( $cg_rand_img ) != '') { $srcs = array ( $cg_rand_img ); } } elseif (in_array ( 'OPT_THUMB_LIST', $camp_opt )) { $cg_thmb_list = $camp_general ['cg_thmb_list']; $cg_imgs = explode ( "\n", $cg_thmb_list ); $cg_imgs = array_filter ( $cg_imgs ); $cg_rand_img = trim ( $cg_imgs [rand ( 0, count ( $cg_imgs ) - 1 )] ); // validate image if (trim ( $cg_rand_img ) != '') { $srcs = array_merge ( $srcs, array ( $cg_rand_img ) ); } } // if foce using thumb list if (in_array ( 'OPT_THUMB_LIST_FORCE', $camp_opt ) && in_array ( 'OPT_THUMB_LIST', $camp_opt )) { echo '<br>Force using image from set list'; $cg_thmb_list = $camp_general ['cg_thmb_list']; $cg_imgs = explode ( "\n", $cg_thmb_list ); $cg_imgs = array_filter ( $cg_imgs ); $cg_rand_img = trim ( $cg_imgs [rand ( 0, count ( $cg_imgs ) - 1 )] ); // validate image if (trim ( $cg_rand_img ) != '') { $srcs = array ( $cg_rand_img ); } } // pixabay condition 1 force condition 2 no images found if ((in_array ( 'OPT_PIXABAY', $camp_opt ) && in_array ( 'OPT_PIXABAY_FORCE', $camp_opt )) || (in_array ( 'OPT_PIXABAY', $camp_opt ) && count ( $srcs ) == 0)) { $possible_image = ''; // ini if (in_array ( 'OPT_PIXABAY_TITLE', $camp_opt )) { // get keywords from post title echo '<br>Getting keywords for PixaBay from post title ' . $post_title; $validTitleWords = $this->wp_automatic_generate_tags ( $post_title ); foreach ( $validTitleWords as $validTitleWord ) { echo '<br>Keyword from the title : ' . $validTitleWord; $possible_image = $this->get_pixabay_image ( $validTitleWord ); if (trim ( $possible_image ) != '') { echo '<-- Found an image for this keyword'; break; // found for this keyword, nice } } } else { $cg_pixabay_keyword = $camp_general ['cg_pixabay_keyword']; // if cg_pixabay_keyword contains the [keyword] tag replace it with the keyword if (stristr ( $cg_pixabay_keyword, '[keyword]' ) && ! empty($img['keyword'])) { // report the keyword to the user echo '<br>PixaBay keyword: Replacing [keyword] tag with the keyword: ' . $img['keyword']; $cg_pixabay_keyword = str_replace ( '[keyword]', $img['keyword'], $cg_pixabay_keyword ); } $possible_image = $this->get_pixabay_image ( $cg_pixabay_keyword ); } if (stristr ( $possible_image, 'pixabay' )) { echo '<br>Final PixaBay image found to use:' . $possible_image; $srcs = array ( $possible_image ); } } // check srcs size to skip small images if (count ( $srcs ) > 0 && in_array ( 'OPT_THUMB_WIDTH_CHECK', $camp_opt )) { $cg_minimum_width = 0; $cg_minimum_width = $camp_general ['cg_minimum_width']; if (! (is_numeric ( $cg_minimum_width ) && $cg_minimum_width > 0)) { $cg_minimum_width = 100; } $n = 0; $upload_dir = wp_upload_dir (); foreach ( $srcs as $current_img ) { echo '<br>Candidate featured image: ' . $current_img; if (stristr ( $current_img, 'data:image' ) && stristr ( $current_img, 'base64,' )) { $ex = explode ( 'base64,', $current_img ); $image_data = base64_decode ( $ex [1] ); } else { // curl get $x = 'error'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $current_img ) ); $image_data = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); } if (trim ( $image_data ) != '') { // let's save the file if (wp_mkdir_p ( $upload_dir ['path'] )) $file = $upload_dir ['path'] . '/' . 'temp_wp_automatic'; else $file = $upload_dir ['basedir'] . '/' . 'temp_wp_automatic'; file_put_contents ( $file, $image_data ); $size = getimagesize ( $file ); if ($size != false) { if ($size [0] > $cg_minimum_width) { echo '<-- Valid width is ' . $size [0] . ' larger than ' . $cg_minimum_width; break; } else { echo '<-- width is too low ' . $size [0]; unset ( $srcs [$n] ); if (isset ( $srcs_alts [$n] )) unset ( $srcs_alts [$n] ); } } else { echo '<--size verification failed'; unset ( $srcs [$n] ); if (isset ( $srcs_alts [$n] )) unset ( $srcs_alts [$n] ); } } else { echo '<--no content '; unset ( $srcs [$n] ); if (isset ( $srcs_alts [$n] )) unset ( $srcs_alts [$n] ); } $n ++; } } // width check // Setting the thumb if (count ( $srcs ) > 0) { $src = reset ( $srcs ); $image_url = $src; $this->log ( 'Featured image', '<a href="' . $image_url . '">' . $image_url . '</a>' ); echo '<br>Featured image src: ' . $image_url; // set thumbnail $upload_dir = wp_upload_dir (); // img host $imghost = parse_url ( $image_url, PHP_URL_HOST ); if (stristr ( $imghost, 'http://' )) { $imgrefer = $imghost; } else { $imgrefer = 'http://' . $imghost; } // amazon fix https://m.media-amazon.com/images/I/41Vg3dKd4WL.jpg returns fastly error if (strpos ( $image_url, 'amazon' )) curl_setopt ( $this->ch, CURLOPT_HTTPHEADER, array ( 'Host: ' . $imghost ) ); // empty referal if (! in_array ( 'OPT_CACHE_REFER_NULL', $camp_opt )) { curl_setopt ( $this->ch, CURLOPT_REFERER, $imgrefer ); } else { curl_setopt ( $this->ch, CURLOPT_REFERER, '' ); } if (stristr ( $image_url, 'base64,' )) { $filename = time (); } else { // Decode html entitiies $image_url = html_entity_decode ( $image_url ); // file named 417t7%2BJs8wL.jpg turned to 417t7%252BJs8wL.jpg if (stristr ( $image_url, '%' )) { $image_url = urldecode ( $image_url ); } // File name to store $filename = basename ( $image_url ); // Empty spaces fix if (stristr ( $filename, ' ' )) { $filename = str_replace ( ' ', '-', $filename ); } // ? parameters removal 98176282_1622303147922555_5452725500717826048_n.jpg?_nc_cat=100&_nc_sid=8024bb&_nc_ohc=GHJGt1-A1z4AX-HoLXS&_nc_ht=scontent.faly1-2.fna&oh=802a3fc69c0ace28cc4a936134acaa2d&oe=5F022286 if (stristr ( $filename, '?' )) { $without_params_filename = preg_replace ( '{\?.*}', '', $filename ); if (trim ( $without_params_filename ) != '') { $filename = $without_params_filename; } } // Youtube hqdefault.jpg may exists with different data, change the name if (stristr ( $filename, 'default.jpg' )) { $filename = time () . '_' . $filename; } // sanizie to remove single quotes and fancey chars $filename = str_replace ( array ( "'", "’" ), '', $filename ); $filename = sanitize_file_name ( $filename ); if (stristr ( $image_url, ' ' )) { $image_url = str_replace ( ' ', '%20', $image_url ); } } // Clean thumb if (in_array ( 'OPT_THUMB_CLEAN', $camp_opt )) { $clean_name = $this->file_name_from_title ( $post_title ); if (trim ( $clean_name ) != "") { // get the image extension \.\w{3} $ext = pathinfo ( $filename, PATHINFO_EXTENSION ); if ($camp_type == 'Instagram') $ext = 'jpg'; if (stristr ( $ext, '?' )) { $ext_parts = explode ( '?', $ext ); $ext = $ext_parts [0]; } // clean parameters after filename $filename = trim ( $clean_name ); if (trim ( $ext ) != '') { $filename = $filename . '.' . $ext; } } } if (! in_array ( 'OPT_THUM_NELO', $camp_opt ) || stristr ( $image_url, 'base64,' )) { if (stristr ( $image_url, 'base64,' )) { $ex = explode ( 'base64,', $current_img ); $image_data = base64_decode ( $ex [1] ); // set fileName extention .png, .jpg etc preg_match ( '{data:image/(.*?);}', $image_url, $ex_matches ); $image_ext = $ex_matches [1]; if (trim ( $image_ext ) != '') { $filename = $filename . '.' . $image_ext; echo '<br>Fname:' . $filename; } } else { // get image content $x = 'error'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); // case https://mtvnaija.com/wp-content/uploads/2019/10/Sjava-–-Decoder-Ft.-Ranks-ATM-Just-G-MP3.jpg if (! stristr ( $image_url, '%' ) && class_exists ( 'Requests_IRI' )) { $iri = new Requests_IRI ( $image_url ); $iri->host = Requests_IDNAEncoder::encode ( $iri->ihost ); $image_url = $iri->uri; } curl_setopt ( $this->ch, CURLOPT_URL, trim ( html_entity_decode ( $image_url ) ) ); curl_setopt ( $this->ch, CURLOPT_SSL_VERIFYPEER, false ); if (isset ( $first_cached_image_link ) && $first_cached_image_link == $image_url) { echo '<-- previousely loaded...'; $image_data = $first_cached_image_data; $first_cached_image_content_type = $contentType; $contentType = $first_cached_image_type; } else { $image_data = $this->curl_exec_follow ( $this->ch ); $contentType = curl_getinfo ( $this->ch, CURLINFO_CONTENT_TYPE ); } echo '<br>Content type:' . $contentType; $x = curl_error ( $this->ch ); $http_code = curl_getinfo ( $this->ch, CURLINFO_HTTP_CODE ); } // adding ext $filename = $this->append_file_ext ( $filename, $contentType ); // do not validate content type option if (in_array ( 'OPT_THUM_NOTYPE', $camp_opt )) { $contentType = 'image'; } if (trim ( $image_data ) != '' && $http_code == 200 && ! stristr ( $contentType, 'image' )) { // possibly correct image get it's size $width = $this->get_image_width ( $image_data ); if ($width != 0) { echo '<br>Regardless of this content type header, It still seems a valid image with width = ' . $width; $contentType = 'image'; } } if (trim ( $image_data ) != '' && stristr ( $contentType, 'image' )) { // check if already saved $image_data_md5 = md5 ( $image_data ); $is_cached = $this->is_cached ( $image_url, $image_data_md5 ); if ($is_cached != false) { echo '<--already cached'; $file = $this->cached_file_path; $guid = $is_cached; } else { if (stristr ( $filename, '?' )) { $farr = explode ( '?', $filename ); $filename = $farr [0]; } // pagepeeker fix if (stristr ( $image_url, 'pagepeeker' ) && ! in_array ( 'OPT_THUMB_CLEAN', $camp_opt )) { $filename = md5 ( $filename ) . '.jpg'; } if (wp_mkdir_p ( $upload_dir ['path'] )) $file = $upload_dir ['path'] . '/' . $filename; else $file = $upload_dir ['basedir'] . '/' . $filename; // check if same image name already exists if (file_exists ( $file )) { // get the current saved one to check if identical $already_saved_image_link = $upload_dir ['url'] . '/' . $filename; // curl get $x = 'error'; $url = $already_saved_image_link; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $url ) ); $exec = curl_exec ( $this->ch ); if (trim ( $exec ) == trim ( $image_data )) { $idential = true; echo '<br>Featured image already exists with same path.. using it'; } else { echo '<br>Featured image exists with same path but not identical.. saving '; $filename = time () . '_' . $filename; } } // saving image if (! isset ( $idential )) { if (wp_mkdir_p ( $upload_dir ['path'] )) $file = $upload_dir ['path'] . '/' . $filename; else $file = $upload_dir ['basedir'] . '/' . $filename; $f = file_put_contents ( $file, $image_data ); // echo '<br>File URL:'.$file; } $guid = $upload_dir ['url'] . '/' . basename ( $filename ); $this->img_cached ( $image_url, $guid, $image_data_md5, $file ); } // not cached // atttatchment check if exists or not global $wpdb; $query = "select * from $wpdb->posts where guid = '$guid'"; $already_saved_attachment = $wpdb->get_row ( $query ); if (isset ( $already_saved_attachment->ID )) { $attach_id = $already_saved_attachment->ID; } else { $wp_filetype = wp_check_filetype ( $filename, null ); if ($wp_filetype ['type'] == false) { $wp_filetype ['type'] = 'image/jpeg'; } // Title handling $imgTitle = sanitize_file_name ( $filename ); if (in_array ( 'OPT_THUMB_ALT', $camp_opt )) { $imgTitle = wp_trim_words ( $post_title, 10, '' ); } $attachment = array ( 'guid' => $guid, 'post_mime_type' => $wp_filetype ['type'], 'post_title' => $imgTitle, 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment ( $attachment, $file, $post_id ); require_once (ABSPATH . 'wp-admin/includes/image.php'); $attach_data = wp_generate_attachment_metadata ( $attach_id, $file ); wp_update_attachment_metadata ( $attach_id, $attach_data ); // alt text if (in_array ( 'OPT_THUMB_ALT2', $camp_opt )) { $img_alt = reset ( $srcs_alts ); if (trim ( $img_alt ) != '') { update_post_meta ( $attach_id, '_wp_attachment_image_alt', $img_alt ); } if (in_array ( 'OPT_THUMB_ALT3', $camp_opt )) { if (trim ( $img_alt ) == '') { update_post_meta ( $attach_id, '_wp_attachment_image_alt', $title ); } } } // if OPT_PIXABAY_ALT set the alt text from $cg_pixabay_keyword if not empty if (in_array ( 'OPT_PIXABAY_ALT', $camp_opt )) { if (! empty ( $cg_pixabay_keyword ) ) { echo '<br>Setting alt text from pixabay keyword: ' . $cg_pixabay_keyword; update_post_meta ( $attach_id, '_wp_attachment_image_alt', $cg_pixabay_keyword ); } }elseif((in_array('OPT_PIXABAY_ALT_MAIN_KEY', $camp_opt))){ if(! empty($img['keyword']) && trim($img['keyword']) != '' ){ echo '<br>Setting alt text from main keyword: ' . $img['keyword']; update_post_meta ( $attach_id, '_wp_attachment_image_alt', $img['keyword'] ); } } } $img ['featured_img_source'] = $image_url; $img ['featured_img_local_source'] = $guid; $img ['featured_img_id'] = $attach_id; set_post_thumbnail ( $post_id, $attach_id ); echo ' <-- thumbnail set successfully attachement:' . $attach_id; if (isset ( $attach_id ) && is_numeric ( $attach_id )) $wp_automatic_thumb_success = $post_id; // Flag for successfull thumbnail // if hide first image set the custom field if (in_array ( 'OPT_THUMB_STRIP', $camp_opt )) { if (in_array ( 'OPT_THUMB_STRIP_FULL', $camp_opt )) { echo '<br>Deleting first image from the content...'; $new_post = get_post ( $id ); $new_content = preg_replace ( '/<img [^>]*src=["|\'][^"|\']+.*?>/i', '', $new_post->post_content, 1 ); $my_post = array ( 'ID' => $id, 'post_content' => $new_content ); // Update the post into the database wp_update_post ( $my_post ); } else { update_post_meta ( $post_id, 'wp_automatic_remove_first_image', 'yes' ); } } } else { echo ' <-- can not get image content ' . $x; } } else { // nelo // setting custom field for nelo image echo '<br>Setting the featured image custom field for '; if (function_exists ( 'fifu_update_fake_attach_id' )) { echo 'Featured image from URL plugin'; update_post_meta ( $id, 'fifu_image_url', $image_url ); fifu_update_fake_attach_id ( $id ); $wp_automatic_thumb_success = $post_id; } else { echo 'Nelio plugin'; update_post_meta ( $id, '_nelioefi_url', $image_url ); } // if hide first image set the custom field if (in_array ( 'OPT_THUMB_STRIP', $camp_opt )) { if (in_array ( 'OPT_THUMB_STRIP_FULL', $camp_opt )) { echo '<br>Deleting first image from the content...'; $new_post = get_post ( $id ); $new_content = preg_replace ( '/<img [^>]*src=["|\'][^"|\']+.*?>/i', '', $new_post->post_content, 1 ); $my_post = array ( 'ID' => $id, 'post_content' => $new_content ); // Update the post into the database wp_update_post ( $my_post ); } else { update_post_meta ( $post_id, 'wp_automatic_remove_first_image', 'yes' ); } } } } else { // currently no images in the content $this->log ( 'Featured image', 'No images found to set as featured' ); } } // thumbnails // featured image set or set as pending? if (in_array ( 'OPT_THUM_MUST', $camp_opt )) { if (isset ( $wp_automatic_thumb_success ) && $wp_automatic_thumb_success == $post_id) { // success } else { echo '<br>Failed to set featured image, setting the post status to Pending'; // failed set as pending wp_update_post ( array ( 'ID' => $post_id, 'post_status' => 'pending' ) ); } } // tags if (in_array ( 'OPT_TAG', $camp_opt )) { $targetKeywords = $keywords; if (in_array ( 'OPT_TAG_KEYONLY', $camp_opt ) && isset ( $this->used_keyword ) && trim ( $this->used_keyword ) != '') { $targetKeywords = $this->used_keyword; } if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $targetKeywords, trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $targetKeywords, true ); } } // youtube tags and comments if ($camp_type == 'Youtube') { // tags if (in_array ( 'OPT_YT_TAG', $camp_opt )) { if (trim ( $this->used_tags ) != '') { if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $this->used_tags, trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $this->used_tags, true ); } } } // comments if (in_array ( 'OPT_YT_COMMENT', $camp_opt )) { echo '<br>Trying to post comments'; // get id $temp = explode ( 'v=', $this->used_link ); $vid_id = $temp [1]; $wp_automatic_yt_tocken = trim ( wp_automatic_single_item ( 'wp_automatic_yt_tocken' ) ); $maxResults = rand ( 20, 50 ); $comments_link = "https://www.googleapis.com/youtube/v3/commentThreads?maxResults=$maxResults&part=snippet&videoId=" . $vid_id . "&key=$wp_automatic_yt_tocken"; echo '<br>Comments yt url:' . $comments_link; // curl get $x = 'error'; $url = $comments_link; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $url ) ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); if (trim ( $x ) != '') echo '<br>' . $x; if (trim ( $exec ) != '') { if (stristr ( $exec, 'items' )) { $exec = str_replace ( 's28-', 's90-', $exec ); $comments_array = json_decode ( $exec ); $entry = $comments_array->items; if (count ( $entry ) == 0) { echo '<br>No comments found'; } else { echo '<br>Found ' . count ( $entry ) . ' comment to post'; foreach ( $entry as $comment ) { $comment = $comment->snippet->topLevelComment->snippet; $commentText = $comment->textDisplay; $commentAuthor = $comment->authorDisplayName; $profileImage = $comment->authorProfileImageUrl; $commentUri = ''; $comment_author_url = ''; if (! in_array ( 'OPT_NO_COMMENT_LINK', $camp_opt )) { $comment_author_url = $profileImage . '|' . $comment->authorChannelId->value; $commentUri = $comment->authorChannelUrl; } else { $comment_author_url = $profileImage . '|'; } if (in_array ( 'OPT_YT_ORIGINAL_TIME', $camp_opt )) { $time = $comment->publishedAt; $time = get_date_from_gmt ( gmdate ( 'Y-m-d H:i:s', strtotime ( $time ) ) ); } else { $time = current_time ( 'mysql' ); } if (trim ( $commentText ) != '') { // bb replies if ($camp->camp_post_type == 'topic' && function_exists ( 'bbp_insert_reply' )) { $post_parent = $post_topic_id = $id; $comment_author_url = "https://www.youtube.com/channel/" . $comment->authorChannelId->value; $reply_data = array ( 'post_parent' => $post_parent, 'post_content' => $commentText, 'post_author' => false, 'post_date' => $time ); $reply_meta = array ( 'topic_id' => $post_topic_id, 'anonymous_name' => $commentAuthor, 'anonymous_email' => $profileImage, 'anonymous_website' => $comment_author_url ); $ret = bbp_insert_reply ( $reply_data, $reply_meta ); } else { $data = array ( 'comment_post_ID' => $id, 'comment_author' => $commentAuthor, 'comment_author_email' => '', 'comment_author_url' => $comment_author_url, 'comment_content' => $commentText, 'comment_type' => '', 'comment_parent' => 0, 'comment_author_IP' => '127.0.0.1', 'comment_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)', 'comment_date' => $time, 'comment_approved' => 1 ); $this->wp_automatic_insert_comment ( $data ); } } } } } else { echo '<br>could not find comments'; } } else { echo '<br>No valid comments feed'; } } } // After single scraper if ($camp_type == 'Single') { // update last post update_post_meta ( $camp->camp_id, 'wp_automatic_previous_id', $id ); update_post_meta ( $camp->camp_id, 'wp_automatic_previous_hash', $currentHash ); } // AFTER POST SPECIFIC DAILYMOTION if ($camp_type == 'DailyMotion') { // tags if (in_array ( 'OPT_DM_TAG', $camp_opt )) { if (trim ( $this->used_tags ) != '') { if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $this->used_tags, trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $this->used_tags, true ); } } } } // Generic tags_to_set , if found set as tags if (isset ( $img ['tags_to_set'] ) && trim ( $img ['tags_to_set'] ) != '') { echo '<br>Tags to be set: ' . $img ['tags_to_set']; // tags if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $img ['tags_to_set'], trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $img ['tags_to_set'], true ); } } // AFTER POST SPECIFIC if ($camp_type == 'Flicker') { if (in_array ( 'OPT_FL_TAG', $camp_opt )) { if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $img ['img_tags'], trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $img ['img_tags'], true ); } } } // AFTER POST SPECIFIC SoundCloud if ($camp_type == 'SoundCloud') { // tags if (in_array ( 'OPT_SC_TAG', $camp_opt )) { $item_tags = $img ['item_tags']; // extract tags with multiple words preg_match_all ( '{".*?"}', $item_tags, $multiple_tags_matches ); $multiple_tags_matches = $multiple_tags_matches [0]; $single_item_tags = $item_tags; foreach ( $multiple_tags_matches as $multiple_tag ) { $single_item_tags = str_replace ( $multiple_tag, '', $single_item_tags ); $single_item_tags = str_replace ( ' ', ' ', $single_item_tags ); } // remove " $multiple_tags_matches = str_replace ( '"', '', $multiple_tags_matches ); // explode single tags $single_item_tags = explode ( ' ', $single_item_tags ); $all_tags = array_merge ( $multiple_tags_matches, $single_item_tags ); $all_tags = array_filter ( $all_tags ); $all_tags_comma = implode ( ',', $all_tags ); if (trim ( $all_tags_comma ) != '') { echo '<br>Tags:' . $all_tags_comma; if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $all_tags_comma, trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $all_tags_comma, true ); } } } // comments if (in_array ( 'OPT_SC_COMMENT', $camp_opt )) { $wp_automatic_sc_client = $this->get_soundcloud_key (); if (trim ( $wp_automatic_sc_client ) != '') { // getting the comment $item_id = $img ['item_id']; echo '<br>Fetching comments for tack:' . $item_id; $commentsCount = rand ( 20, 30 ); $api_url = "https://api-v2.soundcloud.com/tracks/$item_id/comments?client_id=$wp_automatic_sc_client&limit=$commentsCount&offset=0&linked_partitioning=1&app_version=1607422960&app_locale=en&threaded=1&filter_replies=0"; // curl get $x = 'error'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $api_url ) ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); if (stristr ( $exec, '"comment"' )) { $comments_json = json_decode ( $exec ); $comments_json = $comments_json->collection; echo '<br>Found ' . count ( $comments_json ) . ' comments to post.'; $time = current_time ( 'mysql' ); foreach ( $comments_json as $new_comment ) { if ($new_comment->kind == 'comment') { $commentUri = ''; if (! in_array ( 'OPT_NO_COMMENT_LINK', $camp_opt )) $commentUri = $new_comment->user->permalink_url; // bb replies if ($camp->camp_post_type == 'topic' && function_exists ( 'bbp_insert_reply' )) { $post_parent = $post_topic_id = $id; $reply_data = array ( 'post_parent' => $post_parent, 'post_content' => $new_comment->body, 'post_author' => false, 'post_date' => $time ); $reply_meta = array ( 'topic_id' => $post_topic_id, 'anonymous_name' => $new_comment->user->username, 'anonymous_website' => $commentUri ); $ret = bbp_insert_reply ( $reply_data, $reply_meta ); } else { $data = array ( 'comment_post_ID' => $id, 'comment_author' => $new_comment->user->username, 'comment_author_email' => '', 'comment_author_url' => $commentUri, 'comment_content' => $new_comment->body, 'comment_type' => '', 'comment_parent' => 0, 'comment_author_IP' => '127.0.0.1', 'comment_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)', 'comment_date' => $time, 'comment_approved' => 1 ); $this->wp_automatic_insert_comment ( $data ); } } } } else { echo '<br>No comments found'; } } } } // After post facebook if ($camp_type == 'Facebook') { // tags if (in_array ( 'OPT_FB_TAGS', $camp_opt )) { if (trim ( $img ['item_tags'] ) != '') { echo '<br>Setting tags:' . $img ['item_tags']; if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $img ['item_tags'], trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $img ['item_tags'], true ); } } } // comments if (in_array ( 'OPT_FB_COMMENT', $camp_opt ) && isset ( $img ['comments'] )) { // trying to post FB comments echo '<br>Posting FB comments as comments :' . $img ['post_id']; if (isset ( $img ['comments'] )) { $comments = array_slice ( $img ['comments'], 0, rand ( 25, 50 ) ); $added = 0; $time = current_time ( 'mysql' ); foreach ( $comments as $comment ) { if (trim ( $comment ['text'] ) != '') { $commentText = $comment ['text']; $commentAuthor = $comment ['author_name']; $commentAuthorID = $comment ['author_id']; $commentUri = ''; if (! in_array ( 'OPT_NO_COMMENT_LINK', $camp_opt )) $commentUri = "https://facebook.com/" . $commentAuthorID; if (in_array ( 'OPT_ORIGINAL_FB_TIME', $camp_opt )) { $time = date ( 'Y-m-d H:i:s', $comment ['time'] ); $time = get_date_from_gmt ( $time ); } if (trim ( $commentText ) != '') { $anonymous_email = ''; if (! in_array ( 'OPT_FB_COMMENT_IMG', $camp_opt )) { $anonymous_email = $commentAuthorID . '@fb.com'; } // bb replies if ($camp->camp_post_type == 'topic' && function_exists ( 'bbp_insert_reply' )) { $post_parent = $post_topic_id = $id; $reply_data = array ( 'post_parent' => $post_parent, 'post_content' => $commentText, 'post_author' => false, 'post_date' => $time ); $reply_meta = array ( 'topic_id' => $post_topic_id, 'anonymous_name' => $commentAuthor, 'anonymous_email' => $anonymous_email, 'anonymous_website' => $commentUri ); $ret = bbp_insert_reply ( $reply_data, $reply_meta ); } else { $data = array ( 'comment_post_ID' => $id, 'comment_author' => $commentAuthor, 'comment_author_email' => $anonymous_email, 'comment_author_url' => $commentUri, 'comment_content' => $commentText, 'comment_type' => '', 'comment_parent' => 0, 'comment_author_IP' => '127.0.0.1', 'comment_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)', 'comment_date' => $time, 'comment_approved' => 1 ); $this->wp_automatic_insert_comment ( $data ); } } $added ++; } } echo '<br>' . $added . ' comments to post'; } else { echo '<br>No comments found'; } } } // After post vimeo if ($camp_type == 'Vimeo') { if (in_array ( 'OPT_VM_TAG', $camp_opt )) { if (trim ( $vid ['vid_tags'] ) != '') { if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $vid ['vid_tags'], trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $vid ['vid_tags'], true ); } } } } if ($camp_type == 'Envato') { if (in_array ( 'OPT_EV_AUTO_TAGS', $camp_opt )) { if (trim ( $img ['item_tags'] ) != '') { echo '<br>Setting tags to:' . $img ['item_tags']; if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $img ['item_tags'], trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $img ['item_tags'], true ); } } } } if ($camp_type == 'Instagram') { if (in_array ( 'OPT_IT_TAGS', $camp_opt )) { if (trim ( $img ['item_tags'] ) != '') { echo '<br>Setting tags:' . $img ['item_tags']; if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, $img ['item_tags'], trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, $img ['item_tags'], true ); } } } // comments if (in_array ( 'OPT_IT_COMMENT', $camp_opt )) { echo '<br>Trying to post comments'; $time = current_time ( 'mysql' ); $comments = $img ['item_comments']; if (count ( $comments ) > 0) { echo '<br>Found ' . count ( $comments ) . ' comment to post from'; // random count $commentsCount = count ( $comments ); if ($commentsCount == 40) { $commentsCount = rand ( 20, 40 ); echo '...Posting ' . $commentsCount; } $i = 0; foreach ( $comments as $comment ) { $i ++; if ($i > $commentsCount) break; if (isset ( $comment->node )) $comment = $comment->node; $commentText = $comment->text; if (isset ( $comment->owner ) && isset ( $comment->created_at ) && trim ( $comment->created_at ) != '') { // new comments format $commentAuthor = $comment->owner->username; $commentAuthorID = $comment->owner->id; $commentUri = ''; if (! in_array ( 'OPT_NO_COMMENT_LINK', $camp_opt )) $commentUri = "https://instagram.com/" . $comment->owner->username; if (in_array ( 'OPT_IT_DATE', $camp_opt )) { $time = date ( 'Y-m-d H:i:s', $comment->created_at ); } } elseif (isset ( $comment->user )) { // new comments format pk $commentAuthor = $comment->user->full_name; $commentAuthorID = $comment->user->pk; $commentUri = ''; if (! in_array ( 'OPT_NO_COMMENT_LINK', $camp_opt )) $commentUri = "https://instagram.com/" . $comment->user->username; if (in_array ( 'OPT_IT_DATE', $camp_opt )) { $time = date ( 'Y-m-d H:i:s', $comment->created_at ); } } else { // old comments format $commentAuthor = $comment->from->full_name; if (trim ( $commentAuthor ) == '') $commentAuthor = $comment->from->username; $commentAuthorID = $comment->author [0]->uri->x; $commentUri = ''; if (! in_array ( 'OPT_NO_COMMENT_LINK', $camp_opt )) $commentUri = "https://instagram.com/" . $comment->from->username; if (in_array ( 'OPT_IT_DATE', $camp_opt )) { $time = date ( 'Y-m-d H:i:s', $comment->created_time ); } } if (trim ( $commentText ) != '') { // bb replies if ($camp->camp_post_type == 'topic' && function_exists ( 'bbp_insert_reply' )) { $post_parent = $post_topic_id = $id; $reply_data = array ( 'post_parent' => $post_parent, 'post_content' => $commentText, 'post_author' => false, 'post_date' => $time ); $reply_meta = array ( 'topic_id' => $post_topic_id, 'anonymous_name' => $commentAuthor, 'anonymous_website' => $commentUri ); $ret = bbp_insert_reply ( $reply_data, $reply_meta ); } else { $data = array ( 'comment_post_ID' => $id, 'comment_author' => $commentAuthor, 'comment_author_email' => '', 'comment_author_url' => $commentUri, 'comment_content' => $commentText, 'comment_type' => '', 'comment_parent' => 0, 'comment_author_IP' => '127.0.0.1', 'comment_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)', 'comment_date' => $time, 'comment_approved' => 1 ); $this->wp_automatic_insert_comment ( $data ); } } } } else { echo '<br>No comments found'; } } } // After TikTok if ($camp_type == 'TikTok') { if (in_array ( 'OPT_TT_TAGS', $camp_opt )) { if (isset ( $img ['item_tags'] )) { echo '<br>Tags:' . $img ['item_tags']; wp_set_post_tags ( $id, $img ['item_tags'], true ); } } } // After Twitter if ($camp_type == 'Twitter') { if (in_array ( 'OPT_TW_TAG', $camp_opt )) { if (isset ( $img ['item_hashtags'] )) { echo '<br>Tags:' . $img ['item_hashtags']; wp_set_post_tags ( $id, $img ['item_hashtags'], true ); } } } // After Reddit if ($camp_type == 'Reddit') { if (in_array ( 'OPT_RD_COMMENT', $camp_opt )) { // comments echo '<br>Getting comments'; $comments_link = ($img ['item_link'] . '.json'); // curl get $x = 'error'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $comments_link ) ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); if (stristr ( $exec, '[{' )) { $commentsJson = json_decode ( $exec ); $commentsJson = $commentsJson [1]->data->children; $commentsJson = array_slice ( $commentsJson, 0, rand ( 25, 50 ) ); echo '<br>Found ' . count ( $commentsJson ) . ' comments '; $time = current_time ( 'mysql' ); foreach ( $commentsJson as $newComment ) { if (isset ( $newComment->data->stickied ) && $newComment->data->stickied == 1) continue; if (in_array ( 'OPT_RD_TIME', $camp_opt )) { $time = get_date_from_gmt ( gmdate ( 'Y-m-d H:i:s', ($newComment->data->created_utc) ) ); } $commentUri = ''; if (! in_array ( 'OPT_NO_COMMENT_LINK', $camp_opt )){ try { $commentUri = 'https://www.reddit.com/u/' . $newComment->data->author; } catch (Exception $e) { } } if (isset ( $newComment->data->body ) && trim ( $newComment->data->body ) != '') { // bb replies if ($camp->camp_post_type == 'topic' && function_exists ( 'bbp_insert_reply' )) { $post_parent = $post_topic_id = $id; $reply_data = array ( 'post_parent' => $post_parent, 'post_content' => $newComment->data->body, 'post_author' => false, 'post_date' => $time ); $reply_meta = array ( 'topic_id' => $post_topic_id, 'anonymous_name' => $newComment->data->author, 'anonymous_website' => $commentUri ); $ret = bbp_insert_reply ( $reply_data, $reply_meta ); } else { $data = array ( 'comment_post_ID' => $id, 'comment_author' => $newComment->data->author, 'comment_author_email' => '', 'comment_author_url' => $commentUri, 'comment_content' => $newComment->data->body, 'comment_type' => '', 'comment_parent' => 0, 'comment_author_IP' => '127.0.0.1', 'comment_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10 (.NET CLR 3.5.30729)', 'comment_date' => $time, 'comment_approved' => 1 ); $this->wp_automatic_insert_comment ( $data ); } } } } else { echo '<br>Not valid reply from Reddit'; } } } // After ebay if (in_array ( 'OPT_EB_REDIRECT_END', $camp_opt )) { echo '<br>Setting expiry date: ' . $img ['item_end_date']; $expiry_date = strtotime ( $img ['item_end_date'] ); add_post_meta ( $id, 'wp_automatic_redirect_date', $expiry_date ); add_post_meta ( $id, 'wp_automatic_redirect_link', $camp_general ['cg_eb_redirect_end'] ); } if (in_array ( 'OPT_EB_TRASH', $camp_opt )) { echo '<br>Setting trash date: ' . $img ['item_end_date']; $expiry_date = strtotime ( $img ['item_end_date'] ); add_post_meta ( $id, 'wp_automatic_trash_date', $expiry_date ); } // setting post tags if (! isset ( $post_tags )) $post_tags = array (); if (in_array ( 'OPT_ADD_TAGS', $camp_opt )) { // replace fields $cg_post_tags = $camp_general ['cg_post_tags']; if (stristr ( $camp_general ['cg_post_tags'], '[' )) { foreach ( $img as $key => $val ) { if (! is_array ( $val )) { $cg_post_tags = str_replace ( '[' . $key . ']', trim ( $val ), $cg_post_tags ); } } } $post_tags = array_filter ( explode ( "\n", $cg_post_tags ) ); $max = $camp_general ['cg_tags_limit']; if (! is_numeric ( $max )) $max = 100; if (in_array ( 'OPT_RANDOM_TAGS', $camp_opt ) && count ( $post_tags ) > $max) { $rand_keys = array_rand ( $post_tags, $max ); if (is_array ( $rand_keys )) { $temp_tags = array (); foreach ( $rand_keys as $key ) { $temp_tags [] = $post_tags [$key]; } } else { // single value selected like 0 $temp_tags [] = $post_tags [$rand_keys]; } $post_tags = $temp_tags; } } if (in_array ( 'OPT_ORIGINAL_TAGS', $camp_opt ) || in_array ( 'OPT_ORIGINAL_META', $camp_opt )) { $new_tags = explode ( ',', $img ['tags'] ); if (count ( $new_tags ) > 0) { $post_tags = array_merge ( $post_tags, $new_tags ); } } // title tags if (in_array ( 'OPT_TITLE_TAG', $camp_opt )) { $validTitleWords = $this->wp_automatic_generate_tags ( $post_title ); $post_tags = array_merge ( $post_tags, $validTitleWords ); } // Keyword to tag if (in_array ( 'OPT_KEYWORD_TAG', $camp_opt ) && trim ( $camp_general ['cg_keyword_tag'] ) != '') { echo '<br>Keyword to tag check started...'; $content_to_check = in_array ( 'OPT_KEYWORD_NO_CNT_TAG', $camp_opt ) ? '' : $post_content; $content_to_check .= in_array ( 'OPT_KEYWORD_TTL_TAG', $camp_opt ) ? ' ' . $post_title : ''; $cg_keyword_tag = $camp_general ['cg_keyword_tag']; $cg_keyword_tag_rules = array_filter ( explode ( "\n", $cg_keyword_tag ) ); foreach ( $cg_keyword_tag_rules as $cg_keyword_tag_rule ) { if (stristr ( $cg_keyword_tag_rule, '|' )) { $cg_keyword_tag_rule = trim ( $cg_keyword_tag_rule ); $cg_keyword_tag_rule_parts = explode ( '|', $cg_keyword_tag_rule ); $cg_keyword_tag_rule_keyword = $cg_keyword_tag_rule_parts [0]; $cg_keyword_tag_rule_tag = $cg_keyword_tag_rule_parts [1]; $was_found = true; // ini $keys_to_check = explode ( ',', $cg_keyword_tag_rule_keyword ); foreach ( $keys_to_check as $keys_to_check_single ) { if (! preg_match ( '{\b' . preg_quote ( trim ( $keys_to_check_single ) ) . '\b}siu', $content_to_check )) { $was_found = false; break; } } if ($was_found) { echo '<br><- Key ' . $cg_keyword_tag_rule_keyword . ' exists adding tag:' . $cg_keyword_tag_rule_tag; if (stristr ( $cg_keyword_tag_rule_tag, ',' )) { $post_tags = array_merge ( $post_tags, explode ( ',', $cg_keyword_tag_rule_tag ) ); } elseif (trim ( $cg_keyword_tag_rule_tag )) { $post_tags [] = $cg_keyword_tag_rule_tag; } } } } } if (count ( array_filter ( $post_tags ) ) > 0) { $post_tags = array_filter ( $post_tags ); echo '<br>Setting ' . count ( $post_tags ) . ' post tags as tags'; if (in_array ( 'OPT_TAXONOMY_TAG', $camp_opt )) { wp_set_post_terms ( $id, implode ( ',', $post_tags ), trim ( $camp_general ['cg_tag_tax'] ), true ); } else { wp_set_post_tags ( $id, implode ( ',', $post_tags ), true ); } } // now timestamp $now = time (); // amazon woocommerce integration if ($camp_type == 'Amazon' && $camp->camp_post_type == 'product') { $camp_post_custom_k = array_merge ( array ( 'product_price_updated', 'product_asin', 'product_price', 'product_list_price', '_regular_price', '_price', '_sale_price', '_visibility', '_product_url', '_button_text', '_product_type' ), $camp_post_custom_k ); $wp_automatic_woo_buy = get_option ( 'wp_automatic_woo_buy', 'Buy Now' ); if (trim ( $wp_automatic_woo_buy ) == '') $wp_automatic_woo_buy = 'Buy Now'; $camp_post_custom_v = array_merge ( array ( $now, '[product_asin]', '[product_price]', '[product_list_price]', '[list_price_numeric]', '[price_numeric]', '[price_numeric]', 'visible', '[product_link]', $wp_automatic_woo_buy, 'external' ), $camp_post_custom_v ); // product gallery if (isset ( $img ['product_imgs'] ) && stristr ( $img ['product_imgs'], ',' ) && in_array ( 'OPT_AM_GALLERY', $camp_opt )) { echo '<br>Multiple images found setting a gallery'; $attachmentsIDs = array (); $product_imgs_txt = $img ['product_imgs']; $product_imgs = explode ( ',', $product_imgs_txt ); // first image already attached if (isset ( $attach_id )) { // $attachmentsIDs[] = $attach_id; unset ( $product_imgs [0] ); } // set rest images as attachments foreach ( $product_imgs as $product_img ) { echo '<br>Attaching:' . $product_img; $newAttach = $this->attach_image ( $product_img, $camp_opt, $post_id ); if (is_numeric ( $newAttach ) && $newAttach > 0) { $attachmentsIDs [] = $newAttach; } } if (count ( $attachmentsIDs ) > 0) { $attachmentsIDsStr = implode ( ',', $attachmentsIDs ); add_post_meta ( $id, '_product_image_gallery', $attachmentsIDsStr ); } } wp_set_object_terms ( $id, 'external', 'product_type' ); } elseif ($camp_type == 'eBay' && $camp->camp_post_type == 'product') { // product gallery if (isset ( $img ['item_images'] ) && is_array ( $img ['item_images'] ) && count ( $img ['item_images'] ) > 1 && in_array ( 'OPT_EB_GALLERY', $camp_opt )) { echo '<br>Multiple images found setting a gallery for Woo'; $attachmentsIDs = array (); $product_imgs = $img ['item_images']; // first image already attached if (isset ( $attach_id )) { // $attachmentsIDs[] = $attach_id; unset ( $product_imgs [0] ); } // set rest images as attachments foreach ( $product_imgs as $product_img ) { echo '<br>Attaching:' . $product_img; $newAttach = $this->attach_image ( $product_img, $camp_opt, $post_id ); if (is_numeric ( $newAttach ) && $newAttach > 0) { $attachmentsIDs [] = $newAttach; } } if (count ( $attachmentsIDs ) > 0) { $attachmentsIDsStr = implode ( ',', $attachmentsIDs ); add_post_meta ( $id, '_product_image_gallery', $attachmentsIDsStr ); } } $camp_post_custom_k = array_merge ( $camp_post_custom_k, array ( '_regular_price', '_price', '_sale_price', '_visibility', '_product_url', '_button_text', '_product_type' ) ); $wp_automatic_woo_buy = get_option ( 'wp_automatic_woo_buy2', 'Buy Now' ); if (trim ( $wp_automatic_woo_buy ) == '') $wp_automatic_woo_buy = 'Buy Now'; $camp_post_custom_v = array_merge ( $camp_post_custom_v, array ( '[item_marketing_price]', '[item_price_numeric]', '[item_price_numeric]', 'visible', '[item_link]', $wp_automatic_woo_buy, 'external' ) ); wp_set_object_terms ( $id, 'external', 'product_type' ); } elseif ($camp_type == 'Craigslist' && $camp->camp_post_type == 'product') { // product gallery if (isset ( $img ['item_images'] ) && is_array ( $img ['item_images'] ) && count ( $img ['item_images'] ) > 1 && in_array ( 'OPT_CL_GALLERY', $camp_opt )) { echo '<br>Multiple images found setting a gallery for Woo'; $attachmentsIDs = array (); $product_imgs = $img ['item_images']; // first image already attached if (isset ( $attach_id )) { // $attachmentsIDs[] = $attach_id; unset ( $product_imgs [0] ); } // set rest images as attachments foreach ( $product_imgs as $product_img ) { echo '<br>Attaching:' . $product_img; $newAttach = $this->attach_image ( $product_img, $camp_opt, $post_id ); if (is_numeric ( $newAttach ) && $newAttach > 0) { $attachmentsIDs [] = $newAttach; } } if (count ( $attachmentsIDs ) > 0) { $attachmentsIDsStr = implode ( ',', $attachmentsIDs ); add_post_meta ( $id, '_product_image_gallery', $attachmentsIDsStr ); } } $camp_post_custom_k = array_merge ( $camp_post_custom_k, array ( '_regular_price', '_price', '_visibility', '_product_url', '_button_text', '_product_type' ) ); $wp_automatic_woo_buy = get_option ( 'wp_automatic_woo_buy2', 'Buy Now' ); if (trim ( $wp_automatic_woo_buy ) == '') $wp_automatic_woo_buy = 'Buy Now'; $camp_post_custom_v = array_merge ( $camp_post_custom_v, array ( '[item_price_numeric]', '[item_price_numeric] ', 'visible', '[item_link]', $wp_automatic_woo_buy, 'external' ) ); wp_set_object_terms ( $id, 'external', 'product_type' ); } elseif ($camp_type == 'Aliexpress' && $camp->camp_post_type == 'product') { // imgs array $imgs_arr = explode ( ',', $img ['item_images'] ); // product gallery if (isset ( $img ['item_images'] ) && is_array ( $imgs_arr ) && count ( $imgs_arr ) > 1 && in_array ( 'OPT_AE_GALLERY', $camp_opt )) { echo '<br>Multiple images found setting a gallery for Woo'; $attachmentsIDs = array (); $product_imgs = $imgs_arr; // first image already attached if (isset ( $attach_id )) { // $attachmentsIDs[] = $attach_id; unset ( $product_imgs [0] ); } // set rest images as attachments foreach ( $product_imgs as $product_img ) { echo '<br>Attaching:' . $product_img; $newAttach = $this->attach_image ( $product_img, $camp_opt, $post_id ); if (is_numeric ( $newAttach ) && $newAttach > 0) { $attachmentsIDs [] = $newAttach; } } if (count ( $attachmentsIDs ) > 0) { $attachmentsIDsStr = implode ( ',', $attachmentsIDs ); add_post_meta ( $id, '_product_image_gallery', $attachmentsIDsStr ); } } $camp_post_custom_k = array_merge ( $camp_post_custom_k, array ( '_regular_price', '_sale_price', '_price', 'product_list_price', 'product_price', '_visibility', '_product_url', '_button_text', '_product_type' ) ); $wp_automatic_woo_buy = get_option ( 'wp_automatic_woo_buy2', 'Buy Now' ); if (trim ( $wp_automatic_woo_buy ) == '') $wp_automatic_woo_buy = 'Buy Now'; $camp_post_custom_v = array_merge ( $camp_post_custom_v, array ( '[item_price_original_numeric]', '[item_price_numeric] ', '[item_price_numeric] ', '[item_price_original_numeric]', '[item_price_numeric] ', 'visible', '[item_url]', $wp_automatic_woo_buy, 'external' ) ); wp_set_object_terms ( $id, 'external', 'product_type' ); } elseif ($camp_type == 'Amazon' && $camp->camp_post_type != 'product') { $camp_post_custom_k = array_merge ( array ( 'product_price_updated', 'product_asin', 'product_price', 'product_list_price' ), $camp_post_custom_k ); $camp_post_custom_v = array_merge ( array ( $now, '[product_asin]', '[product_price]', '[product_list_price]' ), $camp_post_custom_v ); } elseif ($camp_type == 'Aliexpress' && $camp->camp_post_type != 'product') { $camp_post_custom_k = array_merge ( array ( 'product_price_updated', 'product_price', 'product_list_price' ), $camp_post_custom_k ); $camp_post_custom_v = array_merge ( array ( $now, '[item_price_numeric]', '[item_price_original_numeric]' ), $camp_post_custom_v ); } elseif ($camp_type == 'Walmart' && $camp->camp_post_type != 'product') { $camp_post_custom_k = array_merge ( array ( 'product_price_updated', 'product_upc', 'product_price', 'product_list_price' ), $camp_post_custom_k ); $camp_post_custom_v = array_merge ( array ( $now, '[item_upc]', '$[item_price]', '$[item_list_price]' ), $camp_post_custom_v ); } elseif ($camp_type == 'Walmart' && $camp->camp_post_type == 'product') { // affiliate item_link /* * if(stristr( $post_content , 'linksynergy')){ * $buyShortCode = '[product_affiliate_url]'; * }else{ * $buyShortCode = '[item_link]'; * } */ $buyShortCode = '[product_affiliate_url]'; $camp_post_custom_k = array_merge ( array ( 'product_price_updated', 'product_upc', 'product_price', 'product_list_price', '_regular_price', '_price', '_sale_price', '_visibility', '_product_url', '_button_text', '_product_type' ), $camp_post_custom_k ); $wp_automatic_woo_buy = get_option ( 'wp_automatic_woo_buy', 'Buy Now' ); if (trim ( $wp_automatic_woo_buy ) == '') $wp_automatic_woo_buy = 'Buy Now'; $camp_post_custom_v = array_merge ( array ( $now, '[item_upc]', '$[item_price]', '$[item_list_price]', '[item_list_price]', '[item_price]', '[item_price]', 'visible', $buyShortCode, $wp_automatic_woo_buy, 'external' ), $camp_post_custom_v ); // product gallery if (isset ( $img ['item_imgs'] ) && stristr ( $img ['item_imgs'], ',' ) && in_array ( 'OPT_WM_GALLERY', $camp_opt )) { echo '<br>Multiple images found setting a gallery'; $attachmentsIDs = array (); $product_imgs_txt = $img ['item_imgs']; $product_imgs = explode ( ',', $product_imgs_txt ); // first image already attached if (isset ( $attach_id )) { // $attachmentsIDs[] = $attach_id; unset ( $product_imgs [0] ); } // set rest images as attachments foreach ( $product_imgs as $product_img ) { echo '<br>Attaching:' . $product_img; $newAttach = $this->attach_image ( $product_img, $camp_opt, $post_id ); if (is_numeric ( $newAttach ) && $newAttach > 0) { $attachmentsIDs [] = $newAttach; } } if (count ( $attachmentsIDs ) > 0) { $attachmentsIDsStr = implode ( ',', $attachmentsIDs ); add_post_meta ( $id, '_product_image_gallery', $attachmentsIDsStr ); } } wp_set_object_terms ( $id, 'external', 'product_type' ); } elseif ($camp_type == 'Envato' && $camp->camp_post_type == 'product') { $camp_post_custom_k = array_merge ( array ( 'product_price_updated', 'product_upc', 'product_price', 'product_list_price', '_regular_price', '_price', '_sale_price', '_visibility', '_product_url', '_button_text', '_product_type' ), $camp_post_custom_k ); $wp_automatic_woo_buy = get_option ( 'wp_automatic_woo_buy', 'Buy Now' ); if (trim ( $wp_automatic_woo_buy ) == '') $wp_automatic_woo_buy = 'Buy Now'; $buyShortCode = '[item_link_affiliate]'; $camp_post_custom_v = array_merge ( array ( $now, '[item_upc]', '$[item_price]', '$[item_price]', '[item_price]', '[item_price]', '[item_price]', 'visible', $buyShortCode, $wp_automatic_woo_buy, 'external' ), $camp_post_custom_v ); wp_set_object_terms ( $id, 'external', 'product_type' ); } elseif ($camp->camp_post_type == 'product') { $camp_post_custom_k = array_merge ( $camp_post_custom_k, array ( '_visibility' ) ); $camp_post_custom_v = array_merge ( $camp_post_custom_v, array ( 'visible' ) ); wp_set_object_terms ( $id, 'external', 'product_type' ); } // Not external option if (in_array ( 'OPT_SIMPLE', $camp_opt )) { wp_set_object_terms ( $id, 'simple', 'product_type' ); } elseif (in_array ( 'OPT_PRODUCT_EXTERNAL', $camp_opt )) { wp_set_object_terms ( $id, 'external', 'product_type' ); // _product_url if (! in_array ( '_product_url', $camp_post_custom_k )) { $camp_post_custom_k = array_merge ( $camp_post_custom_k, array ( '_product_url' ) ); $camp_post_custom_v = array_merge ( $camp_post_custom_v, array ( $source_link ) ); } } // TrueMag integration if (($camp_type == 'Youtube' || $camp_type == 'Vimeo')) { if ((defined ( 'PARENT_THEME' ) && (PARENT_THEME == 'truemag' || PARENT_THEME == 'newstube')) || class_exists ( 'Cactus_video' )) { echo '<br>TrueMag/NewsTube theme exists adabting config..'; $duration_key_val = ($camp_type == 'Youtube') ? '[vid_duration]' : '[vid_duration_readable]'; $camp_post_custom_k = array_merge ( $camp_post_custom_k, array ( 'tm_video_url', '_count-views_all', 'video_duration' ) ); $camp_post_custom_v = array_merge ( $camp_post_custom_v, array ( '[source_link]', '[vid_views]', '[vid_duration]' ) ); // adding likes n dislikes $vid_likes = isset ( $img ['vid_likes'] ) ? $img ['vid_likes'] : ''; $vid_dislikes = isset ( $img ['vid_dislikes'] ) ? $img ['vid_dislikes'] : ''; // adding likes if ($vid_likes > 0) { try { $query = "INSERT INTO {$this->db->prefix}wti_like_post SET "; $query .= "post_id = '" . $id . "', "; $query .= "value = '$vid_likes', "; $query .= "date_time = '" . date ( 'Y-m-d H:i:s' ) . "', "; $query .= "ip = ''"; @$this->db->query ( $query ); } catch ( Exception $e ) { } } if ($vid_dislikes > 0 && $camp_type == 'Youtube') { $query = "INSERT INTO {$this->db->prefix}wti_like_post SET "; $query .= "post_id = '" . $id . "', "; $query .= "value = '-$vid_dislikes', "; $query .= "date_time = '" . date ( 'Y-m-d H:i:s' ) . "', "; $query .= "ip = ''"; @$this->db->query ( $query ); } } } // truemag dailymotion integration if ($camp_type == 'DailyMotion') { if ((defined ( 'PARENT_THEME' ) && (PARENT_THEME == 'truemag' || PARENT_THEME == 'newstube')) || class_exists ( 'Cactus_video' )) { echo '<br>TrueMag/NewsTube theme exists adabting config..'; $camp_post_custom_k = array_merge ( $camp_post_custom_k, array ( 'tm_video_url', '_count-views_all' ) ); $camp_post_custom_v = array_merge ( $camp_post_custom_v, array ( '[source_link]', '[item_views]' ) ); } } // trumag instagram integration if (($camp_type == 'Instagram') && stristr ( $abcont, '[embed]' )) { if ((defined ( 'PARENT_THEME' ) && (PARENT_THEME == 'truemag' || PARENT_THEME == 'newstube')) || class_exists ( 'Cactus_video' )) { echo '<br>TrueMag/NewsTube theme exists adabting config..'; // extract video url preg_match ( '{\[embed\](.*?)\[/embed\]}', $abcont, $embedMatchs ); $embedUrl = $embedMatchs [1]; $camp_post_custom_k = array_merge ( $camp_post_custom_k, array ( 'tm_video_file' ) ); $camp_post_custom_v = array_merge ( $camp_post_custom_v, array ( $embedUrl ) ); // adding likes n dislikes $vid_likes = $img ['item_likes_count']; // adding likes if ($vid_likes > 0) { try { $query = "INSERT INTO {$this->db->prefix}wti_like_post SET "; $query .= "post_id = '" . $id . "', "; $query .= "value = '$vid_likes', "; $query .= "date_time = '" . date ( 'Y-m-d H:i:s' ) . "', "; $query .= "ip = ''"; @$this->db->query ( $query ); } catch ( Exception $e ) { } } } } // truemag facebook integration if ($camp_type == 'Facebook') { if (isset ( $img ['vid_url'] )) { if ((defined ( 'PARENT_THEME' ) && (PARENT_THEME == 'truemag' || PARENT_THEME == 'newstube')) || class_exists ( 'Cactus_video' )) { echo '<br>TrueMag setup and video exists...'; $camp_post_custom_k = array_merge ( $camp_post_custom_k, array ( 'tm_video_url' ) ); $camp_post_custom_v = array_merge ( $camp_post_custom_v, array ( $img ['vid_url'] ) ); } } } // replacing tags on custom fields values $camp_post_custom_v = implode ( '#****#', $camp_post_custom_v ); foreach ( $img as $key => $val ) { if (! is_array ( $val )) { $camp_post_custom_v = str_replace ( '[' . $key . ']', $val, $camp_post_custom_v ); } // feed custom attributes if ($camp_type == 'Feeds') { $attributes = $img ['attributes']; foreach ( $attributes as $attributeKey => $attributeValue ) { $camp_post_custom_v = str_replace ( '[' . $attributeKey . ']', $attributeValue [0] ['data'], $camp_post_custom_v ); } } } $camp_post_custom_v = explode ( '#****#', $camp_post_custom_v ); // NewsPaper theme integration if (($camp_type == 'Youtube' || $camp_type == 'Vimeo') && function_exists ( 'td_bbp_change_avatar_size' ) && ! in_array ( 'OPT_NO_NEWSPAPER', $wp_automatic_options )) { echo '<br>NewsPaper theme found integrating..'; $td_video = array (); $td_video ['td_video'] = $img ['vid_url']; $td_video ['td_last_video'] = $img ['vid_url']; $camp_post_custom_k [] = 'td_post_video'; $camp_post_custom_v [] = $td_video; // format echo '<br>setting post format to Video'; set_post_format ( $id, 'video' ); // custom field } // adding custom fields $in = 0; if (count ( $camp_post_custom_k ) > 0) { foreach ( $camp_post_custom_k as $key ) { if (trim ( $key ) != '') { echo '<br>Setting custom field ' . $key; // correcting serialized arrays if $camp_post_custom_v [$in] is a string and starts with a: and ends with } if ( ! is_array($camp_post_custom_v [$in]) && preg_match ( '!^a:\d*:\{!', $camp_post_custom_v [$in] )) { preg_match_all ( '!s:(\d*):"(.*?)"!', $camp_post_custom_v [$in], $arry_pts ); $s = 0; foreach ( $arry_pts [0] as $single_prt ) { $camp_post_custom_v [$in] = str_replace ( $single_prt, 's:' . strlen ( $arry_pts [2] [$s] ) . ':"' . $arry_pts [2] [$s] . '"', $camp_post_custom_v [$in] ); $s ++; } echo ' altered ' . $s . ' serialized array keys'; } // serialized arrays if (is_serialized ( $camp_post_custom_v [$in] )) $camp_post_custom_v [$in] = unserialize ( $camp_post_custom_v [$in] ); $key_val = $camp_post_custom_v [$in]; if (! is_array ( $key_val ) && stristr ( $key_val, 'rand_' )) { $key_val_clean = str_replace ( array ( '[', ']' ), '', $key_val ); $val_parts = explode ( '_', $key_val_clean ); if (count ( $val_parts ) == 3 && is_numeric ( $val_parts [1] ) && is_numeric ( $val_parts [2] )) { $key_val = rand ( $val_parts [1], $val_parts [2] ); } } if (! is_array ( $key_val ) && stristr ( $key_val, 'formated_date' )) { $key_val = do_shortcode ( $key_val ); } // process gpt3 prompts if found in key_val if key_val is string if (! is_array ( $key_val ) && stristr ( $key_val, '[gpt' )) { $key_val = $this->openai_gpt3_tags_replacement($key_val); } if ($key == 'excerpt') { $my_post = array ( 'ID' => $id, 'post_excerpt' => $key_val ); wp_update_post ( $my_post ); } elseif (stristr ( $key, 'taxonomy_' )) { wp_set_post_terms ( $id, $key_val, str_replace ( 'taxonomy_', '', $key ), true ); }elseif( stristr($key, 'attribute_' ) ){ $attribute_name = str_replace('attribute_', '', $key); $attribute_value = $key_val; wp_automatic_add_product_attribute($id, $attribute_name, $attribute_value); //report echo '<-- Added attribute '.$attribute_name.' with value '.$attribute_value; } elseif (trim ( $key ) == 'woo_gallery' && $camp->camp_post_type == 'product') { echo '<br>Setting gallery from set rule ' . $key; preg_match_all ( '{<img.*? src="(.*?)".*?}s', $key_val, $key_imgs_matches ); $key_imgs_matches = $key_imgs_matches [1]; if (count ( $key_imgs_matches ) > 0) { echo '<-- Found possible ' . count ( $key_imgs_matches ) . ' images'; $attachmentsIDs = array (); $product_imgs = $key_imgs_matches; // first image already attached if (isset ( $attach_id )) { // $attachmentsIDs[] = $attach_id; unset ( $product_imgs [0] ); } // set rest images as attachments foreach ( $product_imgs as $product_img ) { echo '<br>Attaching:' . $product_img; $newAttach = $this->attach_image ( $product_img, $camp_opt, $post_id ); if (is_numeric ( $newAttach ) && $newAttach > 0) { $attachmentsIDs [] = $newAttach; } } if (count ( $attachmentsIDs ) > 0) { $attachmentsIDsStr = implode ( ',', $attachmentsIDs ); add_post_meta ( $id, '_product_image_gallery', $attachmentsIDsStr ); } } else { echo '<-- did not find valid images'; } } else { if (($camp_type == 'Feeds' || $camp_type == 'Single' || $camp_type == 'Multi') && (trim ( $key ) == '_price' || trim ( $key ) == '_sale_price' || trim ( $key ) == '_regular_price')) { preg_match ( '{[\d|\.|,]+}', $key_val, $price_matchs ); $possible_price = reset ( $price_matchs ); // $possible_price = str_replace ( ',', '', $possible_price ); if (trim ( $possible_price ) != '') $key_val = $possible_price; } update_post_meta ( $id, $key, $key_val ); // if is _regular_price and _sale_price is empty set _price to _regular_price if( trim($key) == '_regular_price' && trim($key_val) != '' ){ $sale_price = get_post_meta( $id, '_sale_price', true ); if( trim($sale_price) == '' ){ echo '<br>setting _price to _regular_price'; update_post_meta ( $id, '_price', $key_val ); } } // if is _sale_price and is not empty set the _price to _sale_price if( trim($key) == '_sale_price' && trim($key_val) != '' ){ echo '<br>setting _price to _sale_price'; update_post_meta ( $id, '_price', $key_val ); } } } $in ++; } } // setting post format OPT_FORMAT if (in_array ( 'OPT_FORMAT', $camp_opt )) { echo '<br>setting post format to ' . $camp_general ['cg_post_format']; set_post_format ( $id, stripslashes ( $camp_general ['cg_post_format'] ) ); } elseif (($camp_type == 'Youtube' || $camp_type == 'Vimeo' || $camp_type == 'DailyMotion')) { if ((defined ( 'PARENT_THEME' ) && (PARENT_THEME == 'truemag' || PARENT_THEME == 'newstube')) || class_exists ( 'Cactus_video' )) { echo '<br>setting post format to Video'; set_post_format ( $id, 'video' ); } } elseif (($camp_type == 'Instagram') && stristr ( $abcont, '[embed]' )) { if ((defined ( 'PARENT_THEME' ) && (PARENT_THEME == 'truemag' || PARENT_THEME == 'newstube')) || class_exists ( 'Cactus_video' )) { echo '<br>setting post format to Video'; set_post_format ( $id, 'video' ); } } elseif ($camp_type == 'Facebook' && isset ( $img ['vid_url'] )) { if ((defined ( 'PARENT_THEME' ) && (PARENT_THEME == 'truemag' || PARENT_THEME == 'newstube')) || class_exists ( 'Cactus_video' )) { echo '<br>setting post format to Video'; set_post_format ( $id, 'video' ); } } // publishing the post if (in_array ( 'OPT_DRAFT_PUBLISH', $camp_opt ) && $camp->camp_post_status == 'publish') { echo '<br>Publishing the post now...'; $newUpdatedPostArr ['ID'] = $id; $newUpdatedPostArr ['post_status'] = 'publish'; wp_update_post ( $newUpdatedPostArr ); } if (in_array ( 'OPT_PREVIEW_EDIT', $wp_automatic_options )) { $plink = admin_url ( 'post.php?post=' . $id . '&action=edit' ); if (trim ( $plink ) == '') $plink = get_permalink ( $id ); } else { $plink = get_permalink ( $id ); } $plink = str_replace ( '&', '&', $plink ); $display_title = get_the_title ( $id ); if (trim ( $display_title ) == '') $display_title = '(no title)'; $now = date ( 'Y-m-d H:i:s' ); $now = get_date_from_gmt ( $now ); echo '<br>New Post posted: <a target="_blank" class="new_post_link" time="' . $now . '" href="' . $plink . '">' . $display_title . '</a>'; $this->log ( 'Posted:' . $camp->camp_id, 'New post posted:<a href="' . $plink . '">' . $title_without_emoji . '</a>' ); // clean cached prompts if any delete_cached_prompt_results $this->delete_cached_prompt_results(); // returning the security filter add_filter ( 'content_save_pre', 'wp_filter_post_kses' ); // duplicate cache update if ($this->campDuplicateLinksUpdate == true && ! in_array ( 'OPT_LINK_NOCACHE', $camp_opt )) { $this->campNewDuplicateLinks [$id] = $source_link; update_post_meta ( $camp->camp_id, 'wp_automatic_duplicate_cache', $this->campNewDuplicateLinks ); } exit (); print_r ( $ret ); } // if title } // end function /** * Checks if allowed to call the source or not: compares the call limit with actual previous calls */ function is_allowed_to_call() { if ($this->sourceCallLimit == $this->sourceCallTimes) { echo '<br> We have called the source ' . $this->sourceCallLimit . ' times already will die now and complete next time...'; exit (); } $this->sourceCallTimes ++; } /** * Validate if the post contains the exact match keywords and does not contain the banned words * * @param String $cnt * the content * @param String $ttl * the title * @param String $opt * campaign options * @param String $camp * whole camp record * @param boolean $after * true if after the template */ function validate_exacts(&$abcont, &$title, &$camp_opt, &$camp, $after = false, $camp_general = array()) { // Valid $valid = true; $exact = $camp->camp_post_exact; $execr = ''; $execr = @$camp_general ['cg_camp_post_regex_exact']; $excludeRegex = @$camp_general ['cg_camp_post_regex_exclude']; // Validate exacts if (in_array ( 'OPT_EXACT', $camp_opt )) { // Exact keys // Validating Exact if (trim ( $exact ) != '' && in_array ( 'OPT_EXACT', $camp_opt ) && (! in_array ( 'OPT_EXACT_AFTER', $camp_opt ) && ! $after || in_array ( 'OPT_EXACT_AFTER', $camp_opt ) && $after)) { $valid = false; $exactArr = explode ( "\n", trim ( $exact ) ); foreach ( $exactArr as $wordexact ) { if (trim ( $wordexact != '' )) { if (in_array ( 'OPT_EXACT_STR', $camp_opt )) { if (in_array ( 'OPT_EXACT_TITLE_ONLY', $camp_opt ) && stristr ( html_entity_decode ( $title ), trim ( $wordexact ) )) { echo '<br>Title contains the word : ' . $wordexact; $valid = true; if (! in_array ( 'OPT_EXACT_ALL', $camp_opt )) break; } elseif (! in_array ( 'OPT_EXACT_TITLE_ONLY', $camp_opt ) && (stristr ( html_entity_decode ( $abcont ), trim ( $wordexact ) ) || stristr ( trim ( $wordexact ), html_entity_decode ( $title ) ))) { echo '<br>Content contains the word : ' . $wordexact; $valid = true; if (! in_array ( 'OPT_EXACT_ALL', $camp_opt )) break; } else { echo '<br>Content does not contain the word : ' . $wordexact . ' try another '; $valid = false; if (in_array ( 'OPT_EXACT_ALL', $camp_opt )) break; } // match } else { if (in_array ( 'OPT_EXACT_TITLE_ONLY', $camp_opt ) && preg_match ( '/\b' . trim ( $wordexact ) . '\b/iu', html_entity_decode ( $title ) )) { echo '<br>Title contains the word : ' . $wordexact; $valid = true; if (! in_array ( 'OPT_EXACT_ALL', $camp_opt )) break; } elseif (! in_array ( 'OPT_EXACT_TITLE_ONLY', $camp_opt ) && (preg_match ( '/\b' . trim ( $wordexact ) . '\b/iu', html_entity_decode ( $abcont ) ) || preg_match ( '/\b' . trim ( $wordexact ) . '\b/iu', html_entity_decode ( $title ) ))) { echo '<br>Content contains the word : ' . $wordexact; $valid = true; if (! in_array ( 'OPT_EXACT_ALL', $camp_opt )) break; } else { echo '<br>Content does not contain the word : ' . $wordexact . ' try another '; $valid = false; if (in_array ( 'OPT_EXACT_ALL', $camp_opt )) break; } // match } } // trim wordexact } // foreach exactword } // trim exact } // VALIDATING EXCLUDES if ($valid == true) { $execl = $camp->camp_post_execlude; if (trim ( $execl ) != '' && in_array ( 'OPT_EXECLUDE', $camp_opt ) && (! in_array ( 'OPT_EXECLUDE_AFTER', $camp_opt ) && ! $after || in_array ( 'OPT_EXECLUDE_AFTER', $camp_opt ) && $after)) { // additional excl $execl .= "\n" . $this->generalBannedWords; $execlArr = explode ( "\n", trim ( $execl ) ); if (in_array ( 'OPT_EXECLUDE_TITLE_ONLY', $camp_opt )) { $the_text_to_check = html_entity_decode ( $title ); } else { $the_text_to_check = html_entity_decode ( $title ) . ' ' . html_entity_decode ( $abcont ); } foreach ( $execlArr as $wordex ) { if (trim ( $wordex ) != '') { $wordex = trim ( $wordex ); if (in_array ( 'OPT_EXCLUDE_EXACT_STR', $camp_opt )) { if (stristr ( $the_text_to_check, $wordex )) { echo '<br>Content contains the banned word :' . $wordex . ' getting another '; $valid = false; break; } } elseif (preg_match ( '/\b' . trim ( $wordex ) . '\b/iu', $the_text_to_check )) { echo '<br>Content contains the banned word :' . $wordex . ' getting another '; $valid = false; break; } } // trim wordexec } // foreach wordex } // trim execl } // valid // Before only REGEX check if (! $after) { // validate REGEX if ($valid == true) { if (trim ( $execr ) != '' & in_array ( 'OPT_EXACT_REGEX', $camp_opt )) { $valid = false; $exactArr = explode ( "\n", trim ( $execr ) ); foreach ( $exactArr as $wordexact ) { $wordexact = trim ( $wordexact ); if (trim ( $wordexact != '' )) { if (preg_match ( '{' . $wordexact . '}ius', html_entity_decode ( $abcont ) ) || preg_match ( '{' . trim ( $wordexact ) . '}ius', html_entity_decode ( $title ) )) { echo '<br>REGEX Matched : ' . $wordexact; $valid = true; break; } else { echo '<br>REGEX did not match : ' . $wordexact . ' try another '; } // match } // trim wordexact } // foreach exactword } } // exclude if match a specific REGEX if ($valid == true) { if (trim ( $excludeRegex ) != '' & in_array ( 'OPT_EXCLUDE_REGEX', $camp_opt )) { $excludeArr = explode ( "\n", trim ( $excludeRegex ) ); foreach ( $excludeArr as $wordexact ) { $wordexact = trim ( $wordexact ); if (trim ( $wordexact != '' )) { if (preg_match ( '{' . $wordexact . '}ius', html_entity_decode ( $abcont ) ) || preg_match ( '{' . trim ( $wordexact ) . '}ius', html_entity_decode ( $title ) )) { echo '<br>Exclude REGEX matched : ' . $wordexact; $valid = false; break; } else { echo '<br>Exclude REGEX did not match : ' . $wordexact . ' try another '; } // match } // trim wordexact } // foreach exactword } } } // validate length if ($valid == true && ! $after && isset ( $camp_general ['cg_min_length'] ) && (in_array ( 'OPT_MIN_LENGTH', $camp_opt ) || in_array ( 'OPT_MAX_LENGTH', $camp_opt )) && $camp->camp_type != 'Feeds') { echo '<br>Validating length .....'; $contentTextual = strip_tags ( $abcont ); $contentTextual = str_replace ( ' ', '', $contentTextual ); if (function_exists ( 'mb_strlen' )) { $contentLength = mb_strlen ( $contentTextual ); } else { $contentLength = strlen ( $contentTextual ); } unset ( $contentTextual ); echo ' Content length:' . $contentLength; if (in_array ( 'OPT_MIN_LENGTH', $camp_opt )) { if ($contentLength < $camp_general ['cg_min_length']) { echo '<--Shorter than the minimum(' . $camp_general ['cg_min_length'] . ')... Excluding'; $valid = false; } else { echo '<-- Valid Min length i.e > (' . $camp_general ['cg_min_length'] . ') '; } } if (in_array ( 'OPT_MAX_LENGTH', $camp_opt )) { if ($contentLength > $camp_general ['cg_max_length']) { echo '<--Longer than the maximum( ' . $camp_general ['cg_max_length'] . ' )... Excluding'; $valid = false; } else { echo '<-- Valid Max length i.e < (' . $camp_general ['cg_max_length'] . ') '; } } } return $valid; } /** * Function to validate if criterias applies to the fields or not * if option enabled OPT_CRITERIA_ALL and all criterias are true, return false * if option not enabled OPT_CRITERIA_ALL and any criteria is true, return false * if any criteria is true and, return false * */ function validate_criterias($img, $camp_opt, $camp, $camp_general) { // ini $valid = true; // true because false will mark the whole post as invalid, we want it invalid if any criteria applies only $passing_criteria = 0; // count of passing criteria // required field values $cg_criteria_skip_fields = @$camp_general ['cg_criteria_skip_fields']; $cg_criteria_skip_criterias = @$camp_general ['cg_criteria_skip_criterias']; $cg_criteria_skip_values = @$camp_general ['cg_criteria_skip_values']; $i = 0; foreach ( $cg_criteria_skip_fields as $cg_criteria_skip_field ) { $cg_criteria_skip_field = trim ( str_replace ( array ( '[', ']' ), '', $cg_criteria_skip_field ) ); echo '<br>Checking Field:' . $cg_criteria_skip_field . ' if ' . $cg_criteria_skip_criterias [$i] . ' '; if (isset ( $img [$cg_criteria_skip_field] )) { // validating the field $single_criteria_valid = $this->validate_criteria_single ( $cg_criteria_skip_criterias [$i], $cg_criteria_skip_values [$i], $img [$cg_criteria_skip_field] ); if ($single_criteria_valid) { if ( ! in_array ( 'OPT_CRITERIA_ALL', $camp_opt )) { echo '<-- Criteria applies, skipping the post '; return false; } else { echo '<-- Criteria applies, but all criteria must apply to skip, so continue'; $passing_criteria ++; } } else { //we have a criteria that did not apply echo '<-- Set exclusion criteria did not match'; if (! in_array ( 'OPT_CRITERIA_ALL', $camp_opt )) { //this criteria did not match } else { //this criteria did not match and we need all criteria to match to return false, this post is valid echo '<-- post is valid'; return true; } } } else { echo '<-- Field not found withen returned values...'; } $i ++; } //all criterias were checked now if ( in_array ( 'OPT_CRITERIA_ALL', $camp_opt ) && $passing_criteria >0 ) { //all criteria checked and all match, lets return false i.e skip the post echo '<-- All criteria match, skipping the post '; return false; } return $valid; } /** * Function to validate if criterias applies to the fields or not and must one criteria at least apply otherwise return false */ function validate_criterias_must($img, $camp_opt, $camp, $camp_general) { // ini $valid = true; // start with the post valid, if any criteria did not apply, it will be invaid $checked_criterias = 0; // count of passing criteria // required field values $cg_criteria_skip_fields = @$camp_general ['cg_criteria_skip_fields_must']; $cg_criteria_skip_criterias = @$camp_general ['cg_criteria_skip_criterias_must']; $cg_criteria_skip_values = @$camp_general ['cg_criteria_skip_values_must']; $i = 0; foreach ( $cg_criteria_skip_fields as $cg_criteria_skip_field ) { $cg_criteria_skip_field = trim ( str_replace ( array ( '[', ']' ), '', $cg_criteria_skip_field ) ); echo '<br>Checking Field:' . $cg_criteria_skip_field . ' if ' . $cg_criteria_skip_criterias [$i] . ' '; if (isset ( $img [$cg_criteria_skip_field] )) { // validating the field $single_criteria_valid = $this->validate_criteria_single ( $cg_criteria_skip_criterias [$i], $cg_criteria_skip_values [$i], $img [$cg_criteria_skip_field] ); if ($single_criteria_valid) { //this criteria matched //if OPT_CRITERIA_MUST_ANY is set, return true if ( in_array ( 'OPT_CRITERIA_MUST_ANY', $camp_opt )) { echo '<-- Criteria applies, nice approve this post'; return true; } else { echo '<-- Criteria applies, but all criteria must apply to approve, so continue'; } } else { //we have a criteria that did not apply if( in_array ( 'OPT_CRITERIA_MUST_ANY', $camp_opt )) { //this criteria failed but we need to check all other criteria to see if any of them applies echo '<-- Set must exist criteria did not match.. but we need to check all other criteria to see if any of them applies'; $checked_criterias ++; } else { //this criteria did not match and we need all criteria to match to return true, this post is invalid echo '<-- Set must exist criteria did not match.. skipping the post'; return false; } } } else { echo '<-- Field not found withen returned values...'; } $i ++; } if( in_array ( 'OPT_CRITERIA_MUST_ANY', $camp_opt )) { //if checked_criterias >0 return false as there are checked criterias and none has applied if($checked_criterias >0){ echo '<-- No criteria applied, skipping the post'; return false; } }else{ return $valid; } } /** * Checks a single field value for a specific criteia, return true if applies and false if not * * @param unknown $cg_criteria_skip_criteria * @param unknown $cg_criteria_skip_value * @param unknown $cnt */ function validate_criteria_single($cg_criteria_skip_criteria, $cg_criteria_skip_value, $cnt) { $criteria_applies = false; // ini $first_print = true; $cg_criteria_skip_value_parts = explode ( "\n", $cg_criteria_skip_value ); $cg_criteria_skip_value_parts = array_filter ( $cg_criteria_skip_value_parts ); //if empty array, reset it with an array containing an empty space, this means user wanted the field to be empty if (count ( $cg_criteria_skip_value_parts ) == 0) { $cg_criteria_skip_value_parts = array ( '' ); } foreach ( $cg_criteria_skip_value_parts as $cg_criteria_skip_value_part ) { if (! $first_print) { echo ','; } else { $first_print = false; } echo ' ' . $cg_criteria_skip_value_part . ' '; if ($cg_criteria_skip_criteria == '==') { // equation if (trim ( $cnt ) == trim ( $cg_criteria_skip_value_part )) { $criteria_applies = true; } } elseif ($cg_criteria_skip_criteria == 'contains') { if (stristr ( $cnt, $cg_criteria_skip_value_part )) { $criteria_applies = true; } } elseif ($cg_criteria_skip_criteria == 'greater') { if (is_numeric ( trim ( $cnt ) ) && is_numeric ( trim ( $cg_criteria_skip_value_part ) )) { if (trim ( $cnt ) > trim ( $cg_criteria_skip_value_part )) { $criteria_applies = true; } else { echo '<-- not greater'; } } else { echo ' (Not valid to compare, not numeric values)'; } } elseif ($cg_criteria_skip_criteria == 'less') { if (is_numeric ( trim ( $cnt ) ) && is_numeric ( trim ( $cg_criteria_skip_value_part ) )) { if (trim ( $cnt ) < trim ( $cg_criteria_skip_value_part )) { $criteria_applies = true; } else { echo '<-- not less'; } } else { echo ' (Not valid to compare, not numeric values)'; } } elseif ($cg_criteria_skip_criteria == 'length_greater') { // numeric check if (is_numeric ( trim ( $cg_criteria_skip_value_part ) )) { $length = strlen ( $cnt ); if ($length > trim ( $cg_criteria_skip_value_part )) { $criteria_applies = true; } else { echo '<-- length(' . $length . ') is not greater'; } } else { echo ' (Compare value is not a valid number )'; } } elseif ($cg_criteria_skip_criteria == 'length_less') { // numeric check if (is_numeric ( trim ( $cg_criteria_skip_value_part ) )) { $length = strlen ( $cnt ); if ($length < trim ( $cg_criteria_skip_value_part )) { $criteria_applies = true; } else { echo '<-- length(' . $length . ') is not less'; } } else { echo ' (Compare value is not a valid number )'; } } } return $criteria_applies; } function fire_proxy() { echo '<br>Proxy Check Fired'; $proxies = get_option ( 'wp_automatic_proxy' ); if (stristr ( $proxies, ':' )) { echo '<br>Proxy Found lets try'; // listing all proxies $proxyarr = explode ( "\n", $proxies ); foreach ( $proxyarr as $proxy ) { if (trim ( $proxy ) != '') { $auth = ''; if (substr_count ( $proxy, ':' ) == 3) { echo '<br>Private proxy found .. using authentication'; $proxy_parts = explode ( ':', $proxy ); $proxy = $proxy_parts [0] . ':' . $proxy_parts [1]; $auth = $proxy_parts [2] . ':' . $proxy_parts [3]; curl_setopt ( $this->ch, CURLOPT_PROXY, trim ( $proxy ) ); curl_setopt ( $this->ch, CURLOPT_PROXYUSERPWD, trim ( $auth ) ); } else { curl_setopt ( $this->ch, CURLOPT_PROXY, trim ( $proxy ) ); } echo "<br>Trying using proxy :$proxy"; curl_setopt ( $this->ch, CURLOPT_HTTPPROXYTUNNEL, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, 'www.bing.com/search?count=50&intlF=1&mkt=En-us&first=0&q=test' ); // curl_setopt($this->ch, CURLOPT_URL, 'http://whatismyipaddress.com/'); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); if (trim ( $x ) != '') { echo '<br>Curl Proxy Error:' . curl_error ( $this->ch ); } else { if (stristr ( $exec, 'It appears that you are using a Proxy' ) || stristr ( $exec, 'excessive amount of traffic' )) { echo '<br>Proxy working but captcha met let s skip it'; } elseif (stristr ( $exec, 'microsoft.com' )) { // succsfull connection here // echo curl_exec($this->ch); // reordering the proxy $proxies = str_replace ( ' ', '', $proxies ); if (trim ( $auth ) != '') $proxy = $proxy . ':' . $auth; $proxies = str_replace ( $proxy, '', $proxies ); $proxies = str_replace ( "\n\n", "\n", $proxies ); $proxies = "$proxy\n$proxies"; // echo $proxies; update_option ( 'wp_automatic_proxy', $proxies ); echo '<br>Connected successfully using this proxy '; $this->isProxified = true; return true; } else { echo '<br>Proxy Reply:' . $exec; } } } } // all proxies not working let's call proxyfrog for new list // no proxyfrog list $this->unproxyify (); // proxifing the connection } else { echo '..No proxies'; } } /* * ---* Clear proxy function --- */ function unproxyify() { // clean the connection unset ( $this->ch ); // curl ini $this->ch = curl_init (); curl_setopt ( $this->ch, CURLOPT_HEADER, 0 ); curl_setopt ( $this->ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $this->ch, CURLOPT_CONNECTTIMEOUT, 20 ); curl_setopt ( $this->ch, CURLOPT_TIMEOUT, 30 ); curl_setopt ( $this->ch, CURLOPT_REFERER, 'http://www.google.com' ); curl_setopt ( $this->ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8' ); curl_setopt ( $this->ch, CURLOPT_MAXREDIRS, 5 ); // Good leeway for redirections. curl_setopt ( $this->ch, CURLOPT_FOLLOWLOCATION, 1 ); // Many login forms redirect at least once. // curl_setopt ( $this->ch, CURLOPT_COOKIEJAR, "cookie.txt" ); } /* * ---* Spin function that calls TBS --- */ function spin($html) { $url = 'http://thebestspinner.com/api.php'; // $testmethod = 'identifySynonyms'; $testmethod = 'replaceEveryonesFavorites'; // Build the data array for authenticating. $data = array (); $data ['action'] = 'authenticate'; $data ['format'] = 'php'; // You can also specify 'xml' as the format. // The user credentials should change for each UAW user with a TBS account. $tbs_username = get_option ( 'wp_automatic_tbs', '' ); // "gigoftheday@gmail.com"; // Enter your The Best Spinner's Email ID $tbs_password = get_option ( 'wp_automatic_tbs_p', '' ); // "nd8da759a40a551b9aafdc87a1d902f3d"; // Enter your The Best Spinner's Password $tbs_protected = get_option ( 'wp_automatic_tbs_protected', '' ); if (trim ( $tbs_protected ) != '') { $tbs_protected = explode ( "\n", $tbs_protected ); $tbs_protected = array_filter ( $tbs_protected ); $tbs_protected = array_map ( 'trim', $tbs_protected ); $tbs_protected = array_filter ( $tbs_protected ); $tbs_protected = implode ( ',', $tbs_protected ); } // add , if not exists if (! stristr ( $tbs_protected, ',' )) { $tbs_protected = $tbs_protected . ','; } // add ad_1, ad_2 , numbers $tbs_protected = $tbs_protected . 'ad_1,ad_2,0,1,2,3,4,5,6,7,8,9,'; if (trim ( $tbs_username ) == '' || trim ( $tbs_password ) == '') { // $this->log ( 'Info', 'No BTS account found , it is highly recommended ' ); return $html; } $data ['username'] = $tbs_username; $data ['password'] = $tbs_password; // Authenticate and get back the session id. // You only need to authenticate once per session. // A session is good for 24 hours. $exec_login = $this->curl_post ( $url, $data, $info ); $output = unserialize ( $exec_login ); if ($output ['success'] == 'true') { $this->log ( 'TBS', "TBS Login success" ); echo '<br>TBS Login success'; // Success. $session = $output ['session']; // Build the data array for the example. $data = array (); $data ['protectedterms'] = $tbs_protected; $data ['session'] = $session; $data ['format'] = 'php'; // You can also specify 'xml' as the format. // instantiate original html $newhtml = $html; // replace nospins with astrics preg_match_all ( '{\[nospin.*?\/nospin\]}s', $html, $nospins ); $nospins = $nospins [0]; // shortcodes preg_match_all ( '{\[.*?]}s', $html, $shortcodes ); $shortcodes = $shortcodes [0]; // html preg_match_all ( "/<[^<>]+>/is", $html, $matches, PREG_PATTERN_ORDER ); $htmlfounds = $matches [0]; // js preg_match_all ( "/<script.*?<\/script>/is", $html, $matches3, PREG_PATTERN_ORDER ); $js = $matches3 [0]; // numbers preg_match_all ( "{\d\d+}is", $html, $numMatches ); $numFounds = ($numMatches [0]); $numFounds = array_filter ( array_unique ( $numFounds ) ); usort ( $numFounds, 'wp_automatic_sort' ); $nospins = array_merge ( $nospins, $shortcodes, $htmlfounds, $js, $numFounds, array ( 9, 8, 7, 6, 5, 4, 3, 2, 1 ) ); // remove empty and duplicate $nospins = array_filter ( array_unique ( $nospins ) ); // replace nospin parts with astrics $i = 1; foreach ( $nospins as $nospin ) { $newhtml = str_replace ( $nospin, '[' . str_repeat ( '*', $i ) . ']', $newhtml ); $i ++; } $data ['text'] = (html_entity_decode ( $newhtml )); // $data ['text'] = 'test <br> word <a href="http://onetow.com">http://onetow.com</a> '; $data ['action'] = $testmethod; $data ['maxsyns'] = '100'; // The number of synonyms per term. if ($testmethod == 'replaceEveryonesFavorites') { // Add a quality score for this method. $data ['quality'] = '1'; } // Post to API and get back results. $output = $this->curl_post ( $url, $data, $info ); if (trim ( $output ) == '') { $this->log ( 'TBS', "TBS Empty reply... we did not get a valid reply" ); } $output = unserialize ( $output ); // Show results. // echo "<p><b>Method:</b><br>$testmethod</p>"; // echo "<p><b>Text:</b><br>$data[text]</p>"; if ($output ['success'] == 'true') { $this->log ( 'TBS', "TBS Successfully spinned the content" ); // replace the astrics with nospin tags if (count ( $nospins ) > 0) { $i = 1; foreach ( $nospins as $nospin ) { $output ['output'] = str_replace ( '[' . str_repeat ( '*', $i ) . ']', $nospin, $output ['output'] ); $i ++; } } echo '<br>TBS Successfully spinned the content'; return $output ['output']; } else { $this->log ( 'error', "TBS Returned an error:$output[error]" ); echo "TBS Returned an error:$output[error]"; return $html; } } else { // There were errors. echo "<br>TBS login did not work returned an error : $output[error]"; $this->log ( 'error', "TBS login did not work returned an error : $output[error]" ); return $html; } } // end function /* * gtranslte function */ function gtranslate($title, $content, $from, $to, $translationMethod = 'microsoftTranslator') { if ($from == $to) { echo '<br>Translation to langauge can not be the same as translation from language. skipping this translation'; return array ( $title, $content ); } /* * $contains_bracket = stristr($content, '(' ) ? true : false ; * $content = str_replace( '[' , '(' , $content); * $content = str_replace( ']' , ')' , $content); */ // Verify API data if ($translationMethod == 'microsoftTranslator') { // $wp_automatic_mt_secret = trim(get_option('wp_automatic_mt_secret','')); $wp_automatic_mt_id = trim ( get_option ( 'wp_automatic_mt_key', '' ) ); $wp_automatic_mt_region = trim ( get_option ( 'wp_automatic_mt_region', '' ) ); if (trim ( $wp_automatic_mt_id ) == '') { echo '<br><span style="color:red">Microsoft translator settings required. Visit the plugin settings and set it.</span>'; return array ( $title, $content ); } $titleSeparator = '[19459000]'; } elseif ($translationMethod == 'yandexTranslator') { // wp_automatic_yt_key $wp_automatic_yt_key = trim ( get_option ( 'wp_automatic_yt_key', '' ) ); if (trim ( $wp_automatic_yt_key ) == '') { echo '<br><span style="color:red">Yandex translator API key is required. Visit the plugin settings and set it.</span>'; return array ( $title, $content ); } $titleSeparator = '[19459000]'; } elseif ($translationMethod == 'deeplTranslator') { // wp_automatic_dl_key $wp_automatic_dl_key = trim ( get_option ( 'wp_automatic_dl_key', '' ) ); if (trim ( $wp_automatic_dl_key ) == '') { echo '<br><span style="color:red">Deepl PRO translator API key is required. Visit the plugin settings and set it.</span>'; return array ( $title, $content ); } $titleSeparator = '[19459000]'; } elseif ($translationMethod == 'googleTranslator' && ! function_exists ( 'mb_detect_encoding' )) { echo '<br><span style="color:red">Translation using Gtranslate will not wrok, you must install PHP mbstring module.</span>'; return array ( $title, $content ); } else { $titleSeparator = '##########'; $titleSeparator = "\n[19459000]"; } // Fix Norwegian language Translation if ($from == 'nor') $from = 'no'; if ($to == 'nor') $to = 'no'; // Report Translate echo '<br>Translating from ' . $from . ' to ' . $to . ' using ' . $translationMethod; /* * $title = 'welcome to Egypt'; * $content= 'it is a good place'; */ //Square bracket content rewrite if(in_array('OPT_TRANSLATE_SQUARE', $this->camp_opt)){ $title = str_replace('[' ,'(' , $title); $title = str_replace(']' ,')' , $title); $content = str_replace('[' , '(' ,$content); $content = str_replace(']' , ')' ,$content); //protect embed shortcode by replacing (embed) by [embed] and (/embed) by [/embed] $content = str_replace('(embed)' , '[embed]' ,$content); $content = str_replace('(/embed)' , '[/embed]' ,$content); } // Concat title and content in one text $text = $title . $titleSeparator . $content; // decode html for chars like € removed for images containing html encoded tags a-image-description="<p>How to Style 8 Stitch Fix Rom // $text = html_entity_decode ( $text ); // $text = file_get_contents( dirname(__FILE__) . '/test.txt'); // $text = 'welcome to egypt'; if ($this->debug == true) echo "\n\n--- Translation text-------\n" . $text; // scripts preg_match_all ( '{<script.*?script>}s', $text, $script_matchs ); $script_matchs = $script_matchs [0]; // pre and code tags preg_match_all ( '{<pre.*?/pre>}s', $text, $pre_matchs ); $pre_matchs = $pre_matchs [0]; preg_match_all ( '{<code.*?/code>}s', $text, $code_matchs ); $code_matchs = $code_matchs [0]; // STRIP html and links preg_match_all ( "/<[^<>]+>/is", $text, $matches, PREG_PATTERN_ORDER ); $htmlfounds = array_filter ( array_unique ( $matches [0] ) ); $htmlfounds = array_merge ( $script_matchs, $pre_matchs, $code_matchs, $htmlfounds ); if ($this->debug == true) { echo "\n\n--- Html finds raw-------\n"; print_r ( $htmlfounds ); } $htmlfounds [] = '"'; // Fix alt tags $imgFoundsSeparated = array (); $new_imgFoundsSeparated = array (); $altSeparator = ''; $colonSeparator = ''; foreach ( $htmlfounds as $key => $currentFound ) { if (stristr ( $currentFound, '<img' ) && stristr ( $currentFound, 'alt' ) && ! stristr ( $currentFound, 'alt=""' )) { $altSeparator = ''; $colonSeparator = ''; if (stristr ( $currentFound, 'alt="' )) { $altSeparator = 'alt="'; $colonSeparator = '"'; } elseif (stristr ( $currentFound, 'alt = "' )) { $altSeparator = 'alt = "'; $colonSeparator = '"'; } elseif (stristr ( $currentFound, 'alt ="' )) { $altSeparator = 'alt ="'; $colonSeparator = '"'; } elseif (stristr ( $currentFound, 'alt= "' )) { $altSeparator = 'alt= "'; $colonSeparator = '"'; } elseif (stristr ( $currentFound, 'alt=\'' )) { $altSeparator = 'alt=\''; $colonSeparator = '\''; } elseif (stristr ( $currentFound, 'alt = \'' )) { $altSeparator = 'alt = \''; $colonSeparator = '\''; } elseif (stristr ( $currentFound, 'alt= \'' )) { $altSeparator = 'alt= \''; $colonSeparator = '\''; } elseif (stristr ( $currentFound, 'alt =\'' )) { $altSeparator = 'alt =\''; $colonSeparator = '\''; } if (trim ( $altSeparator ) != '') { $currentFoundParts = explode ( $altSeparator, $currentFound ); // post alt $preAlt = $currentFoundParts [1]; $preAltParts = explode ( $colonSeparator, $preAlt ); $altText = $preAltParts [0]; if (trim ( $altText ) != '') { unset ( $preAltParts [0] ); $past_alt_text = implode ( $colonSeparator, $preAltParts ); // before alt text part $imgFoundsSeparated [] = $currentFoundParts [0] . $altSeparator; // after alt text $imgFoundsSeparated [] = $colonSeparator . $past_alt_text; // str_replace ( $altText, '', $currentFoundParts [1] ); // $imgFoundsSeparated[] = $colonSeparator.implode($colonSeparator, $preAltParts); /* * echo ' ImageFound:'.$in.' '.$currentFound; * print_r($currentFoundParts); * print_r($imgFoundsSeparated); */ $htmlfounds [$key] = ''; } } } } // title tag separation $title_separator = str_replace ( 'alt', 'title', $altSeparator ); foreach ( $imgFoundsSeparated as $img_part ) { if (stristr ( $img_part, ' title' )) { $img_part_parts = explode ( $title_separator, $img_part ); // before title text $pre_title_part = $img_part_parts [0] . $title_separator; $post_title_parts = explode ( $colonSeparator, $img_part_parts [1] ); $found_title = $post_title_parts [0]; unset ( $post_title_parts [0] ); $past_title_text = implode ( $colonSeparator, $post_title_parts ); // after title text $post_title_part = $colonSeparator . $past_title_text; // str_replace ( $found_title, '', $img_part_parts [1] ); $new_imgFoundsSeparated [] = $pre_title_part; $new_imgFoundsSeparated [] = $post_title_part; } else { $new_imgFoundsSeparated [] = $img_part; } } if (count ( $new_imgFoundsSeparated ) != 0) { $htmlfounds = array_merge ( $htmlfounds, $new_imgFoundsSeparated ); } // <!-- <br> --> preg_match_all ( "/<\!--.*?-->/is", $text, $matches2, PREG_PATTERN_ORDER ); $newhtmlfounds = $matches2 [0]; // strip shortcodes preg_match_all ( "/\[.*?\]/is", $text, $matches3, PREG_PATTERN_ORDER ); $shortcodesfounds = $matches3 [0]; // protected terms $wp_automatic_tra_stop = get_option ( 'wp_automatic_tra_stop', '' ); $protected_terms = array (); if (trim ( $wp_automatic_tra_stop ) != '') { $protected_terms_arr = explode ( "\n", trim ( $wp_automatic_tra_stop ) ); $protected_terms = array_filter ( $protected_terms_arr ); $protected_terms = array_map ( 'trim', $protected_terms ); } $htmlfounds = array_merge ( $htmlfounds, $newhtmlfounds, $shortcodesfounds ); // clean title separator & empties $in = 0; $cleanHtmlFounds = array (); foreach ( $htmlfounds as $htmlfound ) { if ($htmlfound == '[19459000]') { } elseif (trim ( $htmlfound ) == '') { } else { $cleanHtmlFounds [] = $htmlfound; } } $htmlfounds = array_filter ( $cleanHtmlFounds ); // sort usort ( $htmlfounds, 'wp_automatic_sort' ); // Replace founds by numbers $start = 19459001; foreach ( $htmlfounds as $htmlfound ) { $text = str_replace ( $htmlfound, '[' . $start . ']', $text ); $start ++; } // protected foreach ( $protected_terms as $exword ) { if (trim ( $exword ) != '') { $text = preg_replace ( '/\b' . preg_quote ( trim ( $exword ), '/' ) . '\b/u', '[' . $start . ']', $text ); $start ++; } } // .{ replace with . { $text = str_replace ( '.{', '. {', $text ); // group consequent matchs [19459003][19459003][19459004][19459003] preg_match_all ( '!(?:\[1945\d*\][\s]*){2,}!s', $text, $conseqMatchs ); if ($this->debug == true) { echo "\n\n--- Html finds-------\n"; print_r ( $htmlfounds ); echo "\n\n----- Html before consequent replacements-----\n" . $text; echo "\n\n--- Consequent masks finds-------\n"; print_r ( $conseqMatchs ); } // replacing consequents $startConseq = 19659001; foreach ( $conseqMatchs [0] as $conseqMatch ) { $text = preg_replace ( '{' . preg_quote ( trim ( $conseqMatch ) ) . '}', '[' . $startConseq . ']', $text, 1 ); $startConseq ++; } // copy of the sent masks preg_match_all ( '{\[.*?\]}', $text, $pre_tags_matches ); $pre_tags_matches = ($pre_tags_matches [0]); // copy of sent masks with spaces before and after preg_match_all ( '{\s*\[.*?\]\s*}u', $text, $pre_tags_matches_s ); $pre_tags_matches_s = ($pre_tags_matches_s [0]); if ($this->debug == true) { echo "\n\n----- Content to translate without additional lins-----\n" . $text; } // each tag in a new line $text = str_replace ( '[', "\n\n[", $text ); $text = str_replace ( ']', "]\n\n", $text ); if ($this->debug == true) { echo "\n\n----- Content to translate with additional lins-----\n" . $text; } // Check Translation Method and use it if ($translationMethod == 'googleTranslator') { try { // Google Translator Class require_once 'inc/translator.Google.php'; // curl ini $ch = curl_init (); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 ); curl_setopt ( $ch, CURLOPT_TIMEOUT, 20 ); curl_setopt ( $ch, CURLOPT_REFERER, 'http://www.bing.com/' ); curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8' ); curl_setopt ( $ch, CURLOPT_MAXREDIRS, 5 ); // Good leeway for redirections. curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 ); // Many login forms redirect at least once. curl_setopt ( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); // Google Translator Object $GoogleTranslator = new GoogleTranslator ( $ch ); // Translate Method $translated = $GoogleTranslator->translateText ( $text, $from, $to ); // same language error The page you have attempted to translate is already if (stristr ( $translated, 'The page you have attempted to translate is already' )) { echo '<br>Google refused to translate and tells that the article is in the same laguage'; $translated = $text; } // fix html entities if (stristr ( $translated, ';' )) $translated = htmlspecialchars_decode ( $translated, ENT_QUOTES ); if ($this->debug == true) { echo "\n\n\n\n--- Returned translation-------\n" . $translated . "\n\n\n"; } } catch ( Exception $e ) { echo '<br>Translate Exception:' . $e->getMessage (); $this->translationSuccess = false; return array ( $title, $content ); } } elseif ($translationMethod == 'yandexTranslator') { try { // Yandex Translator Class require_once 'inc/translator.Yandex.php'; // Yandex Translator Object $YandexTranslator = new YandexTranslator ( $this->ch, $wp_automatic_yt_key ); // Translate Method $translated = $YandexTranslator->translateText ( $text, $from, $to ); if ($this->debug == true) { echo "\n\n\n\n--- Returned translation-------\n" . $translated . "\n\n\n"; } } catch ( Exception $e ) { echo 'Exception:' . $e->getMessage (); $this->translationSuccess = false; return array ( $title, $content ); } } elseif ($translationMethod == 'deeplTranslator') { try { // Deepl Translator Class require_once 'inc/translator.Deepl.php'; // Yandex Translator Object $DeeplTranslator = new DeeplTranslator ( $this->ch, $wp_automatic_dl_key ); $wp_automatic_options = get_option ( 'wp_automatic_options', array () ); // free or not if (in_array ( 'OPT_DEEPL_FREE', $wp_automatic_options )) { $DeeplTranslator->free = true; echo '<br> Free Deepl Translator used...'; } // formal or not // free or not if (in_array ( 'OPT_DEEPL_FORMAL', $wp_automatic_options )) { $DeeplTranslator->fomality = 'more'; echo 'Formality:more'; } elseif (in_array ( 'OPT_DEEPL_NFORMAL', $wp_automatic_options )) { $DeeplTranslator->fomality = 'less'; echo 'Formality:less'; } // Translate Method $translated = $DeeplTranslator->translateText ( $text, $from, $to ); if ($this->debug == true) { echo "\n\n\n\n--- Returned translation-------\n" . $translated . "\n\n\n"; } } catch ( Exception $e ) { echo 'Exception:' . $e->getMessage (); $this->translationSuccess = false; return array ( $title, $content ); } } else { // Translating using Microsoft translator require_once 'inc/translator.Microsoft.php'; $MicrosoftTranslator = new MicrosoftTranslator ( $this->ch ); try { // Generate access token $accessToken = $MicrosoftTranslator->getToken ( $wp_automatic_mt_id, $wp_automatic_mt_region ); echo '<br>Translated text chars: ' . $this->chars_count ( $text ); $translated = $MicrosoftTranslator->translateWrap ( $text, $from, $to ); } catch ( Exception $e ) { echo '<br>Translation error:' . $e->getMessage (); $this->translationSuccess = false; return array ( $title, $content ); } } // Fix broken ] 19459 $translated = preg_replace ( '{]\s*?1945}', '][1945', $translated ); // Fix broken Add Comment 19459012] $translated = preg_replace ( '{ 19459(\d*?)]}', ' [19459$1]', $translated ); // Fix [[1945 $translated = str_replace ( '[ [1945', '[1945', $translated ); // Fix ], [ $translated = str_replace ( '], ', ']', $translated ); // file_put_contents( dirname(__FILE__) .'/test.txt' , $translated); // get all brackets preg_match_all ( '{\[.*?\]}', $translated, $bracket_matchs ); $bracket_matchs = $bracket_matchs [0]; foreach ( $bracket_matchs as $single_bracket ) { if (stristr ( $single_bracket, '1' ) && stristr ( $single_bracket, '9' )) { $single_bracket_clean = str_replace ( array ( ',', ' ' ), '', $single_bracket ); $translated = str_replace ( $single_bracket, $single_bracket_clean, $translated ); } } // copy of the returned masks [numbers] preg_match_all ( '{\[\d*?\]}', $translated, $post_tags_matches ); $post_tags_matches = ($post_tags_matches [0]); if ($this->debug == true) { echo "\n\n\n\n------ Pre translation and post tags-------"; print_r ( $pre_tags_matches ); print_r ( $pre_tags_matches_s ); echo "\n\n\n\n------ Post translation and post tags-------"; print_r ( $post_tags_matches ); } // validate returned tags if (count ( $pre_tags_matches ) == count ( $post_tags_matches )) { if ($pre_tags_matches !== $post_tags_matches) { $i = 0; foreach ( $post_tags_matches as $post_tags_match ) { $translated = preg_replace ( '{' . preg_quote ( trim ( $post_tags_match ) ) . '}', '[' . $i . ']', $translated, 1 ); $i ++; } if ($this->debug == true) { echo "\n\n\n\n-----Translated after replacing each tag with index-------"; echo $translated; } // replacing index tags with real pre translation tags $i = 0; foreach ( $pre_tags_matches as $pre_tags_match ) { $translated = str_replace ( '[' . $i . ']', $pre_tags_match, $translated ); $i ++; } } } // each tag in a new line restoration $translated = str_replace ( "\n\n[", '[', $translated ); $translated = str_replace ( "]\n\n", ']', $translated ); // resotring spaces before and after tags $i = 0; foreach ( $pre_tags_matches_s as $pre_tags_match ) { $pre_tags_match_h = htmlentities ( $pre_tags_match ); if (stristr ( $pre_tags_match_h, ' ' )) { $pre_tags_match = str_replace ( ' ', ' ', $pre_tags_match_h ); } $translated = preg_replace ( '{' . preg_quote ( trim ( $pre_tags_match ) ) . '}', "[$i]", $translated, 1 ); $i ++; } // remove all spaces before and after current tags $translated = preg_replace ( '{\s*\[}u', '[', $translated ); $translated = preg_replace ( '{\]\s*}u', ']', $translated ); $i = 0; foreach ( $pre_tags_matches_s as $pre_tags_match ) { // fix $pre_tags_match_h = htmlentities ( $pre_tags_match ); if (stristr ( $pre_tags_match_h, ' ' )) { $pre_tags_match = str_replace ( ' ', ' ', $pre_tags_match_h ); } $translated = preg_replace ( '{' . preg_quote ( "[$i]" ) . '}', $pre_tags_match, $translated, 1 ); $i ++; } if ($this->debug == true) { echo "\n\n\n\n--- --- Fixed translation-------\n"; print_r ( $translated ); } // restore consquent masks $startConseq = 19659001; foreach ( $conseqMatchs [0] as $conseqMatch ) { $translated = str_replace ( '[' . $startConseq . ']', $conseqMatch, $translated ); $startConseq ++; } // Grab all replacements with ** preg_match_all ( '!\[.*?\]!', $translated, $brackets ); $brackets = $brackets [0]; $brackets = array_unique ( $brackets ); foreach ( $brackets as $bracket ) { if (stristr ( $bracket, '19' )) { $corrrect_bracket = str_replace ( ' ', '', $bracket ); $corrrect_bracket = str_replace ( '.', '', $corrrect_bracket ); $corrrect_bracket = str_replace ( ',', '', $corrrect_bracket ); $translated = str_replace ( $bracket, $corrrect_bracket, $translated ); } } if ($this->debug == true) { echo "\n\n\n\n--- --- Fixed translation consequests decoded-------\n"; print_r ( $translated ); } // check if successful translation contains *** if (stristr ( $translated, trim ( $titleSeparator ) ) && count ( $pre_tags_matches ) == count ( $post_tags_matches )) { $this->translationSuccess = true; // restore html tags $start = 19459001; foreach ( $htmlfounds as $htmlfound ) { $translated = str_replace ( '[' . $start . ']', $htmlfound, $translated ); $start ++; } // restore excludes foreach ( $protected_terms as $htmlfound ) { $translated = str_replace ( '[' . $start . ']', $htmlfound, $translated ); $start ++; } if ($this->debug == true) { echo "\n\n\n\n--- --- Final translation-------\n"; print_r ( $translated ); } $contents = explode ( trim ( $titleSeparator ), $translated ); $title = $contents [0]; $content = $contents [1]; } else { $this->translationSuccess = false; echo '<br>Translation failed '; if (! stristr ( $translated, trim ( $titleSeparator ) )) { echo ' Separator we added between title and content went missing'; } if (! stristr ( $translated, trim ( $titleSeparator ) )) { echo ' Separator we added between title and content went missing'; } if (count ( $pre_tags_matches ) != count ( $post_tags_matches )) { echo ' Sent ' . count ( $pre_tags_matches ) . ' tags and got ' . count ( $post_tags_matches ); } } /* * if($contains_bracket == false){ * $content = str_replace('(','[',$content); * $content = str_replace(')',']',$content); * } */ return array ( $title, $content ); } function curl_post($url, $data, &$info) { $ch = curl_init (); curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 ); curl_setopt ( $ch, CURLOPT_TIMEOUT, 20 ); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_POST, true ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $this->curl_postData ( $data ) ); curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, true ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_REFERER, $url ); $html = trim ( curl_exec ( $ch ) ); print_r ( curl_error ( $ch ) ); return $html; } function curl_postData($data) { $fdata = ""; foreach ( $data as $key => $val ) { $fdata .= "$key=" . urlencode ( $val ) . "&"; } return $fdata; } /* * ---* update cb categories --- */ function update_categories() { // Get $x = 'error'; while ( trim ( $x ) != '' ) { $url = 'http://www.clickbank.com/advancedMarketplaceSearch.htm'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $url ) ); $exec = curl_exec ( $this->ch ); echo $x = curl_error ( $this->ch ); } if (stristr ( $exec, '<option value="">- All categories -</option>' )) { echo '<br>categories found'; preg_match_all ( "{>- All categories -</option>((.|\s)*?)</select>}", $exec, $matches, PREG_PATTERN_ORDER ); $res = $matches [0]; $cats = $res [0]; // extracting single parent categories [<option value="1510">Betting Systems</option>] preg_match_all ( "{<option value=\"(.*?)\">(.*?)</option>}", $cats, $matches, PREG_PATTERN_ORDER ); $paretcats_ids = $matches [1]; $paretcats_names = $matches [2]; // delete current records if (count ( $paretcats_names ) > 0) { $query = "delete from {$this->wp_prefix}automatic_categories "; $this->db->query ( $query ); } // adding parent categories $i = 0; foreach ( $paretcats_ids as $parentcat_id ) { $parentcat_name = $paretcats_names [$i]; // inserting cats $query = "insert into {$this->wp_prefix}automatic_categories (cat_id , cat_name) values ('$parentcat_id','$parentcat_name')"; $this->db->query ( $query ); $i ++; } echo '<br>Parent Categories added:' . $i; // extracting subcategories /* * <option value="1265" parent="1253" path="Arts & Entertainment » Architecture"> Architecture </option> */ // echo $exec; // exit; preg_match_all ( "{<option value=\"(.*?)\" parent=\"(.*?)\"(.|\s)*?>((.|\s)*?)</option>}", $exec, $matches, PREG_PATTERN_ORDER ); $subcats_ids = $matches [1]; $subcats_parents = $matches [2]; $subcats_names = $matches [4]; $i = 0; foreach ( $subcats_ids as $subcats_id ) { $subcats_names [$i] = trim ( $subcats_names [$i] ); $subcats_parents [$i] = trim ( $subcats_parents [$i] ); $query = "insert into {$this->wp_prefix}automatic_categories(cat_id,cat_parent,cat_name) values('$subcats_id','$subcats_parents[$i]','$subcats_names[$i]')"; $this->db->query ( $query ); $i ++; } echo '<br>Sub Categories added ' . $i; // print_r($matches); exit (); $res = $matches [2]; $form = $res [0]; preg_match_all ( "{<option value=\"(.*?)\" parent=\"(.*?)\"}", $exec, $matches, PREG_PATTERN_ORDER ); print_r ( $matches ); // print_r($matches); exit (); $res = $matches [0]; $cats = $res [0]; } } /* * ---* Proxy Frog Integration --- */ function alb_proxyfrog() { // get the current list $proxies = get_option ( 'alb_proxy_list' ); // no proxies echo '<br>Need new valid proxies'; if (function_exists ( 'proxyfrogfunc' )) { echo '<br>Getting New Proxy List from ProxyFrog.me'; // Get $x = 'error'; $ch = curl_init (); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 ); curl_setopt ( $ch, CURLOPT_TIMEOUT, 20 ); curl_setopt ( $ch, CURLOPT_REFERER, 'http://www.bing.com/' ); curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8' ); curl_setopt ( $ch, CURLOPT_MAXREDIRS, 5 ); // Good leeway for redirections. curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 0 ); // Many login forms redirect at least once. // curl_setopt ( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); // Get // license $paypal = get_option ( 'pf_license' ); $paypal = urlencode ( $paypal ); $url = "http://proxyfrog.me/proxyfrog/api.php?email=$paypal"; curl_setopt ( $ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $ch, CURLOPT_URL, trim ( $url ) ); $exec = curl_exec ( $ch ); // echo $exec; if (stristr ( $exec, ':' )) { update_option ( 'be_proxy_list', $exec ); update_option ( 'alb_proxy_list', $exec ); echo '<br>New Proxy List <b>Added successfully</b> '; $this->log ( 'ProxyFrog', "New Proxy list added from ProxyFrog" ); return true; } else { $this->log ( 'ProxyFrog', $exec ); } } else { return false; } } // end fun /* * ---* Logging Function --- */ function log($type, $data) { // $now= date("F j, Y, g:i a"); $now = date ( 'Y-m-d H:i:s' ); $data = @addslashes ( $data ); $query = "INSERT INTO {$this->wp_prefix}automatic_log (action,date,data) values('$type','$now','$data')"; // echome$query; $this->db->query ( $query ); $insert = $this->db->insert_id; $insert_below_100 = $insert - 100; if ($insert_below_100 > 0) { // delete $query = "delete from {$this->wp_prefix}automatic_log where id < $insert_below_100 and action not like '%Posted%'"; $this->db->query ( $query ); } } /** * Function that checks if the current link is already posted * * @param unknown $link */ function is_duplicate($link_url) { $duplicate = false; // link suffix if ($this->isLinkSuffixed == true) { if (stristr ( $link_url, '?' )) { $link_url = $link_url . '&rand=' . $this->currentCampID; } else { $link_url = $link_url . '?rand=' . $this->currentCampID; } } $md5 = md5 ( $link_url ); // Find items from the duplicate cache if (! $this->campOldDuplicateLinksFetched) { $this->campOldDuplicateLinks = get_post_meta ( $this->currentCampID, 'wp_automatic_duplicate_cache', 1 ); // array it if (! is_array ( $this->campOldDuplicateLinks )) $this->campOldDuplicateLinks = array (); $this->campOldDuplicateLinksFetched = true; } $possibleID = array_search ( $link_url, $this->campOldDuplicateLinks ); if ($possibleID != false) { $duplicate = true; $this->duplicate_id = $possibleID; } // Find items with meta = this url if (! $duplicate) { // amazon link duplicate check if (stristr ( $link_url, '/dp/' ) && stristr ( $link_url, 'https://amazon.' )) { $amazon_link_parts = explode ( '/dp/', $link_url ); $amazon_asin = $amazon_link_parts [1]; $query = "SELECT post_id FROM `{$this->wp_prefix}postmeta` WHERE meta_key= 'product_asin' and `meta_value` = '$amazon_asin' limit 1"; } else { $query = "SELECT post_id from {$this->wp_prefix}postmeta where meta_key ='$md5' "; } $pres = $this->db->get_results ( $query ); if (count ( $pres ) == 0) { $duplicate = false; } else { $duplicate = true; foreach ( $pres as $prow ) { $ppid = $prow->post_id; $this->duplicate_id = $ppid; $pstatus = get_post_status ( $ppid ); if ($pstatus != 'trash') { break; } } } } // Check if completely deleted if ($this->isLinkOnce) { if (! $duplicate) { $query = "SELECT link_url from {$this->wp_prefix}automatic_links where link_url='$md5' "; $pres = $this->db->get_results ( $query ); if (count ( $pres ) != 0) { $duplicate = true; $this->duplicate_id = 'Deleted'; } } } // Update Duplicate cache if ($duplicate == true) { // duplicated url, add it to the duplicate cache array if (is_numeric ( $this->duplicate_id )) { $this->campNewDuplicateLinks [$this->duplicate_id] = $link_url; $this->campDuplicateLinksUpdate = true; } } return $duplicate; } /** * Function link exclude to execlude links * * @param unknown $camp_id * @param unknown $source_link */ function link_execlude($camp_id, $source_link) { if ($this->campExcludedLinksFetched == true) { $execluded_links = $this->campExcludedLinks; } else { $execluded_links = get_post_meta ( $camp_id, '_execluded_links', 1 ); $this->campExcludedLinks = $execluded_links; $this->campExcludedLinksFetched = true; } $newExecluded_links = $execluded_links . ',' . $source_link; update_post_meta ( $camp_id, '_execluded_links', $newExecluded_links ); $this->campExcludedLinks = $newExecluded_links; } /** * Check if link is execluded or not i.e it didn't contain exact match keys or contins blocked keys * * @param unknown $camp_id * @param unknown $link */ function is_execluded($camp_id, $link) { if ($this->campExcludedLinksFetched == true) { $execluded_links = $this->campExcludedLinks; } else { $execluded_links = get_post_meta ( $camp_id, '_execluded_links', 1 ); $this->campExcludedLinks = $execluded_links; $this->campExcludedLinksFetched = true; //clean cache if size of excluded_links exceeded 100000 characters if(strlen($execluded_links) > 100000){ delete_post_meta ( $camp_id, '_execluded_links' ); echo '<br>Excluded links cache cleaned....'; } } if (stristr ( ',' . $execluded_links, $link )) { return true; } else { return false; } } /** * function cache_image * return local image src if found * return false if not cached */ function is_cached($remote_img, $data_md5) { // md5 $md5 = md5 ( $remote_img ); // query database for this image $query = "SELECT * FROM {$this->db->prefix}automatic_cached where img_hash='$md5' and img_data_hash='$data_md5' limit 1"; $rows = $this->db->get_results ( $query ); if (count ( $rows ) == 0) return false; $row = $rows [0]; // hm we have cached image with previous same source let's compare $local_src = $row->img_internal; // make sure current image have same data md5 right now otherwise delete // curl get curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $local_src ) ); $exec = curl_exec ( $this->ch ); if (md5 ( $exec ) == $data_md5) { $this->cached_file_path = $row->img_path; return $local_src; } else { // now the local image no more giving the same md5 may be deleted or changed delete the record $query = "delete from {$this->db->prefix}automatic_cached where img_hash = '$md5' "; $this->db->query ( $query ); return false; } } /** * * @param unknown $remote_img * @param unknown $local_img * @param number $thumb_id */ function img_cached($remote_img, $local_img, $image_data_md5, $file_path) { $md5 = md5 ( $remote_img ); $query = "insert into {$this->db->prefix}automatic_cached(img_external,img_internal,img_hash,img_data_hash,img_path) values ('$remote_img','$local_img','$md5','$image_data_md5','$file_path')"; $this->db->query ( $query ); } /** * deactivate keyword : set the reactivation time to one comig hour * Set $seconds to 0 to deactivate permanently * * @param integer $camp_id * @param string $keyword * */ function deactivate_key($camp_id, $keyword, $seconds = 3600) { $deactivatedUntill = time () + $seconds; if ($seconds == 0) $deactivatedUntill = 0; update_post_meta ( $camp_id, '_' . md5 ( $keyword ), $deactivatedUntill ); } /** * is_deactivated: check if the current deactivated keyword is still deactivated or not * if yes it return false * if not deactivated return true * * @param integer $camp_id * @param string $key */ function is_deactivated($camp_id, $keyword) { // let's see if this keyword deactivated till date or not $keyword_key = '_' . md5 ( $keyword ); $deactivated_till = get_post_meta ( $camp_id, $keyword_key, 1 ); if (trim ( $deactivated_till ) == '') $deactivated_till = 1410020931; if ($deactivated_till == 0) { // still deactivated echo '<br>Calling source for this keyword is <strong>deactivated</strong> permanently because last time we called the source for new items, There were no more results to get. You can still <a class="wp_automatic_key_reactivate" data-id="' . $camp_id . '" data-key="' . $keyword_key . '" href="#"><u>Reactivate Now.</u></a><span class="spinner_' . $keyword_key . ' spinner"></span>'; return false; } if (time () > $deactivated_till) { // time passed let's reactivate echo '<br>Keyword search reached end page lets sart from first page again '; return true; } else { // still deactivated echo '<br>Calling source for this keyword is <strong>deactivated</strong> temporarily because last time we called the source for new items, There were no more results to get. We will reactivate it after ' . number_format ( ($deactivated_till - time ()) / 60, 2 ) . ' minutes. You can still <a class="wp_automatic_key_reactivate" data-id="' . $camp_id . '" data-key="' . $keyword_key . '" href="#"><u>Reactivate Now.</u></a><span class="spinner_' . $keyword_key . ' spinner"></span>'; return false; } } /** * Function is_link_old check if the timestamp for the link is older than minimum * * @param unknown $camp_id * @param unknown $link_timestamp */ function is_link_old($camp_id, $link_timestamp) { if ($this->debug == true) echo '<br>is_link_old Minimum:' . $this->minimum_post_timestamp . ' Current:' . $link_timestamp; if ($this->minimum_post_timestamp_camp == $camp_id) { if ($link_timestamp < $this->minimum_post_timestamp) { return true; } else { return false; } } } /** * function is_title_duplicate * * @param unknown $title */ function is_title_duplicate($title, $post_type) { /* * echo ' title is:'.$title; * * var_dump(get_page_by_title( $title, 'OBJECT', $post_type )); * * exit; */ if (get_page_by_title ( $title, 'OBJECT', $post_type )) { return true; } else { // check if title contains spechial chars if (stristr ( $title, '&' )) { $encoded_title = htmlspecialchars_decode ( $title, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 ); if ($title != $encoded_title) { // check again, this title may contain special chars if (get_page_by_title ( $encoded_title, 'OBJECT', $post_type )) { return true; } else { // hmm, encoded title also was not found, sometimes apstrophe ' turns to ' on the DB if (stristr ( $title, ''' )) { $title_hex_app = str_replace ( ''', ''', $title ); if (get_page_by_title ( $title_hex_app, 'OBJECT', $post_type )) { return true; } } } } } return false; } } function do_tag_exists(&$camp, $tags) { $partToCheck = $camp->camp_post_custom_v . $camp->camp_post_content . $camp->camp_post_title; $partToCheck; foreach ( $tags as $tag ) { if (stristr ( $partToCheck, $tag )) { return true; } } return false; } /* * ---* validating --- */ function validate() { $paypal = get_option ( 'alb_license', '' ); $active = get_option ( 'alb_license_active', '' ); $link = 'http://wpplusone.com/trafficautomator/activate.php'; // no license if (trim ( $paypal ) == '') { $this->log ( 'Error', 'License Required please visit settings and add the paypal email you used to purchase the product' ); exit (); } // cehck validety if (trim ( $active ) != '1') { // first time activation // opening the page using curl $this->c->set ( CURLOPT_URL, trim ( "$link?email=$paypal" ) ); $this->c->set ( CURLOPT_CONNECTTIMEOUT, 20 ); $this->c->set ( CURLOPT_TIMEOUT, 50 ); $this->c->set ( CURLOPT_HTTPGET, 1 ); $ret = $this->c->execute (); $ret = trim ( $ret ); // when no response if ($ret == '') { // service not available $this->log ( 'Error', 'Could not activate licence at this time may be our server is under maintenance now I will keep try and if the problem exists contact support' ); exit (); } elseif ($ret == '0') { // not valid license $this->log ( 'Error', 'License is not valid please visit settings and use a valid license please, if you do\'t have a license consider to purchase <a href="http://wpsbox.com/buy">Here</a> and if you have just purchased just hold on our records will update after 10 minutes please be patient' ); exit (); } elseif ($ret == '-1') { // Refunded $this->log ( 'Error', 'License is not valid a Refund may have been already issued for this license' ); exit (); } elseif ($ret == '1') { // valid license update_option ( 'alb_license_active', '1' ); // register last chek $date = date ( "m\-d\-y" ); update_option ( 'alb_license_last', $date ); } else { $this->log ( 'Error', 'License could not be validated at this time, our server may be under maintenance now will try the next cron' ); exit (); } } else { // license is working without problem we should check again $date = date ( "m\-d\-y" ); $last_check = get_option ( 'alb_license_last', $date ); $offset = $this->dateDiff ( "-", $date, $last_check ); if ($offset >= 1) { // echo 'checking license again'; // check again // opening the page using curl $this->c->set ( CURLOPT_URL, trim ( "$link?email=$paypal" ) ); $this->c->set ( CURLOPT_CONNECTTIMEOUT, 20 ); $this->c->set ( CURLOPT_TIMEOUT, 50 ); $this->c->set ( CURLOPT_HTTPGET, 1 ); $ret = $this->c->execute (); $ret = trim ( $ret ); // when no response if ($ret == '0') { // not valid license $this->log ( 'Error', 'License is not valid please visit settings and use a valid license please, if you do\'t have a license consider to purchase <a href="http://wpsbox.com/buy">Here</a>' ); update_option ( 'alb_license_active', '' ); exit (); } elseif ($ret == '-1') { // Refunded $this->log ( 'Error', 'License is not valid a Refund may have been already issued for this license' ); update_option ( 'alb_license_active', '' ); exit (); } elseif ($ret == '1') { // valid license update_option ( 'alb_license_active', '1' ); // register last chek $date = date ( "m\-d\-y" ); update_option ( 'alb_license_last', $date ); } } } return true; } /* * ---* Date Difference return days between two dates --- */ function dateDiff($dformat, $endDate, $beginDate) { $date_parts1 = explode ( $dformat, $beginDate ); $date_parts2 = explode ( $dformat, $endDate ); $start_date = gregoriantojd ( $date_parts1 [0], $date_parts1 [1], $date_parts1 [2] ); $end_date = gregoriantojd ( $date_parts2 [0], $date_parts2 [1], $date_parts2 [2] ); return $end_date - $start_date; } /* * ---* Download File --- */ function downloadfile($link) { $downloader = $this->plugin_url . 'downloader.php'; // $downloader='http://localhost/php/wpsbox_aals/downloader.php'; $link = str_replace ( 'http', 'httpz', $link ); $enc = urlencode ( $link ); // $return=file_get_contents($downloader.'?link='.$enc); // echo $return ; if (stristr ( $return, 'error' )) { echo '<br>An Error downloading the <b>damn file</b> :'; echo ' <i><small>' . $return . '</small></i>'; return false; } return true; } /* * ---* Solve captcha function --- */ function solvecap($url) { $decap_user = get_option ( 'alb_de_u' ); $decap_pass = get_option ( 'alb_de_p' ); // if decap not registered return false if (trim ( $decap_user ) == '' || trim ( $decap_pass ) == '') { echo '<br>decaptcher.com <b>account needed</b>'; $this->log ( 'Error', 'Capatcha Met at ' . $proxy . ' , Decapatcher Account needed please register one at decapatcher.com , add balance to it then enter login details at settings tab ' ); return false; } // curl ini $ch = curl_init (); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 10 ); curl_setopt ( $ch, CURLOPT_TIMEOUT, 20 ); curl_setopt ( $ch, CURLOPT_REFERER, 'http://www.bing.com/' ); curl_setopt ( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8' ); curl_setopt ( $ch, CURLOPT_MAXREDIRS, 5 ); // Good leeway for redirections. curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, 1 ); // Many login forms redirect at least once. // curl_setopt ( $ch, CURLOPT_COOKIEJAR, "cookie.txt" ); curl_setopt ( $ch, CURLOPT_URL, trim ( $url ) ); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); $img = curl_exec ( $ch ); if (trim ( $img ) == '') return false; if (curl_error ( $ch ) != '') { echo '<br>Image fetched with error:' . curl_error ( $ch ) . '<br>'; return false; } // file_put_contents('files/cap.jpg',$img); // positng image to capatcher to get the decapatched version curl_setopt ( $ch, CURLOPT_VERBOSE, 0 ); curl_setopt ( $ch, CURLOPT_URL, 'http://poster.decaptcher.com' ); curl_setopt ( $ch, CURLOPT_POST, true ); $decap_acc = '1169'; $post = array ( "pict" => "@files/cap.jpg", "function" => "picture2", "username" => $decap_user, "password" => $decap_pass, "pict_to" => "0", "pict_type" => $decap_acc ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post ); if (curl_error ( $ch ) != '') { echo '<br>Captacha Posted with error:' . curl_error ( $ch ) . '<br>'; return false; } $decap = curl_exec ( $ch ); echo '<br>Decap returned:' . $decap; // check if decapatcher returned an error - if (stristr ( $decap, '-' ) || trim ( $decap ) == '') { echo '<br>Decapatcher returned an <b>error</b> ' . $decap; $this->log ( 'Error', 'Decapatcher Account Error Please check login details and suffecient balance' ); return false; } if (trim ( $decap ) == '') return false; $decaps = explode ( '|', $decap ); $decap = $decaps [5]; if (trim ( $decap ) == '') return false; echo '<br>Decap Solution:' . $decap; return $decap; } /* * ---* Trackback function using wp modification --- */ function trackback($trackback_url, $author, $ttl, $excerpt, $link) { $options = array (); $options ['timeout'] = 4; $options ['body'] = array ( 'title' => $ttl, 'url' => $link, 'blog_name' => $author, 'excerpt' => $excerpt ); $response = wp_remote_post ( $trackback_url, $options ); if (is_wp_error ( $response )) { echo '<br>Trackback Error'; return; } else { echo '<br>No Track back error'; } } /* * function get_time_difference: get the time difference in minutes. * @start: time stamp * @end: time stamp */ function get_time_difference($start, $end) { $uts ['start'] = $start; $uts ['end'] = $end; if ($uts ['start'] !== - 1 && $uts ['end'] !== - 1) { if ($uts ['end'] >= $uts ['start']) { $diff = $uts ['end'] - $uts ['start']; return round ( $diff / 60, 0 ); } } } function truncateHtml($text, $length = 100, $ending = '...', $exact = false, $considerHtml = true) { if ($considerHtml) { // if the plain text is shorter than the maximum length, return the whole text if (strlen ( preg_replace ( '/<.*?>/', '', $text ) ) <= $length) { return $text; } // splits all html-tags to scanable lines preg_match_all ( '/(<.+?>)?([^<>]*)/s', $text, $lines, PREG_SET_ORDER ); $total_length = strlen ( $ending ); $open_tags = array (); $truncate = ''; foreach ( $lines as $line_matchings ) { // if there is any html-tag in this line, handle it and add it (uncounted) to the output if (! empty ( $line_matchings [1] )) { // if it's an "empty element" with or without xhtml-conform closing slash if (preg_match ( '/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings [1] )) { // do nothing // if tag is a closing tag } else if (preg_match ( '/^<\s*\/([^\s]+?)\s*>$/s', $line_matchings [1], $tag_matchings )) { // delete tag from $open_tags list $pos = array_search ( $tag_matchings [1], $open_tags ); if ($pos !== false) { unset ( $open_tags [$pos] ); } // if tag is an opening tag } else if (preg_match ( '/^<\s*([^\s>!]+).*?>$/s', $line_matchings [1], $tag_matchings )) { // add tag to the beginning of $open_tags list array_unshift ( $open_tags, strtolower ( $tag_matchings [1] ) ); } // add html-tag to $truncate'd text $truncate .= $line_matchings [1]; } // calculate the length of the plain text part of the line; handle entities as one character $content_length = strlen ( preg_replace ( '/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', ' ', $line_matchings [2] ) ); if ($total_length + $content_length > $length) { // the number of characters which are left $left = $length - $total_length; $entities_length = 0; // search for html entities if (preg_match_all ( '/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', $line_matchings [2], $entities, PREG_OFFSET_CAPTURE )) { // calculate the real length of all entities in the legal range foreach ( $entities [0] as $entity ) { if ($entity [1] + 1 - $entities_length <= $left) { $left --; $entities_length += strlen ( $entity [0] ); } else { // no more characters left break; } } } $truncate .= substr ( $line_matchings [2], 0, $left + $entities_length ); // maximum lenght is reached, so get off the loop break; } else { $truncate .= $line_matchings [2]; $total_length += $content_length; } // if the maximum length is reached, get off the loop if ($total_length >= $length) { break; } } } else { if (strlen ( $text ) <= $length) { return $text; } else { $truncate = substr ( $text, 0, $length - strlen ( $ending ) ); } } // if the words shouldn't be cut in the middle... if (! $exact) { // ...search the last occurance of a space... $spacepos = strrpos ( $truncate, ' ' ); if (isset ( $spacepos )) { // ...and cut the text in this position $truncate = substr ( $truncate, 0, $spacepos ); } } // add the defined ending to the text $truncate .= $ending; if ($considerHtml) { // close all unclosed html-tags foreach ( $open_tags as $tag ) { $truncate .= '</' . $tag . '>'; } } return $truncate; } // end function /** * function: curl with follocation that will get url if openbasedir is set or safe mode enabled * * @param unknown $ch * @return mixed */ function curl_exec_follow(&$ch) { $max_redir = 3; for($i = 0; $i < $max_redir; $i ++) { $exec = curl_exec ( $ch ); $x = curl_error ( $ch ); $info = curl_getinfo ( $ch ); // meta refresh if (stristr ( $exec, 'http-equiv="refresh"' ) && $info ['http_code'] == 200 && ! stristr ( $exec, '_fb_noscript' )) { // get the Redirect URL preg_match ( '{<meta.*?http-equiv="refresh".*?>}', $exec, $redirectMatch ); if (isset ( $redirectMatch [0] ) && trim ( $redirectMatch [0] ) != '') { preg_match ( '#\bhttps?://[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/))#', $redirectMatch [0], $urlMatchs ); if (isset ( $urlMatchs [0] ) && stristr ( $urlMatchs [0], 'http' )) { echo '<br><span style="color:orange">Alert:</span> HTTP redirection suspected... redirecting... enable the option below to don\'t try to guess redirections if you got wrong content'; echo '<br>Redirecting to: ' . $urlMatchs [0]; $info ['http_code'] = 302; $info ['redirect_url'] = $urlMatchs [0]; } } } elseif (stristr ( $exec, 'location.replace' )) { preg_match ( '{location\.replace\((.*?)\)}', $exec, $loc_matches ); $possible_redirect = isset ( $loc_matches [1] ) ? $loc_matches [1] : ''; if (stristr ( $possible_redirect, 'http' )) { echo '<br><span style="color:orange">Alert:</span> JavaScript redirection suspected... redirecting... enable the option below to don\'t try to guess redirections if you got wrong content'; echo '<br>Redirecting to:' . $possible_redirect; $possible_redirect = str_replace ( array ( "'", '"' ), '', $possible_redirect ); $info ['http_code'] = 302; $info ['redirect_url'] = trim ( $possible_redirect ); } } if ($info ['http_code'] == 301 || $info ['http_code'] == 302) { // if there is no reddirect_url if (trim ( $info ['redirect_url'] ) == '') { $info ['redirect_url'] = curl_getinfo ( $ch, CURLINFO_REDIRECT_URL ); // if php is below 5.3.7 and there is no redirect_url option if (trim ( $info ['redirect_url'] ) == '') { if (stristr ( $exec, 'Location:' )) { preg_match ( '{Location:(.*)}', $exec, $loc_matches ); $redirect_url = trim ( $loc_matches [1] ); if (trim ( $redirect_url ) != '') { $info ['redirect_url'] = $redirect_url; } } else { // $info['redirect_url'] = $info['url']; } } } // fb %20 correction if (stristr ( $info ['redirect_url'], 'mbasic.facebook' )) { $info ['redirect_url'] = str_replace ( '%20', '', $info ['redirect_url'] ); } curl_setopt ( $ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $ch, CURLOPT_URL, trim ( $info ['redirect_url'] ) ); $exec = curl_exec ( $ch ); } else { // no redirect just return break; } } return $exec; } /** * function curl_file_exists: check existence of a file * * @param unknown $url * @return boolean */ function curl_file_exists($url) { // curl get $x = 'error'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $url ) ); curl_setopt ( $this->ch, CURLOPT_REFERER, $url ); // curl_setopt($this->ch, CURLOPT_NOBODY, true); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); $httpCode = curl_getinfo ( $this->ch, CURLINFO_HTTP_CODE ); // curl_setopt($this->ch, CURLOPT_NOBODY, false); if ($httpCode == '200' || $httpCode == '302') return true; return false; } // function to get user id and create it if not exists function get_user_id_by_display_name($display_name) { // trim $display_name = trim ( $display_name ); // check user existence if (! $user = $this->db->get_row ( $this->db->prepare ( "SELECT `ID` FROM {$this->db->users} WHERE `display_name` = %s", $display_name ) )) { // replace spaces $login_name = trim ( str_replace ( ' ', '_', $display_name ) ); // no user with this name let's create it and return the id $userdata ['display_name'] = $display_name; // check if URL Friendly without spaces or non latin chars if (preg_match ( '{^[\w|\d|_]*$}', $login_name )) { $userdata ['user_login'] = $login_name; } else { $userdata ['user_login'] = md5 ( $display_name ); } $userdata ['role'] = 'contributor'; $user_id = wp_insert_user ( $userdata ); if (! is_wp_error ( $user_id )) { echo '<br>New user created:' . $display_name; return $user_id; } else { return false; } return false; } return $user->ID; } // remove emoji from instagram function removeEmoji($text) { if (function_exists ( 'wp_staticize_emoji' )) { $text = wp_staticize_emoji ( $text ); $text = preg_replace ( '{<img src="https://s.w.org.*?>}s', '', $text ); return $text; } else { $clean_text = ""; // Match Emoticons $regexEmoticons = '/[\x{1F600}-\x{1F64F}]/u'; $clean_text = preg_replace ( $regexEmoticons, '', $text ); // Match Miscellaneous Symbols and Pictographs $regexSymbols = '/[\x{1F300}-\x{1F5FF}]/u'; $clean_text = preg_replace ( $regexSymbols, '', $clean_text ); // Match Transport And Map Symbols $regexTransport = '/[\x{1F680}-\x{1F6FF}]/u'; $clean_text = preg_replace ( $regexTransport, '', $clean_text ); // Match Miscellaneous Symbols $regexMisc = '/[\x{2600}-\x{26FF}]/u'; $clean_text = preg_replace ( $regexMisc, '', $clean_text ); // Match Dingbats $regexDingbats = '/[\x{2700}-\x{27BF}]/u'; $clean_text = preg_replace ( $regexDingbats, '', $clean_text ); return $clean_text; } } // function for hyperlinking function hyperlink_this($text) { return preg_replace ( ';(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-@]*(\?\S+)?[^\.\s])?)?);', '<a href="$1" target="_blank">$0</a>', $text ); } // function for stripping inline urls function strip_urls($content) { return preg_replace ( '{http[s]?://[^\s]*}', '', $content ); } // fix invalid uلtf chars function fix_utf8($string) { // check if wrong utf8 if (1 === @preg_match ( '/^./us', $string )) { return $string; } else { echo '<br>Fixing invalid utf8 text...'; if (function_exists ( 'iconv' )) { return iconv ( 'utf-8', 'utf-8//IGNORE', $string ); } else { echo '<br>Iconv module is not installed, please install PHP iconv module'; return $string; } } } function cleanthetitle($title) { $title = str_replace ( 'nospin', '', $title ); $title = str_replace ( ' ', '-', $title ); // Replaces all spaces with hyphens. $title = preg_replace ( '/[^A-Za-z0-9\-]/', '', $title ); // Removes special chars. return preg_replace ( '/-+/', '-', $title ); // Replaces multiple hyphens with single one. } // is_enlish: checks if the text is english requires mb_string module function is_english($string) { if (! function_exists ( 'mb_strlen' )) { echo '<br>Will skip checking if english as mbstring module must be installed '; return true; } $string = str_replace ( array ( '”', '“', '’', '‘', '’' ), '', $string ); if (strlen ( $string ) != mb_strlen ( $string, 'utf-8' )) { return false; } else { return true; } } function attach_image($image_url, $camp_opt, $post_id) { // Upload dir $upload_dir = wp_upload_dir (); // img host $imghost = parse_url ( $image_url, PHP_URL_HOST ); if (stristr ( $imghost, 'http://' )) { $imgrefer = $imghost; } else { $imgrefer = 'http://' . $imghost; } // empty referal if (! in_array ( 'OPT_CACHE_REFER_NULL', $camp_opt )) { curl_setopt ( $this->ch, CURLOPT_REFERER, $imgrefer ); } else { curl_setopt ( $this->ch, CURLOPT_REFERER, '' ); } if (stristr ( $image_url, 'base64,' )) { $filename = time (); } else { // decode html entitiies $image_url = html_entity_decode ( $image_url ); if (stristr ( $image_url, '%' )) { $image_url = urldecode ( $image_url ); } // file name to store $filename = basename ( $image_url ); if (stristr ( $image_url, ' ' )) { $image_url = str_replace ( ' ', '%20', $image_url ); } } // Clean thumb if (in_array ( 'OPT_THUMB_CLEAN', $camp_opt )) { $clean_name = ''; $clean_name = sanitize_file_name ( $post_title ); echo '<br>clean name' . $clean_name; if (trim ( $clean_name ) != "") { // get the image extension \.\w{3} $ext = pathinfo ( $filename, PATHINFO_EXTENSION ); if (stristr ( $ext, '?' )) { $ext_parts = explode ( '?', $ext ); $ext = $ext_parts [0]; } // clean parameters after filename $filename = trim ( $clean_name ); if (trim ( $ext ) != '') { $filename = $filename . '.' . $ext; } } } if (stristr ( $image_url, 'base64,' )) { $ex = explode ( 'base64,', $current_img ); $image_data = base64_decode ( $ex [1] ); // set fileName extention .png, .jpg etc preg_match ( '{data:image/(.*?);}', $image_url, $ex_matches ); $image_ext = $ex_matches [1]; if (trim ( $image_ext ) != '') { $filename = $filename . '.' . $image_ext; } } else { // get image content $x = 'error'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( html_entity_decode ( $image_url ) ) ); $image_data = $this->curl_exec_follow ( $this->ch ); $x = curl_error ( $this->ch ); } if (trim ( $image_data ) != '') { // check if already saved $image_data_md5 = md5 ( $image_data ); $is_cached = $this->is_cached ( $image_url, $image_data_md5 ); if ($is_cached != false) { echo '<--already cached'; $file = $this->cached_file_path; $guid = $is_cached; } else { if (stristr ( $filename, '?' )) { $farr = explode ( '?', $filename ); $filename = $farr [0]; } // pagepeeker fix if (stristr ( $image_url, 'pagepeeker' ) && ! in_array ( 'OPT_THUMB_CLEAN', $camp_opt )) { $filename = md5 ( $filename ) . '.jpg'; } if (wp_mkdir_p ( $upload_dir ['path'] )) $file = $upload_dir ['path'] . '/' . $filename; else $file = $upload_dir ['basedir'] . '/' . $filename; // check if same image name already exists if (file_exists ( $file )) { // get the current saved one to check if identical $already_saved_image_link = $upload_dir ['url'] . '/' . $filename; // curl get $x = 'error'; $url = $already_saved_image_link; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $url ) ); $exec = curl_exec ( $this->ch ); if (trim ( $exec ) == trim ( $image_data )) { $idential = true; echo '<br>Featured image already exists with same path.. using it'; } else { echo '<br>Featured image exists with same path but not identical.. saving '; $filename = time () . '_' . $filename; } } // saving image if (! isset ( $idential )) { if (wp_mkdir_p ( $upload_dir ['path'] )) $file = $upload_dir ['path'] . '/' . $filename; else $file = $upload_dir ['basedir'] . '/' . $filename; $f = file_put_contents ( $file, $image_data ); } $guid = $upload_dir ['url'] . '/' . basename ( $filename ); $this->img_cached ( $image_url, $guid, $image_data_md5, $file ); } // not cached // atttatchment check if exists or not global $wpdb; $query = "select * from $wpdb->posts where guid = '$guid'"; $already_saved_attachment = $wpdb->get_row ( $query ); if (isset ( $already_saved_attachment->ID )) { $attach_id = $already_saved_attachment->ID; } else { $wp_filetype = wp_check_filetype ( $filename, null ); if ($wp_filetype ['type'] == false) { $wp_filetype ['type'] = 'image/jpeg'; } // Alt handling $imgTitle = sanitize_file_name ( $filename ); if (in_array ( 'OPT_THUMB_ALT', $camp_opt )) { // $imgTitle = $title; } $attachment = array ( 'guid' => $guid, 'post_mime_type' => $wp_filetype ['type'], 'post_title' => $imgTitle, 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment ( $attachment, $file, $post_id ); require_once (ABSPATH . 'wp-admin/includes/image.php'); $attach_data = wp_generate_attachment_metadata ( $attach_id, $file ); wp_update_attachment_metadata ( $attach_id, $attach_data ); } if (is_numeric ( $attach_id ) && $attach_id > 0) { return $attach_id; } } else { echo ' <-- can not get image content ' . $x; return false; } } /** * Count chars on text using mb_ module and if not exists it count it using strlen * * @param unknown $text */ function chars_count(&$text) { if (function_exists ( 'mb_strlen' )) { return mb_strlen ( $text ); } else { return strlen ( $text ); } } function randomUserAgent() { $os_type = rand ( 1, 3 ); $chrome_version = rand ( 100, 108 ) . '.0.' . rand ( 1, 4044 ) . '.' . rand ( 0, 138 ); // Chrome if ($os_type == 1) { $agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; } elseif ($os_type == 2) { $agent = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; $mac_version = "10_" . rand ( 6, 15 ) . "_" . rand ( 1, 4 ); $agent = str_replace ( '10_15_4', $mac_version, $agent ); } elseif ($os_type == 3) { $agent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36"; } // main version 81 $agent = str_replace ( "81.0.4044.138", $chrome_version, $agent ); return $agent; } /** * Function to download file and return the url of it at the server * * @param String $url * @parm String optional $ext ex .xml * return path of the file or false */ function download_file($url, $ext = '') { // curl get $x = 'error'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $url ) ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); if (trim ( $x ) == '' && trim ( $exec ) != '') { $upload_dir = wp_upload_dir (); $filePath = $upload_dir ['basedir'] . '/wp_automatic_temp' . $ext; $fileUrl = $upload_dir ['baseurl'] . '/wp_automatic_temp' . $ext; file_put_contents ( $filePath, $exec ); return $fileUrl; } return false; } function convert_single_quotes(&$original_cont) { $original_cont = preg_replace ( "{([alt|src|href])[\s]*=[\s]*'(.*?)'}s", "$1=\"$2\"", $original_cont ); return $original_cont; } /** * Fix src links * * @param string $content * to be fixed content * @param string $url * @return string fixed content */ function fix_relative_paths($content, $url) { // deprecated, please use wp_automatic_fix_relative_paths instead // fix images $pars = parse_url ( $url ); $host = $pars ['host']; $scheme = $pars ['scheme']; if ($scheme != 'https') $scheme = 'http'; // $url with last slash $path = $pars ['path']; $path_parts = explode ( '/', $path ); array_pop ( $path_parts ); $url_with_last_slash = $scheme . '://' . $host . implode ( '/', $path_parts ); // base url preg_match ( '{<base href="(.*?)"}', $content, $base_matches ); $base_url = (isset ( $base_matches [1] ) && trim ( $base_matches [1] ) != '') ? trim ( $base_matches [1] ) : $url_with_last_slash; /* preg_match_all('{<img.*?src[\s]*=[\s]*["|\'](.*?)["|\'].*?>}is', $res['cont'] , $matches); */ $content = str_replace ( 'src="//', 'src="' . $scheme . '://', $content ); $content = str_replace ( 'href="//', 'href="' . $scheme . '://', $content ); preg_match_all ( '{(?:href|src)[\s]*=[\s]*["|\'](.*?)["|\'].*?>}is', $content, $matches ); $img_srcs = ($matches [1]); $img_srcs = array_filter ( $img_srcs ); foreach ( $img_srcs as $img_src ) { $original_src = $img_src; // ../ remove if (stristr ( $img_src, '../' )) { $img_src = str_replace ( '../', '', $img_src ); } if (stristr ( $img_src, 'http:' ) || stristr ( $img_src, 'www.' ) || stristr ( $img_src, 'https:' ) || stristr ( $img_src, 'data:image' ) || stristr ( $img_src, '#' )) { // valid image } else { // not valid image i.e relative path starting with a / or not or // $img_src = trim ( $img_src ); if (preg_match ( '{^//}', $img_src )) { $img_src = $scheme . ':' . $img_src; } elseif (preg_match ( '{^/}', $img_src )) { $img_src = $scheme . '://' . $host . $img_src; } else { $img_src = $base_url . '/' . $img_src; } $reg_img = '{["|\'][\s]*' . preg_quote ( $original_src, '{' ) . '[\s]*["|\']}s'; $content = preg_replace ( $reg_img, '"' . $img_src . '"', $content ); } } // Fix Srcset preg_match_all ( '{srcset[\s]*=[\s]*["|\'](.*?)["|\']}s', $content, $srcset_matches ); $srcset_matches_raw = $srcset_matches [0]; $srcset_matches_inner = $srcset_matches [1]; $i = 0; foreach ( $srcset_matches_raw as $srcset ) { if (stristr ( $srcset, 'http:' ) || stristr ( $srcset, 'https:' ) || stristr ( $srcset, 'data:image' )) { // valid } else { // lets fix $correct_srcset = $srcset_inner = $srcset_matches_inner [$i]; $srcset_inner_parts = explode ( ',', $srcset_inner ); foreach ( $srcset_inner_parts as $srcset_row ) { $srcset_row_parts = explode ( ' ', trim ( $srcset_row ) ); $img_src_raw = $img_src = $srcset_row_parts [0]; if (preg_match ( '{^//}', $img_src )) { $img_src = $scheme . ':' . $img_src; } elseif (preg_match ( '{^/}', $img_src )) { $img_src = $scheme . '://' . $host . $img_src; } else { $img_src = $scheme . '://' . $host . '/' . $img_src; } $srcset_row_correct = str_replace ( $img_src_raw, $img_src, $srcset_row ); $correct_srcset = str_replace ( $srcset_row, $srcset_row_correct, $correct_srcset ); } $content = str_replace ( $srcset_inner, $correct_srcset, $content ); } $i ++; } // Fix relative links $content = str_replace ( 'href="../', 'href="http://' . $host . '/', $content ); $content = preg_replace ( '{href="/(\w)}', 'href="http://' . $host . '/$1', $content ); $content = preg_replace ( '{href=/(\w)}', 'href=http://' . $host . '/$1', $content ); // <a href=/story/sports/college/miss return $content; } /** * return width of an image */ function get_image_width($image_data) { $upload_dir = wp_upload_dir (); // let's save the file if (wp_mkdir_p ( $upload_dir ['path'] )) $file = $upload_dir ['path'] . '/' . 'temp_wp_automatic'; else $file = $upload_dir ['basedir'] . '/' . 'temp_wp_automatic'; file_put_contents ( $file, $image_data ); $size = getimagesize ( $file ); if ($size != false) { return $size [0]; } else { return 0; } } /** * Auto fix lazy loading * * @param * $cont */ function lazy_loading_auto_fix($cont) { preg_match_all ( '{<img .*?>}s', $cont, $imgsMatchs ); // if no images $imgs_count = count ( $imgsMatchs [0] ); if ($imgs_count < 1) return $cont; $found_lazy_tag = ''; if (stristr ( $cont, ' data-src=' )) { $found_lazy_tag = 'data-src'; } elseif (stristr ( $cont, ' data-lazy-src=' )) { $found_lazy_tag = 'data-lazy-src'; } else { // suspecting lazy $lazy_suspected = false; $images_plain = implode ( ' ', $imgsMatchs [0] ); if (stristr ( $images_plain, 'lazy' )) { if ($this->debug == true) echo '<br>Lazy word exists, now suspected'; $lazy_suspected = true; } else { if ($this->debug == true) echo '<br>Word Lazy does not exist, lets guess...'; // src values preg_match_all ( '{ src[\s]?=[\s]?["|\'](.*?)["|\']}', $images_plain, $srcs_matches ); $found_srcs_count = count ( $srcs_matches [0] ); $unique_srcs_count = count ( array_unique ( $srcs_matches [1] ) ); if ($this->debug == true) echo "<br>Post contains $found_srcs_count src attributes, and $unique_srcs_count unique"; if ($found_srcs_count != 0) { $diff_percentage = (($found_srcs_count - $unique_srcs_count)) * 100 / $found_srcs_count; } else { $diff_percentage = 0; } if ($this->debug == true) echo '<-- Percentage is ' . $diff_percentage; if ($diff_percentage > 39) { $lazy_suspected = true; if ($this->debug == true) echo '<-- Lazy suspected'; } else { if ($this->debug == true) echo '<-- Lazy was not suspected'; } } // finding suspected lazy attribute if ($lazy_suspected) { $images_plain_no_src = preg_replace ( '{ src[\s]?=[\s]?["|\'].*?["|\']}', ' ', $images_plain ); $replace_known_attributes = array ( ' alt', ' srcset', ' data-srcset', ' class', ' id', ' title' ); $images_plain_no_src = str_replace ( $replace_known_attributes, ' ', $images_plain_no_src ); // remove attributes containing small data 1-9 $images_plain_no_src = preg_replace ( '{ [\w|-]*?[\s]?=[\s]?["|\'].{1,9}?["|\']}s', ' ', $images_plain_no_src ); // attributes with slashes preg_match_all ( '{( [\w|-]*?)[\s]?=[\s]?["|\'][^",]*?/[^",]*?["|\']}', $images_plain_no_src, $possible_src_matches ); $unique_attr = (array_unique ( $possible_src_matches [1] )); if (isset ( $unique_attr [0] )) { $found_lazy_tag = $unique_attr [0]; } } } // found tag? // of course not src if (trim ( $found_lazy_tag ) == 'src') return $cont; if (trim ( $found_lazy_tag ) != '') { echo '<br>Lazy loading was automatically detected where lazy tag is: <strong>' . $found_lazy_tag . '</strong>...Fixing...'; $cg_feed_lazy = trim ( $found_lazy_tag ); } else { return $cont; } if (! stristr ( $cont, $cg_feed_lazy )) return $cont; foreach ( $imgsMatchs [0] as $imgMatch ) { if (stristr ( $imgMatch, $cg_feed_lazy )) { $newImg = $imgMatch; $newImg = str_replace ( ' src=', ' bad-src=', $newImg ); $newImg = preg_replace ( '{ bad-src=[\'|"].*?[\'|"] }', ' ', $newImg ); $newImg = str_replace ( ' ' . $cg_feed_lazy, ' src', $newImg ); $cont = str_replace ( $imgMatch, $newImg, $cont ); } } return $cont; } /** * Check if filename contains an ext and append it if not based on the mime * * @param string $filename * file name * @param string $contentType * content type */ function append_file_ext($filename, $contentType) { if (! preg_match ( '/\.(jpg|jpeg|jpe|png|gif|bmp|tiff|tif)$/i', $filename )) { if (stristr ( $contentType, 'image' )) { $filename .= '.' . trim ( str_replace ( 'image/', '', $contentType ) ); $filename = str_replace ( '.php', '', $filename ); } } return $filename; } // random text function randomString($length = 10) { $str = ""; $characters = array_merge ( range ( 'A', 'Z' ), range ( 'a', 'z' ), range ( '0', '9' ) ); $max = count ( $characters ) - 1; for($i = 0; $i < $length; $i ++) { $rand = mt_rand ( 0, $max ); $str .= $characters [$rand]; } return $str; } /** * Random cookie name * * @return string|unknown|mixed|boolean */ function cookieJarName() { $name = get_option ( 'wp_automatic_cjn', '' ); if (trim ( $name ) == '') { $name = $this->randomString () . '_' . $this->randomString (); update_option ( 'wp_automatic_cjn', $name ); } return $name; } /** */ function get_soundcloud_key() { // if we already got it before if (trim ( $this->soundCloudAPIKey ) != '') return $this->soundCloudAPIKey; // get from cache $wp_automatic_sc_client = get_option ( 'wp_automatic_sc_client' ); // verify if key is valid if (trim ( $wp_automatic_sc_client ) != '') { // curl get $x = 'error'; $url = "http://api.soundcloud.com/tracks/?q=love&client_id=$wp_automatic_sc_client&limit=1"; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $url ) ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); // Valid key if (trim ( $exec ) != '' && ! stristr ( $exec, 'Unauthorized' )) { echo '<br>Cached key found to be ok.... using it.'; $this->soundCloudAPIKey = $wp_automatic_sc_client; return $wp_automatic_sc_client; } else { echo '<br>Current SoundCloud key is no more valid:' . $wp_automatic_sc_client; } } // get new key echo '<br>Getting a new SoundCloud Key'; // get https://soundcloud.com // curl get $x = 'error'; $url = 'https://soundcloud.com'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $url ) ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); preg_match_all ( '{src="(.*?)"></script>}', $exec, $scripts_matches ); if (count ( $scripts_matches [1] ) > 0) { $last_script = end ( $scripts_matches [1] ); // curl get $x = 'error'; curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( $last_script ) ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); // extract key client_id:"Ia1FFtOCVzChwxvKk7dA6OsEQMwHVptP" preg_match ( '{client_id:"(.*?)"}', $exec, $found_client ); // key found, save it if (trim ( $found_client [1] ) != '') { update_option ( 'wp_automatic_sc_client', trim ( $found_client [1] ), false ); echo '<br>Got latest key:' . $found_client [1]; $this->soundCloudAPIKey = $found_client [1]; return $found_client [1]; } } return ''; } // load a cookie function load_cookie($cookie_name, $is_secret = false) { // already loaded? if ($this->was_cookie_loaded ( $cookie_name )) return; // cookie path $dir = $this->wp_automatic_upload_dir (); // secret key $secret_key = ''; if ($is_secret) { $secret_option_name = 'wp_automatic_cookie_' . $cookie_name . '_secret'; $secret_key = get_option ( $secret_option_name, '' ); } $cookie_path = $dir . '/wp_automatic_' . $cookie_name . '_cookie'; // load curl_setopt ( $this->ch, CURLOPT_COOKIEFILE, $cookie_path ); curl_setopt ( $this->ch, CURLOPT_COOKIEJAR, $cookie_path ); // mark as loaded $this->is_cookie_loaded = true; $this->loaded_cookie_name = $cookie_name; } // loaded cookie or not function was_cookie_loaded($cookie_name) { if ($this->is_cookie_loaded && $this->loaded_cookie_name == $cookie_name) { return true; } else { return false; } } // return the path of the cookie function cookie_path($cookie_name) { $dir = $this->wp_automatic_upload_dir (); return $dir . '/wp_automatic_' . $cookie_name . '_cookie'; } // delete the cookie jar file function cookie_delete($cookie_name) { unlink ( $this->cookie_path ( $cookie_name ) ); } // function cookie_content($cookie_name) { return file_get_contents ( $this->cookie_path ( $cookie_name ) ); } // create uploads/wp_automatic function wp_automatic_upload_dir() { $dir = wp_upload_dir (); $baseurl = $dir ['basedir']; $wp_automatic = $baseurl . '/wp-automatic'; if (! file_exists ( $wp_automatic )) { mkdir ( $wp_automatic, 0777, true ); $myfile = fopen ( $wp_automatic . "/index.php", "w" ); fclose ( $myfile ); } return $wp_automatic; } // generate tags from title words function wp_automatic_generate_tags($post_title) { $titleWords = explode ( ' ', $post_title ); $validTitleWords = array (); // get stop words $stopWordsRaw = file_get_contents ( dirname ( __FILE__ ) . '/stopwords.txt' ); $stopWords = array (); $stopWords = explode ( ',', $stopWordsRaw ); // additional stop words $additionalStopWordsRaw = get_option ( 'wp_automatic_ttt_stop', '' ); if (trim ( $additionalStopWordsRaw ) != '') { $additionalStopWordsArr = explode ( "\n", $additionalStopWordsRaw ); $additionalStopWordsArr = array_filter ( $additionalStopWordsArr ); $stopWords = array_merge ( $stopWords, $additionalStopWordsArr ); } $stopWords = array_map ( 'trim', $stopWords ); foreach ( $titleWords as $titleWord ) { $titleWord = preg_replace ( '#[^\p{L}\p{N}\._]+#u', '', $titleWord ); // remove all chars expect a letter, number, dot or underscore $titleWord = preg_replace ( '#\.$#', '', trim ( $titleWord ) ); // remove trailing dots only and keep other dots mo.salah if (! in_array ( strtolower ( $titleWord ), $stopWords )) { if (is_numeric ( trim ( $titleWord ) )) { // numbers } elseif (strlen ( $titleWord ) < 3) { // too short } else { $validTitleWords [] = $titleWord; } } } return $validTitleWords; } // end function /** * Generate a file name to save from a title * * @param string $title */ function file_name_from_title($title) { $clean_name = ''; $clean_name = $this->removeEmoji ( $title ); $clean_name = str_replace ( array ( "'", "’", "." ), '', $clean_name ); $clean_name = remove_accents ( $clean_name ); $clean_name = wp_trim_words ( $clean_name, 10, '' ); $clean_name = sanitize_file_name ( $clean_name ); return $clean_name; } /** * Loads a URL from Google cache, bing cache or google translate proxy if the key was not found on any page * * @param unknown $url * @param unknown $match_key */ function wp_automatic_auto_proxy($url, $match_key) { $binglink = "http://webcache.googleusercontent.com/search?q=cache:" . urlencode ( $url ); echo '<br>Cache link:' . $binglink; $headers = array (); curl_setopt ( $this->ch, CURLOPT_HTTPHEADER, $headers ); curl_setopt ( $this->ch, CURLOPT_HTTPGET, 1 ); curl_setopt ( $this->ch, CURLOPT_URL, trim ( ($binglink) ) ); curl_setopt ( $this->ch, CURLOPT_REFERER, 'http://ezinearticles.com' ); $exec = curl_exec ( $this->ch ); $x = curl_error ( $this->ch ); if (strpos ( $exec, $match_key )) { echo '<-- Found using gcache'; return $exec; } else { // Google translate echo '<br>Google cache failed Loading using GtranslateProxy...'; require_once 'inc/proxy.GoogleTranslate.php'; try { $GoogleTranslateProxy = new GoogleTranslateProxy ( $this->ch ); $exec = $GoogleTranslateProxy->fetch ( $url ); return $exec; } catch ( Exception $e ) { echo '<br>ProxyViaGoogleException:' . $e->getMessage (); } } } /** * get the final slug from the source link */ function get_final_slug($link) { $link_parts = array_filter ( explode ( '/', $link ) ); $link_last_part = end ( $link_parts ); return trim ( $link_last_part ); } /** * function to get an image from bixaBay cached image, if not fetch new and get image */ function get_pixabay_image($keyword) { $keyword = trim ( $keyword ); // call images from db $query_main = "select * from {$this->wp_prefix}automatic_general where item_type= 'pb_$keyword' and item_status = '0' limit 1"; $res = $this->db->get_results ( $query_main ); // if no images found, grab new images if (count ( $res ) == 0) { // page index for the call ? $query = "select * from {$this->wp_prefix}automatic_keywords where keyword_name='{$keyword}' and keyword_camp=0 limit 1"; $res = $this->db->get_results ( $query ); // first time ? if (count ( $res ) == 0) { $query = "INSERT INTO {$this->wp_prefix}automatic_keywords ( keyword_name , keyword_camp , keyword_start ) values ( '{$keyword}' , '0' , '1' ) "; $kewyord_id = $q_result = $this->db->query ( $query ); $page = 1; echo '<br>PixaBay keyword registered? <-- First time'; } else { $page = $res [0]->keyword_start + 1; $kewyord_id = $res [0]->keyword_id; // update the start for the next call $query = "update {$this->wp_prefix}automatic_keywords set keyword_start = $page where keyword_id={$res[0]->keyword_id} "; $this->db->query ( $query ); echo '<br>PixaBay keyword registered? <-- Yes'; } $this->pixabay_image_fetch ( $keyword, $page ); $res = $this->db->get_results ( $query_main ); // repeat after getting the images } if (count ( $res ) > 0) { // change status to 1 and return the image $item = $res [0]; $query = "update {$this->wp_prefix}automatic_general set item_status = 1 where id={$item->id} "; $this->db->query ( $query ); } else { // update the start for the next call $query = "update {$this->wp_prefix}automatic_keywords set keyword_start = 0 where keyword_id={$kewyord_id} "; $this->db->query ( $query ); } $image_url = $item->item_data; $image_url = str_replace ( '_150', '_960_720', $image_url ); return $image_url; } /** * Function to fetch new items from PixaBay and cache them */ function pixabay_image_fetch($keyword, $page) { echo '<br>Calling PixaBay for new images for keyword:' . $keyword . '...page:' . $page; // api key $wp_automatic_pixabay_key = trim ( get_option ( 'wp_automatic_pixabay_key', '' ) ); if ($wp_automatic_pixabay_key == '') { echo '<br><span style="color:red">ERROR: PixaBay API key is required, please visit the plugin settings page and add it.</span>'; return false; } // nice, we have a key, lets call require_once ('inc/class.pixabay.php'); $pixabay = new pixabay ( $this->ch, $wp_automatic_pixabay_key ); $items = $pixabay->get_images ( $keyword, $page ); $success = 0; if (is_array ( $items ) && count ( $items ) != 0) { echo '<br>Found ' . count ( $items ) . ' PixaBay items to cache'; foreach ( $items as $item ) { // check duplicate $query = "SELECT * FROM {$this->wp_prefix}automatic_general WHERE item_id = '{$item->id}' limit 1 "; $res = $this->db->get_results ( $query ); // insert if (count ( $res ) == 0) { $query = "INSERT INTO {$this->wp_prefix}automatic_general ( item_id , item_status , item_data ,item_type) values ( '{$item->id}', '0', '{$item->previewURL}' ,'pb_$keyword') "; $q_result = $this->db->query ( $query ); $success ++; } } echo '<-- Saved ' . $success . ' unique... '; } else { echo '<-- Got nothing from PixaBay...'; } } /** * send an email notification if a required session/api key got invalid and need renewal * * @param unknown $expired_field * @param string $message */ function notify_the_admin($expired_field, $message = '') { // notification enabled for this field or not $wp_automatic_options = get_option ( 'wp_automatic_options', array () ); if (! in_array ( 'OPT_' . $expired_field, $wp_automatic_options )) return; // check if already mailed if so return $expired_value = get_option ( $expired_field, '' ); $latest_notification_expire_value = get_option ( 'wp_automatic_field_expire_' . $expired_field, '' ); if ($latest_notification_expire_value == $expired_value) { // already notified, lets return return; } else { // update last notification expire value update_option ( 'wp_automatic_field_expire_' . $expired_field, $expired_value ); } // get mail $wp_automatic_fb_email = trim ( get_option ( 'wp_automatic_fb_email', '' ) ); // if not found email, return if (! stristr ( $wp_automatic_fb_email, '@' )) return; // sending mail wp_mail ( $wp_automatic_fb_email, 'WP Automatic settings field expired, please update ', $message . ' on site ' . get_site_url () ); echo '<br>Notification email sent to update the value'; } /** * convert time from hh:mm:ss to only seconds */ function time_to_seconds($time) { if (stristr ( $time, ':' )) { $time_parts = explode ( ':', $time ); $seconds = $time_parts [0] * 60 * 60 + $time_parts [1] * 60 + $time_parts [2]; return $seconds; } else { return $time; } } /** * insert a comment but filters the data first if contains a banned word to skip * * @param unknown $data * @return boolean */ function wp_automatic_insert_comment($data) { if (in_array ( 'OPT_FILTER_COMMENT', $this->camp_opt )) { $cg_comment_filter_keys = $this->camp_general ['cg_comment_filter_keys']; $cg_comment_filter_keys_arr = explode ( "\n", $cg_comment_filter_keys ); $cg_comment_filter_keys_arr = array_filter ( $cg_comment_filter_keys_arr ); $pool = $data ['comment_author'] . ' ' . $data ['comment_content']; foreach ( $cg_comment_filter_keys_arr as $cg_comment_filter_key ) { if (stristr ( $pool, trim ( $cg_comment_filter_key ) )) { echo '<br><-- One comment (from ' . $data ['comment_author'] . ' ) skipped, contains the banned keyword:' . $cg_comment_filter_key; // skip this comment return false; } } } wp_insert_comment ( $data ); } //function to find prompt between [gpt3] and [/gpt3] then use the api_call function to get the content from the plugin API and replace the prompt with the content function openai_gpt3_tags_replacement($content){ //replace [gpt] with [gpt3] and [/gpt] with [/gpt3] $content = str_replace('[gpt]', '[gpt3]', $content); $content = str_replace('[/gpt]', '[/gpt3]', $content); // find all prompts preg_match_all('/\[gpt3\](.*?)\[\/gpt3\]/su', $content, $matches); // if found prompts replace them with the content from the plugin API if(count($matches[0]) > 0){ // loop through all prompts foreach($matches[0] as $index => $prompt){ // get the prompt text $prompt_text = $matches[1][$index]; // take a copy of prompt text $prompt_text_copy = $prompt_text; // get the content from the plugin API //try catch to catch any errors try{ // take a copy of the prompt to report now $prompt_text_to_report = $prompt_text; // if prompt_text_to_report is longer than 100 words, strip html tags and trim the text to 100 words if(str_word_count(($prompt_text_to_report)) > 100){ $prompt_text_to_report = wp_trim_words(strip_tags($prompt_text_to_report), 100); //add ... to the end of the text $prompt_text_to_report = $prompt_text_to_report . '...'; } // report the prompt text echo '<br>Processing Found AI prompt: ' . $prompt_text_to_report; //model $model = 'gpt-3.5-turbo'; if(in_array('OPT_OPENAI_CUSTOM', $this->camp_opt)){ $model = isset($this->camp_general['cg_openai_model']) ? $this->camp_general['cg_openai_model'] : 'gpt-3.5-turbo'; } echo '<br>- Using model: ' . $model; // model gpt-3.5-turbo is limited to 4000 tokens, taking precaution to limit the prompt text to 1400 words if($model == 'gpt-3.5-turbo'){ // if prompt_text contains the word summarize, strip html tags if(stristr($prompt_text, 'summarize')){ echo '<br>- Prompt text contains the word summarize, stripping html tags'; $prompt_text = strip_tags($prompt_text); } // check if prompt_text word count is longer than 1500 and if yes, strip html tags and trim the text to 1500 words $word_count = str_word_count(($prompt_text)); echo '<br>- Prompt text word count: ' . $word_count; if( $word_count > 1400){ echo '<br>- Prompt text word count is longer than 1400, trimming the text to 1400 words'; $prompt_text = wp_trim_words(strip_tags($prompt_text), 1400); } } // get prompt result from cache and if not, call the api $gpt3_content = $this->get_cached_prompt_result($prompt_text); // if prompt result is not found in cache, call the api if($gpt3_content == false){ // call the api // get the content from the plugin API $gpt3_content = $this->openai_gpt3($prompt_text); // save the api call result in the cache $this->cache_prompt_result($prompt_text, $gpt3_content); }else{ echo '<br>- Prompt result found in cache, skipping the api call'; //log reading the prompt from the cache with the prompt text $prompt_text_to_report = wp_trim_words(strip_tags($prompt_text_to_report), 100); wp_automatic_log_new('OpenAI prompt result found in cache: ' , $prompt_text_to_report); } // report the content length echo '<br>- AI returned content length: ' . strlen($gpt3_content); }catch(Exception $e){ // set openaiFailed to true $this->openaiFailed = true; // report the error echo '<br>- AI prompt error: ' . $e->getMessage(); // if error found replace the prompt with the error message $gpt3_content = $prompt_text; } // replace the prompt with the content from the plugin API $content = str_replace( '[gpt3]' . $prompt_text_copy . '[/gpt3]' , $gpt3_content , $content); } } return $content; } /** * function to recieve a prompt then read the apikey from the plugin setttings and then use the method api_call to get the content from the plugin API */ function openai_gpt3($prompt){ // get the apikey from the plugin settings $wp_automatic_openai_key = get_option('wp_automatic_openai_key'); // if the apikey is not found throw error if(trim($wp_automatic_openai_key) == ''){ throw new Exception('OpenAI API key not found, please add your OpenAI API key in the plugin settings'); } // prompt_to_log is a copy of the prompt to log in the plugin log but strip html and limit to 100 words $prompt_to_log = wp_trim_words(strip_tags($prompt), 100); //log the prompt and the content in the plugin log wp_automatic_log_new('OpenAI prompt: ' , $prompt_to_log); //try catch to catch any errors try{ // building args array $args = array('apiKey' => $wp_automatic_openai_key ,'prompt' => $prompt); // if option OPT_OPENAI_CUSTOM to add temprature and top_p is enabled, set them if(in_array('OPT_OPENAI_CUSTOM', $this->camp_opt)){ //temprature $cg_openai_temp = $this->camp_general['cg_openai_temp']; //top_p $cg_openai_top_p = $this->camp_general['cg_openai_top_p']; // if temprature is not empty , is a number between 0 and 2 trim it and set it in the args array if(trim($cg_openai_temp) != '' && is_numeric($cg_openai_temp) && $cg_openai_temp >= 0 && $cg_openai_temp <= 2){ $args['temperature'] = trim($cg_openai_temp); //parse the temprature to a float $args['temperature'] = floatval($args['temperature']); } //model $cg_openai_model = $this->camp_general['cg_openai_model']; // if model is not empty , trim it and set it in the args array if(trim($cg_openai_model) != ''){ $args['model'] = trim($cg_openai_model); } // if top_p is not empty , is a number between 0 and 1 trim it and set it in the args array if(trim($cg_openai_top_p) != '' && is_numeric($cg_openai_top_p) && $cg_openai_top_p >= 0 && $cg_openai_top_p <= 1){ $args['top_p'] = trim($cg_openai_top_p); //parse the top_p to a float $args['top_p'] = floatval($args['top_p']); } //presence_penalty $cg_openai_presence_penalty = $this->camp_general['cg_openai_presence_penalty']; // if presence_penalty is not empty , is a number between -2 and 2 trim it and set it in the args array if(trim($cg_openai_presence_penalty) != '' && is_numeric($cg_openai_presence_penalty) && $cg_openai_presence_penalty >= -2 && $cg_openai_presence_penalty <= 2){ $args['presence_penalty'] = trim($cg_openai_presence_penalty); //parse the presence_penalty to a float $args['presence_penalty'] = floatval($args['presence_penalty']); } //frequency_penalty $cg_openai_frequency_penalty = $this->camp_general['cg_openai_frequency_penalty']; // if frequency_penalty is not empty , is a number between -2 and 2 trim it and set it in the args array if(trim($cg_openai_frequency_penalty) != '' && is_numeric($cg_openai_frequency_penalty) && $cg_openai_frequency_penalty >= -2 && $cg_openai_frequency_penalty <= 2){ $args['frequency_penalty'] = trim($cg_openai_frequency_penalty); //parse the frequency_penalty to a float $args['frequency_penalty'] = floatval($args['frequency_penalty']); } } // get the content from the plugin API $gpt3_content = $this->api_call('openaiComplete' , $args); //log success in the plugin log with length of the content wp_automatic_log_new('OpenAI success: ' , 'length: ' . strlen($gpt3_content)); }catch(Exception $e){ //log the error in the plugin log wp_automatic_log_new('OpenAI error: ' , $e->getMessage()); // if error throw error throw new Exception($e->getMessage()); } return $gpt3_content; } /** * post request to get the content from the plugin API */ function api_call($function , $args){ //limit call count to openAI to 5 on the demo version if($function == 'openaiComplete' && WPAUTOMATIC_DEMO == true){ //get call count for openaiComplete from the options wp_automatic_openai_call_count $wp_automatic_openai_call_count = get_option('wp_automatic_openai_call_count',0); // if call count is more than 5 throw error if($wp_automatic_openai_call_count > 5){ throw new Exception('OpenAI API call limit reached, please upgrade to the premium version to remove this limit'); }else{ // add 1 to the call count $wp_automatic_openai_call_count++; // update the call count in the options wp_automatic_openai_call_count update_option('wp_automatic_openai_call_count',$wp_automatic_openai_call_count); } } // api url $api_url = 'http://api.valvepress.com/api/' . $function; // license check $wp_automatic_license_active = get_option('wp_automatic_license_active',''); // if not active throw error if(trim($wp_automatic_license_active) == ''){ // not active, throw error throw new Exception('License not active, please activate your license to use this feature'); } // get the license key $wp_automatic_license_key = get_option('wp_automatic_license',''); $wp_automatic_license_key = trim($wp_automatic_license_key); //add license to args array $args['license'] = $wp_automatic_license_key; //add domain name to args array $args['domain'] = $_SERVER ['HTTP_HOST']; //json creating $json = json_encode($args); //init curl $ch = curl_init(); //POST args to api url using curl and $this->ch as the handle curl_setopt($ch, CURLOPT_URL, $api_url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $json); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_REFERER, $_SERVER ['HTTP_HOST']); curl_setopt($ch, CURLOPT_TIMEOUT, 180); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 180); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_MAXREDIRS, 10); //post json curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json')); $server_output = curl_exec ($ch); //check if curl error if(curl_errno($ch)){ throw new Exception('Curl error: ' . curl_error($ch)); } //curl info $curl_info = curl_getinfo($ch); //close curl curl_close ($ch); //wrap in try catch try{ $server_output = json_decode($server_output,true); }catch(Exception $e){ throw new Exception('Error decoding server output'); } //check if server output is json if(is_array($server_output) && isset($server_output['error'])){ throw new Exception($server_output['error']); } //check if server output is json if(is_array($server_output) && isset($server_output['result'])){ return $server_output['result']; } //check if server output is not json if(!is_array($server_output)){ throw new Exception('Server output is not json'); } return $server_output['result']; } /** * function to get the prompt result from cache instead of calling openai * it md5 the prompt text and check if a custom field connected with the campaign ID exists with the 'wp_automatic_cached_prompt_' md5 as a key * if found return the cached prompt result * if not found return false */ function get_cached_prompt_result($prompt){ // get the campaign ID $campaign_id = $this->currentCampID; // if campaign ID is not found return false if(trim($campaign_id) == ''){ return false; } // md5 the prompt text $prompt_md5 = md5($prompt); $source_link_md5 = md5( $this->currentSourceLink) ; // get the cached prompt result from the custom field connected with the campaign ID $cached_prompt_result = get_post_meta($campaign_id, 'wp_automatic_cached_prompt_' . $source_link_md5 . '_' . $prompt_md5, true); // if cached prompt result is not found return false if(trim($cached_prompt_result) == ''){ return false; } // return the cached prompt result return $cached_prompt_result; } /** * function to cache the prompt result in a custom field connected with the campaign ID * it md5 the prompt text and save the cached prompt result in a custom field connected with the campaign ID with the 'wp_automatic_cached_prompt_' md5 as a key */ function cache_prompt_result($prompt, $result){ // get the campaign ID $campaign_id = $this->currentCampID; // if campaign ID is not found return false if(trim($campaign_id) == ''){ return false; } // md5 the prompt text $prompt_md5 = md5( $prompt); $source_link_md5 = md5( $this->currentSourceLink) ; // save the cached prompt result in a custom field connected with the campaign ID with the 'wp_automatic_cached_prompt_' md5 as a key update_post_meta($campaign_id, 'wp_automatic_cached_prompt_' . $source_link_md5 . '_' . $prompt_md5, $result); // return true return true; } /** * function to delete cached prompt results * it reads the current campaign id and deletes all custom fields who's key is suffixed with wp_automatic_cached_prompt_ */ function delete_cached_prompt_results(){ // get the campaign ID $campaign_id = $this->currentCampID; $source_link_md5 = md5( $this->currentSourceLink) ; // if campaign ID is not found return false if(trim($campaign_id) == ''){ return false; } // get all custom fields connected with the campaign ID $custom_fields = get_post_custom($campaign_id); // if no custom fields found return false if(!is_array($custom_fields)){ return false; } // loop through all custom fields $deleted = 0; foreach($custom_fields as $key => $value){ // if the key is suffixed with wp_automatic_cached_prompt_ delete it if(stristr($key, 'wp_automatic_cached_prompt_' . $source_link_md5 )){ delete_post_meta($campaign_id, $key); $deleted++; } } if($deleted > 0){ echo '<br>Deleted ' . $deleted . ' cached prompt results'; } // return true return true; } } // End ?>