get_all_options(); $defaults = $this->option_defaults(); foreach( $defaults as $name=>$info ){ if( empty($info['widget']) && isset($options[$name])){ // Update non-widget settings only $this->set_active_option($name,$options[$name]); } } // Go ahead and reset info also $this->set_private('results', array('photos'=>array(),'feed_found'=>false,'success'=>false,'userlink'=>'','hidden'=>'','message'=>'') ); } ////////////////////////////////////////////////////////////////////////////////////// /////////////////////// Feed Fetch Functions ////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// /** * Function for creating cache key * * @ Since 1.2.2 */ function key_maker( $array ){ if( isset($array['name']) && is_array( $array['info'] ) ){ $return = $array['name']; foreach( $array['info'] as $key=>$val ){ $return = $return."-".(!empty($val)?$val:$key); } $return = $this->filter_filename( $return ); return $return; } } /** * Filter string and remove specified characters * * @ Since 1.2.2 */ function filter_filename( $name ){ $name = @ereg_replace('[[:cntrl:]]', '', $name ); // remove ASCII's control characters $bad = array_merge( array_map('chr', range(0,31)), array("<",">",":",'"',"/","\\","|","?","*"," ",",","\'",".")); $return = str_replace($bad, "", $name); // Remove Windows filename prohibited characters return $return; } ////////////////////////////////////////////////////////////////////////////////////// ///////////////////////// Cache Functions ///////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////// /** * Functions for retrieving results from cache * * @ Since 1.2.4 * */ function retrieve_from_cache( $key ){ if ( !$this->check_active_option('cache_disable') ) { if( $this->cacheExists($key) ) { $results = $this->getCache($key); $results = @unserialize($results); if( count($results) ){ $results['hidden'] .= ''; $this->set_private('results',$results); if( $this->check_active_result('photos') ){ return true; } } } } return false; } /** * Functions for storing results in cache * * @ Since 1.2.4 * */ function store_in_cache( $key ){ if( $this->check_active_result('success') && !$this->check_active_option('disable_cache') ){ $cache_results = $this->get_private('results'); if(!is_serialized( $cache_results )) { $cache_results = @maybe_serialize( $cache_results ); } $this->putCache($key, $cache_results); $cachetime = $this->get_option( 'cache_time' ); if( !empty($cachetime) && is_numeric($cachetime) ){ $this->setExpiryInterval( $cachetime*60*60 ); } } } /** * Functions for caching results and clearing cache * * @since 1.1.0 * */ function setCacheDir($val) { $this->set_private('cacheDir',$val); } function setExpiryInterval($val) { $this->set_private('expiryInterval',$val); } function getExpiryInterval($val) { return (int)$this->get_private('expiryInterval'); } function cacheExists($key) { $filename_cache = $this->get_private('cacheDir') . '/' . $key . '.cache'; //Cache filename $filename_info = $this->get_private('cacheDir') . '/' . $key . '.info'; //Cache info if (file_exists($filename_cache) && file_exists($filename_info)) { $cache_time = file_get_contents ($filename_info) + (int)$this->get_private('expiryInterval'); //Last update time of the cache file $time = time(); //Current Time $expiry_time = (int)$time; //Expiry time for the cache if ((int)$cache_time >= (int)$expiry_time) {//Compare last updated and current time return true; } } return false; } function getCache($key) { $filename_cache = $this->get_private('cacheDir') . '/' . $key . '.cache'; //Cache filename $filename_info = $this->get_private('cacheDir') . '/' . $key . '.info'; //Cache info if (file_exists($filename_cache) && file_exists($filename_info)) { $cache_time = file_get_contents ($filename_info) + (int)$this->get_private('expiryInterval'); //Last update time of the cache file $time = time(); //Current Time $expiry_time = (int)$time; //Expiry time for the cache if ((int)$cache_time >= (int)$expiry_time){ //Compare last updated and current time return file_get_contents ($filename_cache); //Get contents from file } } return null; } function putCache($key, $content) { $time = time(); //Current Time $dir = $this->get_private('cacheDir'); if ( !file_exists($dir) ){ @mkdir($dir); $cleaning_info = $dir . '/cleaning.info'; //Cache info @file_put_contents ($cleaning_info , $time); // save the time of last cache update } if ( file_exists($dir) && is_dir($dir) ){ $filename_cache = $dir . '/' . $key . '.cache'; //Cache filename $filename_info = $dir . '/' . $key . '.info'; //Cache info @file_put_contents($filename_cache , $content); // save the content @file_put_contents($filename_info , $time); // save the time of last cache update } } function clearAllCache() { $dir = $this->get_private('cacheDir') . '/'; if(is_dir($dir)){ $opendir = @opendir($dir); while(false !== ($file = readdir($opendir))) { if($file != "." && $file != "..") { if(file_exists($dir.$file)) { $file_array = @explode('.',$file); $file_type = @array_pop( $file_array ); // only remove cache or info files if( 'cache' == $file_type || 'info' == $file_type){ @chmod($dir.$file, 0777); @unlink($dir.$file); } } /*elseif(is_dir($dir.$file)) { @chmod($dir.$file, 0777); @chdir('.'); @destroy($dir.$file.'/'); @rmdir($dir.$file); }*/ } } @closedir($opendir); } } function cleanCache() { $cleaning_info = $this->get_private('cacheDir') . '/cleaning.info'; //Cache info if (file_exists($cleaning_info)) { $cache_time = file_get_contents ($cleaning_info) + (int)$this->cleaningInterval; //Last update time of the cache cleaning $time = time(); //Current Time $expiry_time = (int)$time; //Expiry time for the cache if ((int)$cache_time < (int)$expiry_time){ //Compare last updated and current time // Clean old files $dir = $this->get_private('cacheDir') . '/'; if(is_dir($dir)){ $opendir = @opendir($dir); while(false !== ($file = readdir($opendir))) { if($file != "." && $file != "..") { if(is_dir($dir.$file)) { //@chmod($dir.$file, 0777); //@chdir('.'); //@destroy($dir.$file.'/'); //@rmdir($dir.$file); } elseif(file_exists($dir.$file)) { $file_array = @explode('.',$file); $file_type = @array_pop( $file_array ); $file_key = @implode( $file_array ); if( $file_type && $file_key && 'info' == $file_type){ $filename_cache = $dir . $file_key . '.cache'; //Cache filename $filename_info = $dir . $file_key . '.info'; //Cache info if (file_exists($filename_cache) && file_exists($filename_info)) { $cache_time = file_get_contents ($filename_info) + (int)$this->cleaningInterval; //Last update time of the cache file $expiry_time = (int)$time; //Expiry time for the cache if ((int)$cache_time < (int)$expiry_time) {//Compare last updated and current time @chmod($filename_cache, 0777); @unlink($filename_cache); @chmod($filename_info, 0777); @unlink($filename_info); } } /*elseif (file_exists($filename_cache) && file_exists($filename_info)) { $cache_time = file_get_contents ($filename_info) + (int)$this->cleaningInterval; //Last update time of the cache file $expiry_time = (int)$time; //Expiry time for the cache if ((int)$cache_time < (int)$expiry_time) {//Compare last updated and current time @chmod($filename_cache, 0777); @unlink($filename_cache); @chmod($filename_info, 0777); @unlink($filename_info); } }*/ } } } } @closedir($opendir); } @file_put_contents ($cleaning_info , $time); // save the time of last cache cleaning } } } /* function putCacheImage($image_url){ $time = time(); //Current Time if ( ! file_exists($this->cacheDir) ){ @mkdir($this->cacheDir); $cleaning_info = $this->cacheDir . '/cleaning.info'; //Cache info @file_put_contents ($cleaning_info , $time); // save the time of last cache update } if ( file_exists($this->cacheDir) && is_dir($this->cacheDir) ){ //replace with your cache directory $dir = $this->cacheDir.'/'; //get the name of the file $exploded_image_url = explode("/",$image_url); $image_filename = end($exploded_image_url); $exploded_image_filename = explode(".",$image_filename); $name = current($exploded_image_filename); $extension = end($exploded_image_filename); //make sure its an image if($extension=="gif"||$extension=="jpg"||$extension=="png"){ //get the remote image $image_to_fetch = @file_get_contents($image_url); //save it $filename_image = $dir . $image_filename; $filename_info = $dir . $name . '.info'; //Cache info $local_image_file = @fopen($filename_image, 'w+'); @chmod($dir.$image_filename,0755); @fwrite($local_image_file, $image_to_fetch); @fclose($local_image_file); @file_put_contents($filename_info , $time); // save the time of last cache update } } } function getImageCache($image_url) { $dir = $this->cacheDir.'/'; $exploded_image_url = explode("/",$image_url); $image_filename = end($exploded_image_url); $exploded_image_filename = explode(".",$image_filename); $name = current($exploded_image_filename); $filename_image = $dir . $image_filename; $filename_info = $dir . $name . '.info'; //Cache info if (file_exists($filename_image) && file_exists($filename_info)) { $cache_time = @file_get_contents ($filename_info) + (int)$this->expiryInterval; //Last update time of the cache file $time = time(); //Current Time $expiry_time = (int)$time; //Expiry time for the cache if ((int)$cache_time >= (int)$expiry_time){ //Compare last updated and current time return $this->cacheUrl.'/'.$image_filename; // Return image URL }else{ $local_image_file = @fopen($filename_image, 'w+'); @chmod($dir.$image_filename,0755); @fwrite($local_image_file, $image_to_fetch); @fclose($local_image_file); @file_put_contents($filename_info , $time); // save the time of last cache update } }elseif( $this->cacheAttempts < $this->cacheLimit ){ $this->putCacheImage($image_url); $this->cacheAttempts++; } return null; } */ } /** ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * * AlpineBot Tertiary * * Display functions * Contains ONLY UNIQUE functions * * ########################################################################################## */ class PhotoTileForPinterestBotTertiary extends PhotoTileForPinterestBotSecondary{ ////////////////////////////////////////////////////////////////////////////////////// ////////////////// Unique Feed Fetch Functions ///////////////////////// ////////////////////////////////////////////////////////////////////////////////////// /** * Alpine PhotoTile for Pinterest: Photo Retrieval Function. * The PHP for retrieving content from Pinterest. * * @ Since 1.0.0 * @ Updated 1.2.5 */ function photo_retrieval(){ $pinterest_options = $this->get_private('options'); $defaults = $this->option_defaults(); $pinterest_uid = (isset($pinterest_options['pinterest_user_id'])?$pinterest_options['pinterest_user_id']:''); $key_input = array( 'name' => 'pinterest', 'info' => array( 'vers' => $this->get_private('vers'), 'src' => (isset($pinterest_options['pinterest_source'])?$pinterest_options['pinterest_source']:''), 'uid' => $pinterest_uid, 'board' => (isset($pinterest_options['pinterest_user_board'])?$pinterest_options['pinterest_user_board']:''), 'num' => (isset($pinterest_options['pinterest_photo_number'])?$pinterest_options['pinterest_photo_number']:''), 'off' => (isset($pinterest_options['photo_feed_offset'])?$pinterest_options['photo_feed_offset']:''), 'link' => (isset($pinterest_options['pinterest_display_link'])?$pinterest_options['pinterest_display_link']:''), 'text' => (isset($pinterest_options['pinterest_display_link_text'])?$pinterest_options['pinterest_display_link_text']:''), 'style' => (isset($pinterest_options['pinterest_display_link_style'])?$pinterest_options['pinterest_display_link_style']:''), 'size' => (isset($pinterest_options['pinterest_photo_size'])?$pinterest_options['pinterest_photo_size']:'') ) ); $key = $this->key_maker( $key_input ); // Make Key if( $this->retrieve_from_cache( $key ) ){ return; } // Check Cache $this->set_size_id(); // Set image size (translate size to Pinterest id) $this->append_active_result('hidden',''); if( function_exists('simplexml_load_string') ) { $this->try_simplexmlstring(); } if( !$this->check_active_result('success') && function_exists('simplexml_load_file') ) { $this->try_simplexml(); } if ( !$this->check_active_result('success') ) { $this->try_wp_fetch_feed(); } if( $this->check_active_result('success') ){ if( !empty($pinterest_options['pinterest_display_link']) ) { $linkStyle = isset($pinterest_options['pinterest_display_link_style'])?$pinterest_options['pinterest_display_link_style']:''; $userlink = ''; if($linkStyle == 'large') { $userlink .= ''; }elseif ($linkStyle == 'medium') { $userlink .= ''; }elseif ($linkStyle == 'small') { $userlink .= ''; }elseif ($linkStyle == 'tiny') { $userlink .= ''; }elseif ($linkStyle == 'text' && isset($pinterest_options['pinterest_display_link_text']) ) { $userlink .= ''; }else { $userlink .= ''; } $this->set_active_result('userlink',$userlink); }else{ $this->set_active_result('userlink',null); } }else{ if( $this->check_active_result('feed_found') ){ $this->append_active_result('message','- Pinterest feed was successfully retrieved, but no photos found.'); }else{ $this->append_active_result('message','- Please recheck your ID.'); } } $this->store_in_cache( $key ); // Store in cache } /** * Function for forming Pinterest request * * @ Since 1.2.4 */ function get_pinterest_request(){ $options = $this->get_private('options'); $pinterest_uid = empty($options['pinterest_user_id']) ? '' : $options['pinterest_user_id']; $pinterest_src = empty($options['pinterest_source']) ? '' : $options['pinterest_source']; if( 'board' == $pinterest_src ){ $pinterest_board = empty($options['pinterest_user_board']) ? '' : $options['pinterest_user_board']; $request = 'http://pinterest.com/'.$pinterest_uid.'/'.$pinterest_board.'/rss'; }else{ $request = 'http://pinterest.com/'.$pinterest_uid.'/feed.rss'; } return $request; } /** * Determine image size id * * @ Since 1.2.4 * @ Updated 1.2.5 */ function set_size_id(){ $this->set_active_option('size_id','/192'); // Default is 192 switch ($this->get_active_option('pinterest_photo_size')) { case 75: $this->set_active_option('size_id','/75x75'); break; case 192: $this->set_active_option('size_id','/192'); break; case 554: $this->set_active_option('size_id','/550'); break; case 600: $this->set_active_option('size_id','/600'); break; case 930: $this->set_active_option('size_id','/600'); break; } } /** * Function for making Pinterest RSS request using wp_remote_get and simplexml_load_string() * * @ Since 1.2.4 * @ Updated 1.2.5 */ function try_simplexmlstring(){ $options = $this->get_private('options'); $request = $this->get_pinterest_request(); $xml_string = ''; // No longer write out curl_init and user WP API instead $response = wp_remote_get($request, array( 'method' => 'GET', 'timeout' => 20 ) ); $this->append_active_result('hidden',''); if( is_wp_error( $response ) || !isset($response['body']) ) { $this->append_active_result('hidden',''); if ( is_wp_error( $response ) ) { $error_string = $response->get_error_message(); $this->append_active_result('hidden',''); } return false; }else{ $xml_string = $response['body']; } $_pinterest_xml = @simplexml_load_string( $xml_string ); // @ is shut-up operator if( $_pinterest_xml===false || empty($_pinterest_xml) ){ $this->append_active_result('hidden',''); $this->set_active_result('success',false); }else{ $title = isset($_pinterest_xml->channel->title)?$_pinterest_xml->channel->title:''; $link = isset($_pinterest_xml->channel->link)?$_pinterest_xml->channel->link:''; $channel = isset($_pinterest_xml->channel)?$_pinterest_xml->channel:''; $items = isset($_pinterest_xml->channel->item)?$_pinterest_xml->channel->item:''; if( empty($_pinterest_xml) || empty($channel) || empty($items) ){ $this->append_active_result('hidden',''); $this->set_active_result('success',false); }else{ $photos = array(); $size_id = $this->get_active_option('size_id'); foreach( $_pinterest_xml->channel->item as $p ) { // This will prevent empty images from being added to linkurl. if( count($photos)<$options['pinterest_photo_number'] ){ // list of link urls $url = isset($p->link)?(string) $p->link:''; // ->i is equivalent of ['i'] for objects $content = isset($p->description)?(string) $p->description:''; if( !empty($url) && !empty($content) ){ $the_photo = array(); $the_photo['image_link'] = $url; $the_photo['image_title'] = isset($p->title)?(string) $p->title:''; $the_photo['image_title'] = str_replace("'",'',$the_photo['image_title']); $the_photo['image_caption'] = ''; // For Reference: regex references and http://php.net/manual/en/function.preg-match.php // Using the RSS feed will require some manipulation to get the image url from pinterest; // preg_replace is bad at skipping lines so we'll start with preg_match // i sets letters in upper or lower case, @preg_match( "/img(.*?)>/i", $content , $matches ); // First, get image from feed. // Next, strip away everything surrounding the source url. // . means any expression, and + means repeat previous if( !empty( $matches[0] ) ){ $photourl_current = @preg_replace(array('/(.*)src="/i','/"(.*)/') ,'', $matches[0] ); // It is unclear what Pinterest's file structure is. It keeps changing. $the_photo['image_source'] = @str_replace('/192/', $size_id.'/', $photourl_current); //if( $size_id == '/75' && (strpos($the_photo['image_source'],'.pinimg.com') === false)){ if( $size_id == '/75x75' ){ $the_photo['image_source'] = @str_replace('/192x/', '/75x75/', $the_photo['image_source']); }else{ $the_photo['image_source'] = @str_replace('/192x/', $size_id.'x/', $the_photo['image_source']); } $the_photo['image_original'] = @str_replace('/192/','/600/', $photourl_current); $the_photo['image_original'] = @str_replace('/192x/','/600x/', $the_photo['image_original']); $photos[] = $the_photo; // Finally, change the size. [] specifies single character and \w is any word character //$the_photo['image_source'] = @preg_replace('/[_]\w[.]/', $size_id, $photourl_current ); //$originalurl[$s] = @preg_replace('/[_]\w[.]/', '.', $photourl_current ); } } }else{ break; } } // End foreach if( count($photos) ){ // If content successfully fetched, generate output... $this->set_active_result('photos',$photos); $this->set_active_result('success',true); $this->set_active_result('feed_found',true); $this->append_active_result('hidden',''); }else{ $this->set_active_result('success',false); $this->set_active_result('feed_found',true); $this->append_active_result('hidden',''); } } } } /** * Function for making Pinterest RSS request using simplexml_load_file() * * @ Since 1.2.4 * @ Updated 1.2.5 */ function try_simplexml(){ // Retrieve content using wp_remote_get and PHP_serial $request = $this->get_pinterest_request(); $options = $this->get_private('options'); $_pinteresturl = @urlencode( $request ); // just for compatibility $_pinterest_xml = @simplexml_load_file( $_pinteresturl,"SimpleXMLElement",LIBXML_NOCDATA); // @ is shut-up operator if( $_pinterest_xml===false || empty($_pinterest_xml) ){ $this->append_active_result('hidden',''); $this->set_active_result('success',false); }else{ $title = isset($_pinterest_xml->channel->title)?$_pinterest_xml->channel->title:''; $link = isset($_pinterest_xml->channel->link)?$_pinterest_xml->channel->link:''; $channel = isset($_pinterest_xml->channel)?$_pinterest_xml->channel:''; $items = isset($_pinterest_xml->channel->item)?$_pinterest_xml->channel->item:''; if( empty($_pinterest_xml) || empty($channel) || empty($items) ){ $this->append_active_result('hidden',''); $this->set_active_result('success',false); }else{ $photos = array(); $size_id = $this->get_active_option('size_id'); foreach( $_pinterest_xml->channel->item as $p ) { // This will prevent empty images from being added to linkurl. if( count($photos)<$options['pinterest_photo_number'] ){ // list of link urls $url = isset($p->link)?(string) $p->link:''; // ->i is equivalent of ['i'] for objects $content = isset($p->description)?(string) $p->description:''; if( !empty($url) && !empty($content) ){ $the_photo = array(); $the_photo['image_link'] = $url; $the_photo['image_title'] = isset($p->title)?(string) $p->title:''; $the_photo['image_title'] = str_replace("'",'',$the_photo['image_title']); $the_photo['image_caption'] = ''; // For Reference: regex references and http://php.net/manual/en/function.preg-match.php // Using the RSS feed will require some manipulation to get the image url from pinterest; // preg_replace is bad at skipping lines so we'll start with preg_match // i sets letters in upper or lower case, @preg_match( "/img(.*?)>/i", $content , $matches ); // First, get image from feed. // Next, strip away everything surrounding the source url. // . means any expression, and + means repeat previous if( !empty( $matches[0] ) ){ $photourl_current = @preg_replace(array('/(.*)src="/i','/"(.*)/') ,'', $matches[0] ); // It is unclear what Pinterest's file structure is. It keeps changing. $the_photo['image_source'] = @str_replace('/192/', $size_id.'/', $photourl_current); //if( $size_id == '/75' && (strpos($the_photo['image_source'],'.pinimg.com') === false)){ if( $size_id == '/75x75' ){ $the_photo['image_source'] = @str_replace('/192x/', '/75x75/', $the_photo['image_source']); }else{ $the_photo['image_source'] = @str_replace('/192x/', $size_id.'x/', $the_photo['image_source']); } $the_photo['image_original'] = @str_replace('/192/','/600/', $photourl_current); $the_photo['image_original'] = @str_replace('/192x/','/600x/', $the_photo['image_original']); $photos[] = $the_photo; // Finally, change the size. [] specifies single character and \w is any word character //$the_photo['image_source'] = @preg_replace('/[_]\w[.]/', $size_id, $photourl_current ); //$originalurl[$s] = @preg_replace('/[_]\w[.]/', '.', $photourl_current ); } } }else{ break; } } // End foreach if( count($photos) ){ // If content successfully fetched, generate output... $this->set_active_result('photos',$photos); $this->set_active_result('success',true); $this->set_active_result('feed_found',true); $this->append_active_result('hidden',''); }else{ $this->set_active_result('success',false); $this->set_active_result('feed_found',true); $this->append_active_result('hidden',''); } } } } /** * Function for making Pinterest RSS request with fetch_feed() * * RSS may actually be safest approach since it does not require PHP server extensions, * but I had to build my own method for parsing SimplePie Object so I will keep it as the last option. * * @ Since 1.2.5 */ function try_wp_fetch_feed(){ $request = $this->get_pinterest_request(); $options = $this->get_private('options'); $rss = false; include_once( ABSPATH . WPINC . '/feed.php' ); if( !function_exists('return_noCache') ){ function return_noCache( $seconds ){ // change the default feed cache recreation period to 30 minutes return 1800; } } add_filter( 'wp_feed_cache_transient_lifetime' , 'return_noCache' ); if( !function_exists('fetch_feed') ){ $this->append_active_result('hidden',''); } if( function_exists('fetch_feed') ){ $rss = @fetch_feed( $request ); }else{ $this->append_active_result('hidden',''); } remove_filter( 'wp_feed_cache_transient_lifetime' , 'return_noCache' ); if( is_wp_error( $rss ) || empty($rss) ){ // If it did not work, report and try using SimplePie directly if( is_wp_error( $rss ) ){ $error_string = $rss->get_error_message(); $this->append_active_result('hidden',''); $this->append_active_result('hidden',''); } // Try somethin else include_once (ABSPATH . WPINC . '/class-feed.php'); if( class_exists('SimplePie') ){ $this->append_active_result('hidden',''); $rss = new SimplePie(); $rss->set_feed_url( $request ); $rss->force_feed(true); $rss->enable_cache(false); $rss->set_timeout(30); $rss->init(); $rss->handle_content_type(); }else{ $this->append_active_result('hidden',''); } } if( is_wp_error( $rss ) || !empty($rss->error) || empty($rss) ){ // Check that the object is created correctly $this->set_active_result('success',false); $this->set_active_result('feed_found',false); $this->append_active_result('hidden',''); if ( is_wp_error( $rss ) ) { $error_string = $rss->get_error_message(); $this->append_active_result('hidden',''); }elseif( !empty($rss->error) ){ $this->append_active_result('hidden',''); }else{ $this->append_active_result('hidden',''); } }else{ // Bulldoze through the feed to find the items $results = array(); $title = $this->special_array_search($rss,'title'); $title = isset($title['0']['data'])?$title['0']['data']:''; $link = $this->special_array_search($rss,'link'); $link = isset($link['0']['data'])?$link['0']['data']:''; $rss_data = $this->special_array_search($rss,'item'); $photos = array(); $size_id = $this->get_active_option('size_id'); if( !empty($rss_data) && is_array($rss_data) ){ // Check again foreach ( $rss_data as $item ) { if( count($photos)<$options['pinterest_photo_number'] ){ $content = isset($item['child']['']['description']['0']['data'])?$item['child']['']['description']['0']['data']:''; if( !empty($content) ){ $the_photo = array(); $the_photo['image_link'] = isset($item['child']['']['link']['0']['data'])?$item['child']['']['link']['0']['data']:''; $the_photo['image_title'] = isset($item['child']['']['title']['0']['data'])?$item['child']['']['title']['0']['data']:''; $the_photo['image_title'] = str_replace("'",'',$the_photo['image_title']); $the_photo['image_caption'] = ''; // For Reference: regex references and http://php.net/manual/en/function.preg-match.php // Using the RSS feed will require some manipulation to get the image url from pinterest; // preg_replace is bad at skipping lines so we'll start with preg_match // i sets letters in upper or lower case, s sets . to anything @preg_match("/set_active_result('photos',$photos); $this->set_active_result('success',true); $this->set_active_result('feed_found',true); $this->append_active_result('hidden',''); }else{ $this->set_active_result('success',false); $this->set_active_result('feed_found',true); $this->append_active_result('hidden',''); } } } /** * Simple Array/Object searcher * * @ Since 1.2.5 */ function special_array_search($array, $find){ $results = null; foreach ($array as $key=>$value){ if( is_string($key) && $key==$find){ return $value; } elseif(is_array($value)){ $results = $this->special_array_search($value, $find); } elseif(is_object($value)){ $sub = $array->$key; $results = $this->special_array_search($sub, $find); } // If found, return if(!empty($results)){return $results;} } return $results; } } /** ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * ############################################################################################################################################## * * AlpineBot Display * * Display functions * Try to keep only UNIVERSAL functions * */ class PhotoTileForPinterestBot extends PhotoTileForPinterestBotTertiary{ /** * Function for printing vertical style * * @ Since 0.0.1 * @ Updated 1.2.5 */ function display_vertical(){ $this->set_private('out',''); // Clear any output; $this->update_count(); // Check number of images found $this->randomize_display(); $opts = $this->get_private('options'); $src = $this->get_private('src'); $wid = $this->get_private('wid'); $this->add('
'); // Align photos $css = $this->get_parent_css(); $this->add('
'); for($i = 0;$i<$opts[$src.'_photo_number'];$i++){ $css = "margin:1px 0 5px 0;padding:0;max-width:100%;"; $pin = $this->get_option( 'pinterest_pin_it_button' ); $this->add_image($i,$css,$pin); // Add image } $this->add_credit_link(); $this->add('
'); // Close vertical-parent $this->add_user_link(); $this->add('
'); // Close container $this->add('
'); $highlight = $this->get_option("general_highlight_color"); $highlight = (!empty($highlight)?$highlight:'#64a2d8'); $this->add_lightbox_call(); if( !empty($opts['style_shadow']) || !empty($opts['style_border']) || !empty($opts['style_highlight']) ){ $this->add(" "); } } /** * Function for printing cascade style * * @ Since 0.0.1 * @ Updated 1.2.5 */ function display_cascade(){ $this->set_private('out',''); // Clear any output; $this->update_count(); // Check number of images found $this->randomize_display(); $opts = $this->get_private('options'); $wid = $this->get_private('wid'); $src = $this->get_private('src'); $this->add('
'); // Align photos $css = $this->get_parent_css(); $this->add('
'); for($col = 0; $col<$opts['style_column_number'];$col++){ $this->add('
'); $this->add('
'); for($i = $col;$i<$opts[$src.'_photo_number'];$i+=$opts['style_column_number']){ $css = "margin:1px 0 5px 0;padding:0;max-width:100%;"; $pin = $this->get_option( 'pinterest_pin_it_button' ); $this->add_image($i,$css,$pin); // Add image } $this->add('
'); } $this->add('
'); $this->add_credit_link(); $this->add('
'); // Close cascade-parent $this->add('
'); $this->add_user_link(); // Close container $this->add('
'); $this->add('
'); $highlight = $this->get_option("general_highlight_color"); $highlight = (!empty($highlight)?$highlight:'#64a2d8'); $this->add_lightbox_call(); if( !empty($opts['style_shadow']) || !empty($opts['style_border']) || !empty($opts['style_highlight']) ){ $this->add(" "); } } /** * Function for printing and initializing JS styles * * @ Since 0.0.1 * @ Updated 1.2.5 */ function display_hidden(){ $this->set_private('out',''); // Clear any output; $this->update_count(); // Check number of images found $this->randomize_display(); $opts = $this->get_private('options'); $wid = $this->get_private('wid'); $src = $this->get_private('src'); $this->add('
'); // Align photos $css = $this->get_parent_css(); $this->add('
'); $this->add(''); $this->add_credit_link(); $this->add('
'); // Close parent $this->add_user_link(); $this->add('
'); // Close container $disable = $this->get_option("general_loader"); $highlight = $this->get_option("general_highlight_color"); $highlight = (!empty($highlight)?$highlight:'#64a2d8'); $lightbox = $this->get_option('general_lightbox'); $prevent = $this->get_option('general_lightbox_no_load'); $hasLight = false; if( empty($prevent) && isset($opts[$this->get_private('src').'_image_link_option']) && $opts[$src.'_image_link_option'] == 'fancybox' ){ $lightScript = $this->get_script( $lightbox ); $lightStyle = $this->get_style( $lightbox ); if( !empty($lightScript) && !empty($lightStyle) ){ $hasLight = true; } } $this->add('"); } /** * Update photo number count * * @ Since 1.2.2 */ function update_count(){ $src = $this->get_private('src'); $found = ( $this->check_active_result('photos') && is_array($this->get_active_result('photos') ))?count( $this->get_active_result('photos') ):0; $num = $this->get_active_option( $src.'_photo_number' ); $this->set_active_option( $src.'_photo_number', min( $num, $found ) ); } /** * Function for shuffleing photo feed * * @ Since 1.2.4 */ function randomize_display(){ if( $this->check_active_option('photo_feed_shuffle') && function_exists('shuffle') ){ // Shuffle the results $photos = $this->get_active_result('photos'); @shuffle( $photos ); $this->set_active_result('photos',$photos); } } /** * Get Parent CSS * * @ Since 1.2.2 * @ Updated 1.2.5 */ function get_parent_css(){ $max = $this->check_active_option('widget_max_width')?$this->get_active_option('widget_max_width'):100; $return = 'width:100%;max-width:'.$max.'%;padding:0px;'; $align = $this->check_active_option('widget_alignment')?$this->get_active_option('widget_alignment'):''; if( 'center' == $align ){ // Optional: Set text alignment (left/right) or center $return .= 'margin:0px auto;text-align:center;'; } elseif( 'right' == $align || 'left' == $align ){ // Optional: Set text alignment (left/right) or center $return .= 'float:' . $align . ';text-align:' . $align . ';'; } else{ $return .= 'margin:0px auto;text-align:center;'; } return $return; } /** * Add Image Function * * @ Since 1.2.2 * @ Updated 1.2.4 ** Possible change: place original image as 'alt' and load image as needed */ function add_image($i,$css="",$pin=false){ $light = $this->get_option( 'general_lightbox' ); $title = $this->get_photo_info($i,'image_title'); $src = $this->get_photo_info($i,'image_source'); $shadow = ($this->check_active_option('style_shadow')?'AlpinePhotoTiles-img-shadow':'AlpinePhotoTiles-img-noshadow'); $border = ($this->check_active_option('style_border')?'AlpinePhotoTiles-img-border':'AlpinePhotoTiles-img-noborder'); $curves = ($this->check_active_option('style_curve_corners')?'AlpinePhotoTiles-img-corners':'AlpinePhotoTiles-img-nocorners'); $highlight = ($this->check_active_option('style_highlight')?'AlpinePhotoTiles-img-highlight':'AlpinePhotoTiles-img-nohighlight'); $onContextMenu = ($this->check_active_option('general_disable_right_click')?'onContextMenu="return false;"':''); if( $pin ){ $this->add('
'); } //$src = $this->getImageCache( $this->photos[$i]['image_source'] ); //$src = ( $src?$src:$this->photos[$i]['image_source']); $has_link = $this->get_link($i); // Add link $this->add('add('title='."'". $title ."'".' alt='."'". $title ."' "); // Careful about caps with "" $this->add('border="0" hspace="0" vspace="0" style="'.$css.'" '.$onContextMenu.' />'); // Override the max-width set by theme if( $has_link ){ $this->add(''); } // Close link if( $pin ){ $original = $this->get_photo_info($i,'image_original'); $this->add(''); $this->add('
'); $this->add('
'); } } /** * Get Image Link * * @ Since 1.2.2 */ function get_link($i){ $src = $this->get_private('src'); $link = $this->get_active_option($src.'_image_link_option'); $url = $this->get_active_option('custom_link_url'); $phototitle = $this->get_photo_info($i,'image_title'); $photourl = $this->get_photo_info($i,'image_source'); $linkurl = $this->get_photo_info($i,'image_link'); $originalurl = $this->get_photo_info($i,'image_original'); if( 'original' == $link && !empty($photourl) ){ $this->add(''); return true; }elseif( ($src == $link || '1' == $link) && !empty($linkurl) ){ $this->add(''); return true; }elseif( 'link' == $link && !empty($url) ){ $this->add(''); return true; }elseif( 'fancybox' == $link && !empty($originalurl) ){ $light = $this->get_option( 'general_lightbox' ); $this->add(''); return true; } return false; } /** * Credit Link Function * * @ Since 1.2.2 */ function add_credit_link(){ if( !$this->get_active_option('widget_disable_credit_link') ){ $this->add(''); } } /** * User Link Function * * @ Since 1.2.2 */ function add_user_link(){ if( $this->check_active_result('userlink') ){ $userlink = $this->get_active_result('userlink'); if($this->get_active_option('widget_alignment') == 'center'){ // Optional: Set text alignment (left/right) or center $this->add(''); } else{ $this->add(''); $this->add('
'); // Only breakline if floating } } } /** * Setup Lightbox Call * * @ Since 1.2.3 * @ Updated 1.2.5 */ function add_lightbox_call(){ $src = $this->get_private('src'); $lightbox = $this->get_option('general_lightbox'); $prevent = $this->get_option('general_lightbox_no_load'); $check = ($lightbox=='fancybox'?'fancybox':($lightbox=='prettyphoto'?'prettyPhoto':($lightbox=='colorbox'?'colorbox':'fancyboxForAlpine'))); if( empty($prevent) && $this->check_active_option($src.'_image_link_option') && $this->get_active_option($src.'_image_link_option') == 'fancybox' ){ $lightScript = $this->get_script( $lightbox ); $lightStyle = $this->get_style( $lightbox ); if( !empty($lightScript) && !empty($lightStyle) ){ $this->add(" "); } } } /** * Get Lightbox Call * * @ Since 1.2.3 * @ Updated 1.2.5 */ function get_lightbox_call(){ $this->set_lightbox_rel(); $lightbox = $this->get_option('general_lightbox'); $lightbox_style = $this->get_option('general_lightbox_params'); $lightbox_style = str_replace( array("{","}"), "", $lightbox_style); $setRel = "jQuery( '#".$this->get_private('wid')."-AlpinePhotoTiles_container a.AlpinePhotoTiles-lightbox' ).attr( 'rel', '".$this->get_active_option('rel')."' );"; if( 'fancybox' == $lightbox ){ $default = "titleShow: false, overlayOpacity: .8, overlayColor: '#000', titleShow: true, titlePosition: 'inside'"; $lightbox_style = (!empty($lightbox_style)? $default.','.$lightbox_style : $default ); return $setRel."if(jQuery().fancybox){jQuery( 'a[rel^=\'".$this->get_active_option('rel')."\']' ).fancybox( { ".$lightbox_style." } );}"; }elseif( 'prettyphoto' == $lightbox ){ //theme: 'pp_default', /* light_rounded / dark_rounded / light_square / dark_square / facebook $default = "theme:'facebook',social_tools:false, show_title:true"; $lightbox_style = (!empty($lightbox_style)? $default.','.$lightbox_style : $default ); return $setRel."if(jQuery().prettyPhoto){jQuery( 'a[rel^=\'".$this->get_active_option('rel')."\']' ).prettyPhoto({ ".$lightbox_style." });}"; }elseif( 'colorbox' == $lightbox ){ $default = "maxHeight:'85%'"; $lightbox_style = (!empty($lightbox_style)? $default.','.$lightbox_style : $default ); return $setRel."if(jQuery().colorbox){jQuery( 'a[rel^=\'".$this->get_active_option('rel')."\']' ).colorbox( {".$lightbox_style."} );}"; }elseif( 'alpine-fancybox' == $lightbox ){ $default = "titleShow: false, overlayOpacity: .8, overlayColor: '#000', titleShow: true, titlePosition: 'inside'"; $lightbox_style = (!empty($lightbox_style)? $default.','.$lightbox_style : $default ); return $setRel."if(jQuery().fancyboxForAlpine){jQuery( 'a[rel^=\'".$this->get_active_option('rel')."\']' ).fancyboxForAlpine( { ".$lightbox_style." } );}"; } return ""; } /** * Set Lightbox "rel" * * @ Since 1.2.3 */ function set_lightbox_rel(){ $lightbox = $this->get_option('general_lightbox'); $custom = $this->get_option('hidden_lightbox_custom_rel'); if( !empty($custom) && $this->check_active_option('custom_lightbox_rel') ){ $rel = $this->get_active_option('custom_lightbox_rel'); $rel = str_replace('{rtsq}',']',$rel); // Decode right and left square brackets $rel = str_replace('{ltsq}','[',$rel); }elseif( 'fancybox' == $lightbox ){ $rel = 'alpine-fancybox-'.$this->get_private('wid'); }elseif( 'prettyphoto' == $lightbox ){ $rel = 'alpine-prettyphoto['.$this->get_private('wid').']'; }elseif( 'colorbox' == $lightbox ){ $rel = 'alpine-colorbox['.$this->get_private('wid').']'; }else{ $rel = 'alpine-fancybox-safemode-'.$this->get_private('wid'); } $this->set_active_option('rel',$rel); } } ?>