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 PhotoTileForFlickrBotTertiary extends PhotoTileForFlickrBotSecondary{ // For Reference: // http://www.flickr.com/services/api/response.json.html // sq = thumbnail 75x75 // t = 100 on longest side // s = 240 on longest side // n = 320 on longest side // m = 500 on longest side // z = 640 on longest side // c = 800 on longest side // b = 1024 on longest side* // o = original image, either a jpg, gif or png, depending on source format** // *Before May 25th 2010 large photos only exist for very large original images. // **Original photos behave a little differently. They have their own secret (called originalsecret in responses) and a variable file extension (called originalformat in responses). These values are returned via the API only when the caller has permission to view the original size (based on a user preference and various other criteria). The values are returned by the flickr.photos.getInfo method and by any method that returns a list of photos and allows an extras parameter (with a value of original_format), such as flickr.photos.search. The flickr.photos.getSizes method, as always, will return the full original URL where permissions allow. ////////////////////////////////////////////////////////////////////////////////////// ////////////////// Unique Feed Fetch Functions ///////////////////////// ////////////////////////////////////////////////////////////////////////////////////// /** * Alpine PhotoTile for Flickr: Photo Retrieval Function. * The PHP for retrieving content from Flickr. * * @ Since 1.0.0 * @ Updated 1.2.5 */ function photo_retrieval(){ $flickr_options = $this->get_private('options'); $defaults = $this->option_defaults(); $key_input = array( 'name' => 'flickr', 'info' => array( 'vers' => $this->get_private('vers'), 'src' => (isset($flickr_options['flickr_source'])?$flickr_options['flickr_source']:''), 'uid' => (isset($flickr_options['flickr_user_id'])?$flickr_options['flickr_user_id']:''), 'groupid' => (isset($flickr_options['flickr_group_id'])?$flickr_options['flickr_group_id']:''), 'set' => (isset($flickr_options['flickr_set_id'])?$flickr_options['flickr_set_id']:''), 'tags' => (isset($flickr_options['flickr_tags'])?$flickr_options['flickr_tags']:''), 'num' => (isset($flickr_options['flickr_photo_number'])?$flickr_options['flickr_photo_number']:''), 'off' => (isset($flickr_options['photo_feed_offset'])?$flickr_options['photo_feed_offset']:''), 'link' => (isset($flickr_options['flickr_display_link'])?$flickr_options['flickr_display_link']:''), 'text' => (isset($flickr_options['flickr_display_link_text'])?$flickr_options['flickr_display_link_text']:''), 'size' => (isset($flickr_options['flickr_photo_size'])?$flickr_options['flickr_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 Flickr id) //$this->set_active_option('api_key','68b8278a33237f1f369cbbf3c9a9f45c'); if( $this->check_active_option('api_key') ){ $this->append_active_result('hidden',''); }else{ $this->append_active_result('hidden',''); } if( function_exists('unserialize') ) { $this->try_php_serial(); } if ( !$this->check_active_result('success') && function_exists('simplexml_load_file') ) { if( $this->check_active_option('api_key') ){ $this->try_rest(); }else{ // Use my API key $this->append_active_result('hidden',''); $this->set_active_option('api_key','68b8278a33237f1f369cbbf3c9a9f45c'); $this->try_rest(); } } if( $this->check_active_result('success') ){ $src = $this->get_private('src'); if( $this->check_active_result('userlink') && $this->check_active_option($src.'_display_link') && $this->check_active_option($src.'_display_link_text') && 'community' != $this->get_active_option($src.'_source') ){ $linkurl = $this->get_active_result('userlink'); $link = '
'; $this->set_active_result('userlink',$link); }else{ $this->set_active_result('userlink',null); } }else{ if( $this->check_active_result('feed_found') ){ $this->append_active_result('message','- Flickr feed was successfully retrieved, but no photos found.'); }else{ $this->append_active_result('message','- Please recheck your ID(s).'); } } //$this->results = array('continue'=>$this->success,'message'=>$this->message,'hidden'=>$this->hidden,'photos'=>$this->photos,'user_link'=>$this->userlink); $this->store_in_cache( $key ); // Store in cache } /** * Function for forming Flickr request * * @ Since 1.2.4 */ function get_flickr_request($format){ $options = $this->get_private('options'); $offset = ((!empty($options['photo_feed_offset'])&&is_numeric($options['photo_feed_offset']))?$options['photo_feed_offset']:0); $num = $offset + $options['flickr_photo_number']; if( !empty($options['photo_feed_shuffle']) && function_exists('shuffle') ){ // Shuffle the results $num = min( 200, $num*6 ); } $flickr_uid = empty($options['flickr_user_id']) ? 'uid' : $options['flickr_user_id']; $request = false; if( !empty( $options['api_key'] ) ){ $key = $options['api_key']; switch ($options['flickr_source']) { case 'user': $request = 'http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key='.$key.'&per_page='.$num.'&format='.$format.'&privacy_filter=1&user_id='. $flickr_uid .'&page=1&extras=description,url_sq,url_t,url_s,url_m,url_n,url_z,url_c'; break; case 'favorites': $request = 'http://api.flickr.com/services/rest/?method=flickr.favorites.getPublicList&api_key='.$key.'&per_page='.$num.'&format='.$format.'&privacy_filter=1&user_id='. $flickr_uid .'&page=1&extras=description,url_sq,url_t,url_s,url_m,url_n,url_z,url_c'; break; case 'group': $flickr_groupid = ( empty($options['flickr_group_id']) ? '' : $options['flickr_group_id']); $request = 'http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key='.$key.'&per_page='.$num.'&format='.$format.'&privacy_filter=1&group_id='. $flickr_groupid .'&page=1&extras=description,url_sq,url_t,url_s,url_m,url_n,url_z,url_c'; break; case 'set': $flickr_set = (empty($options['flickr_set_id']) ? '' : $options['flickr_set_id']); $request = 'http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key='.$key.'&per_page='.$num.'&format='.$format.'&privacy_filter=1&photoset_id='. $flickr_set .'&page=1&extras=description,url_sq,url_t,url_s,url_m,url_n,url_z,url_c,url_o'; // API claims no n, z, or c. Add o to cover missing sizes break; case 'community': $flickr_tags = (empty($options['flickr_tags']) ? '' : $options['flickr_tags']); $request = 'http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key='.$key.'&per_page='.$num.'&format='.$format.'&privacy_filter=1&tags='. $flickr_tags .'&page=1&extras=description,url_sq,url_t,url_s,url_m,url_n,url_z,url_c'; break; } }else{ switch ($options['flickr_source']) { case 'user': $request = 'http://api.flickr.com/services/feeds/photos_public.gne?id='. $flickr_uid .'&lang=en-us&format='.$format.''; break; case 'favorites': $request = 'http://api.flickr.com/services/feeds/photos_faves.gne?nsid='. $flickr_uid .'&lang=en-us&format='.$format.''; break; case 'group': $flickr_groupid = (empty($options['flickr_group_id']) ? '' : $options['flickr_group_id']); $request = 'http://api.flickr.com/services/feeds/groups_pool.gne?id='. $flickr_groupid .'&lang=en-us&format='.$format.''; break; case 'set': $flickr_set = (empty($options['flickr_set_id']) ? '' : $options['flickr_set_id']); $request = 'http://api.flickr.com/services/feeds/photoset.gne?set=' . $flickr_set . '&nsid='. $flickr_uid .'&lang=en-us&format='.$format.''; break; case 'community': $flickr_tags = (empty($options['flickr_tags']) ? '' : $options['flickr_tags']); $request = 'http://api.flickr.com/services/feeds/photos_public.gne?tags='. $flickr_tags .'&lang=en-us&format='.$format.''; break; } } return $request; } /** * Determine image size id * * @ Since 1.2.4 * @ Updated 1.2.5 */ function set_size_id(){ $this->set_active_option('size_id','url_m'); // Default is 500 switch ($this->get_active_option('flickr_photo_size')) { case 75: $this->set_active_option('size_id','url_sq'); break; case 100: $this->set_active_option('size_id','url_t'); break; case 240: $this->set_active_option('size_id','url_s'); break; case 320: $this->set_active_option('size_id','url_n'); break; case 500: $this->set_active_option('size_id','url_m'); break; case 640: $this->set_active_option('size_id','url_z'); break; case 800: $this->set_active_option('size_id','url_c'); break; } } /** * Function getting image url given size setting * * @ Since 1.2.2 * @ Updated 1.2.4 */ function get_image_url($info){ $size = $this->get_active_option('size_id'); if( $this->check_active_option('api_key') ){ if( isset($info[$size]) ){ return $info[$size]; }elseif( 'url_c' == $size && (isset($info['url_o']) && ($info['height_o']<1200 && $info['width_o']<1200) ) ){ // Checking url_o is same as src==set return $info['url_o']; }elseif( 'url_c' == $size && isset($info['url_z']) ){ return $info['url_z']; }elseif( isset($info['url_m']) ){ return $info['url_m']; }elseif( isset($info['url_n']) ){ return $info['url_n']; } }else{ if( ('url_s' == $size || 'url_t' == $size) && isset($info['m_url']) ){ // Checking url_o is same as src==set return $info['m_url']; }elseif( ('url_sq' == $size) && isset($info['thumb_url']) ){ // Checking url_o is same as src==set return $info['thumb_url']; }elseif( ('url_n' == $size || 'url_m' == $size) && isset($info['l_url']) ){ // Checking url_o is same as src==set return $info['l_url']; }elseif( ('url_z' == $size || 'url_c' == $size )&& isset($info['photo_url']) ){ return $info['photo_url']; } } return false; } /** * Function getting original image url given size setting * * @ Since 1.2.2 * @ Updated 1.2.4 */ function get_image_orig($info){ $size = $this->get_active_option('size_id'); if( $this->check_active_option('api_key') ){ if( isset($info['url_c']) ){ return $info['url_c']; }elseif( isset($info['url_o']) && $info['height_o']<1200 && $info['width_o']<1200 ){ return $info['url_o']; }elseif( isset($info['url_z']) ){ // Checking url_o is same as src==set return $info['url_z']; }elseif( isset($info['url_m']) ){ return $info['url_m']; } }else{ if( isset($info['photo_url']) ){ return $info['photo_url']; }elseif( isset($info['l_url']) ){ return $info['l_url']; }elseif( isset($info['m_url']) ){ return $info['m_url']; } } return false; } /** * Function for making Flickr request with php_serial return format ( API v1 and v2 ) * * @ Since 1.2.4 */ function try_php_serial(){ // Retrieve content using wp_remote_get and PHP_serial $request = $this->get_flickr_request('php_serial'); $_flickr_php = array(); $response = wp_remote_get($request, array( 'method' => 'GET', 'timeout' => 20, ) ); if( is_wp_error( $response ) || !isset($response['body']) ) { $this->append_active_result('hidden',''); }else{ $_flickr_php = @unserialize($response['body']); } if( empty($_flickr_php) || (empty($_flickr_php['photos']) && empty($_flickr_php['photoset']) && empty($_flickr_php['items'])) ){ $this->append_active_result('hidden',''); if( isset($_flickr_php['message']) ){ $this->append_active_result('message','- Attempt 1: '.$_flickr_php['message'].'