'; } $count++; } if (!$widgetHTML) { $widgetHTML = '
NO IMAGES AVAILABLE
'; } return $widgetHTML; } // reads all posts from DB and returns an array function getAllImages($post_id) { global $post; $allImages = array(); if ($post_id == 'all') { // query all the posts in the blog, build the allImages array. $r = new WP_Query("what_to_show=posts&nopaging=0&post_status=publish"); if ($r->have_posts()) { while ($r->have_posts()) : $r->the_post(); $post_content = $post->post_content; $tmpArray = DOMParseHTML($post_content); foreach ($tmpArray as $tmpArray2) { $tmpArray2['guid'] = $post->guid; $tmpArray2['text'] = $post->post_title; array_push($allImages, $tmpArray2); } endwhile; } } else { // work on a single post. $post = get_post($post_id); $post_content = $post->post_content; $srcUrl = 'post ' . $post_id; $tmpArray = DOMParseHTML($post_content); foreach ($tmpArray as $tmpArray2) { $tmpArray2['guid'] = $post->guid; $tmpArray2['text'] = $post->post_title; array_push($allImages, $tmpArray2); } } return $allImages; } // takes a block of html and returns the links and img's in an array. function DOMParseHTML($htmlContent) { $domImages = array(); $dom = new DOMDocument(); @$dom->loadHTML($htmlContent); $domXpath = new DOMXPath($dom); /* this handles the case if there is a thumbnail * image and a link to another (bigger?) image */ $hrefs = $domXpath->evaluate("//a"); for ($i = 0; $i < $hrefs->length; $i++) { $href = $hrefs->item($i); $url = $href->getAttribute('href'); $img = $href->getElementsByTagName('img'); if ($img->item(0)) { $src = $img->item(0)->getAttribute('src'); if (ereg(".jpg$|.png$", $src) && ereg(".jpg$|.png$", $url)) { $tmpArray['thumb'] = $src; $tmpArray['full'] = $url; array_push($domImages, $tmpArray); } else { $tmpArray['thumb'] = contentUrlToThumbnail($src); $tmpArray['full'] = thumbnailToContentUrl($src); array_push($domImages, $tmpArray); } } } /* this handles the case if there is only an image * we do not know if there is a thumbnail. */ $imgs = $domXpath->evaluate("//img"); for ($i = 0; $i < $imgs->length; $i++) { $img = $imgs->item($i); $src = $img->getAttribute('src'); // check if this was already from the above case. $duplicate = false; foreach ($domImages as $testArray) { if ($src === $testArray['full'] || $src === $testArray['thumb']) { $duplicate = true; } } // push it onto the array if it is unique! if (ereg(".jpg$|.png$", $src) && $duplicate == false && !ereg("PicLensButton.png", $src)) { $tmpArray['thumb'] = contentUrlToThumbnail($src); $tmpArray['full'] = thumbnailToContentUrl($src); array_push($domImages, $tmpArray); } } /* this handles embedded youtube content * */ $embeds = $domXpath->evaluate("//embed"); for ($i = 0; $i < $embeds->length; $i++) { $embed = $embeds->item($i); $src = $embed->getAttribute('src'); if (ereg("http://www.youtube.com/v/(.*)&", $src, $regs)) { $vid = $regs[1]; $tmpArray['thumb'] = youtubeThumbnail($vid); $tmpArray['full'] = youtubeUrl($vid); array_push($domImages, $tmpArray); } } return $domImages; } // below are functions for youtube support. function youtubeUrl($videoId) { $url = 'http://www.youtube.com/v/' . $videoId; return $url; } function youtubeThumbnail($videoId) { $url = 'http://img.youtube.com/vi/' . $videoId . '/default.jpg'; return $url; } // below are functions to find the thumbnail or full size image from the other. function thumbnailToContentUrl($url) { // split hostname into components by dot, and remove top-level domain // and country code second-level domain if needed $host = array_reverse(explode('.', parse_url($url, PHP_URL_HOST))); array_shift($host); if (in_array($host[0], array('co','ac','com','net','org','edu'))) { array_shift($host); } switch ($host[0]) { case 'facebook': return t2c_facebook($url); case 'flickr': return t2c_flickr($url); case 'photobucket': return t2c_photobucket($url); case 'google': return t2c_google($url); case 'friendster': return t2c_friendster($url); default: return $url; } } function contentUrlToThumbnail($url) { // split hostname into components by dot, and remove top-level domain // and country code second-level domain if needed $host = array_reverse(explode('.', parse_url($url, PHP_URL_HOST))); array_shift($host); if (in_array($host[0], array('co','ac','com','net','org','edu'))) { array_shift($host); } switch ($host[0]) { case 'facebook': return c2t_facebook($url); case 'flickr': return c2t_flickr($url); case 'photobucket': return c2t_photobucket($url); case 'google': return c2t_google($url); case 'friendster': return c2t_friendster($url); default: return $url; } } // Facebook functions are complete function t2c_facebook($url) { if (preg_match('@(http://photo.*/)([^/]+)@', $url, $regs)) { $file = $regs[2]; $file[0] = 'n'; return $regs[1].$file; } return null; } function c2t_facebook($url) { if (preg_match('@(http://photo.*/)([^/]+)@', $url, $regs)) { $file = $regs[2]; $file[0] = 's'; return $regs[1].$file; } return null; } //Flickr functions are complete function t2c_flickr($url) { $url = ereg_replace("_d.jpg", ".jpg", $url); if (preg_match('@(.*/)([^/]+?)(?:_\\w)?\\.@', $url, $regs)) { // this returns the standard size, which is always available return $regs[1].$regs[2].'.jpg'; } // when PLL and PL client support multiple media:content elems, // switch to this higher-quality fallback list /*return array( $regs[1].'_b.jpg', // big $regs[1].'_o.jpg', // original $regs[1].'.jpg', // standard $regs[1].'_m.jpg' // medium );*/ return null; } function c2t_flickr($url) { $url = ereg_replace("_d.jpg", ".jpg", $url); if (preg_match('@(.*/)([^/]+?)(?:_\\w)?\\.@', $url, $regs)) { if (ereg("_[t|s].$", $regs[0])) { return $url; } else { // this returns the thumbnail size (now medium) return $regs[1].$regs[2].'_m.jpg'; } } return null; } // Photobucket functions are complete function t2c_photobucket($url) { // remove the th_ prefix from the image file if (preg_match('@(.*/)([^/]+)@', $url, $regs)) { return $regs[1].str_replace('th_', '', $regs[2]); } return null; } function c2t_photobucket($url) { // add the th_ prefix from the image file if (preg_match('@(.*/)([^/]+)@', $url, $regs)) { return $regs[1] . 'th_' . $regs[2]; } return null; } //Google Images functions are not complete function t2c_google($url) { // assumes Picasa Web Albums (picasaweb.google.*) images start with 'lh' // to reduce the probability of accidentally mangling an image url from another // google site, since the domain for the images is lh*.google.com if (strpos($url, 'http://lh') !== 0) { return null; } // remove path component specific to thumbnails $parts = parse_url($url); if (preg_match('@(.+?)/[a-z]\\d+/(.+)@', $parts['path'], $regs)) { $parts['path'] = $regs[1].'/'.$regs[2]; } // recompose url with desired size specified return $parts['scheme'].'://'.$parts['host'].$parts['path'].'?imgmax=1024'; } function c2t_google($url) { // assumes Picasa Web Albums (picasaweb.google.*) images start with 'lh' // to reduce the probability of accidentally mangling an image url from another // google site, since the domain for the images is lh*.google.com if (strpos($url, 'http://lh') !== 0) { return null; } // remove path component specific to thumbnails $parts = parse_url($url); if (preg_match('@(.+?)/[a-z]\\d+/(.+)@', $parts['path'], $regs)) { $parts['path'] = $regs[1].'/'.$regs[2]; } // recompose url with desired size specified return $parts['scheme'].'://'.$parts['host'].$parts['path'].'?imgmax=1024'; } // Friendster functions are complete function t2c_friendster($url) { // swap the s to an l if (substr($url, -5) == 's.jpg') { return substr($url, 0, -5).'l.jpg'; } return null; } function c2t_friendster($url) { // swap the l to an s if (substr($url, -5) == 'l.jpg') { return substr($url, 0, -5).'s.jpg'; } return null; } // finds the path to the php code function wp_piclens_base_uri() { return str_replace(ABSPATH, get_option('siteurl') . '/', dirname(__FILE__)); } // adds the required stylesheets and javascript to the page head function wp_piclens_print_head() { echo ' '; } function uuid() { return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0x0fff ) | 0x4000, mt_rand( 0, 0x3fff ) | 0x8000, mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ) ); } function widget_piclens_change_status ($status) { if ($status == 'true') { widget_piclens_activate(); } else { widget_piclens_deactivate(); } } function widget_piclens_activate () { global $globalURL, $globalVersion; if (class_exists('DOMDocument')) { // for cache if (!get_option('wp_piclens_feed_cache')) { add_option("wp_piclens_feed_cache_age", '', "WordPress PicLens Plugin RSS Feed Cache Age", no); add_option("wp_piclens_feed_cache", '', "WordPress PicLens Plugin RSS Feed Cache", no); } if (get_option('wp_piclens_uuid')) { // for stats collection $wp_piclens_uuid = get_option('wp_piclens_uuid'); $updateUrl = $globalURL; $data = array('sID' => $wp_piclens_uuid, 'action' => 'activate', 'product' => 'widget-piclens-slideshow', 'version' => $globalVersion); $postData = http_build_query($data); do_post_request($updateUrl, $postData); } } } function widget_piclens_deactivate () { global $globalURL, $globalVersion; if (get_option('wp_piclens_uuid')) { // for stats collection $wp_piclens_uuid = get_option('wp_piclens_uuid'); $updateUrl = $globalURL; $data = array('sID' => $wp_piclens_uuid, 'action' => 'deactivate', 'product' => 'widget-piclens-slideshow', 'version' => $globalVersion); $postData = http_build_query($data); do_post_request($updateUrl, $postData); } } function wp_piclens_activate ($action) { global $globalURL, $globalVersion; if (class_exists('DOMDocument')) { if ($action == null) { $action = 'activate'; } // generate a uuid if there isn't one already if (!get_option('wp_piclens_uuid')) { $wp_piclens_uuid = uuid(); add_option("wp_piclens_uuid", $wp_piclens_uuid, "WordPress PicLens Plugin UUID", no); } // set the default options if they are not set already if (!get_option('wp_piclens_version_installed')) { $wp_piclens_append_link = "true"; $wp_piclens_link_text = 'Start Slide Show with PicLens Lite [piclens-icon]'; $wp_piclens_link_text = htmlspecialchars("$wp_piclens_link_text", ENT_QUOTES); $wp_piclens_version = $globalVersion; add_option("wp_piclens_link_text", $wp_piclens_link_text, "Start PicLens link text", no); add_option("wp_piclens_append_link", $wp_piclens_append_link, "Auto add PicLens link", no); add_option("wp_piclens_version_installed", $wp_piclens_version, "What is the version installed?", no); } // for stats collection $wp_piclens_uuid = get_option('wp_piclens_uuid'); $updateUrl = $globalURL; $data = array('sID' => $wp_piclens_uuid, 'action' => $action, 'product' => 'wp-piclens', 'version' => $globalVersion); $postData = http_build_query($data); do_post_request($updateUrl, $postData); } else { return false; } } function wp_piclens_deactivate () { global $globalURL, $globalVersion; if (get_option('wp_piclens_uuid')) { // for stats collection $wp_piclens_uuid = get_option('wp_piclens_uuid'); $updateUrl = $globalURL; $data = array('sID' => $wp_piclens_uuid, 'action' => 'deactivate', 'product' => 'wp-piclens', 'version' => $globalVersion); $postData = http_build_query($data); do_post_request($updateUrl, $postData); } else { wp_piclens_activate('reset'); wp_piclens_deactivate(); } } function do_post_request($url, $data, $optional_headers = null) { $params = array('http' => array( 'method' => 'POST', 'content' => $data)); if ($optional_headers !== null) { $params['http']['header'] = $optional_headers; } $ctx = stream_context_create($params); $timeout = 1; $old = ini_set('default_socket_timeout', $timeout); $fp = @fopen($url, 'rb', false, $ctx); ini_set('default_socket_timeout', $old); stream_set_timeout($fp, $timeout); stream_set_blocking($fp, 0); if (!$fp) { // throw new Exception("Problem with $url, $php_errormsg"); } else { $response = @stream_get_contents($fp); if ($response === false) { // throw new Exception("Problem reading data from $url, $php_errormsg"); } return $response; } } function httpReqUrl($url) { require_once("http.php"); $http=new http_class; $http->timeout=0; $http->data_timeout=0; $http->debug=0; $http->html_debug=0; $http->follow_redirect=1; $http->redirection_limit=5; $error=$http->GetRequestArguments($url,$arguments); flush(); $error=$http->Open($arguments); if ($error=="") { $error=$http->SendRequest($arguments); if ($error=="") { $headers=array(); $error=$http->ReadReplyHeaders($headers); if ($error=="") { switch($http->response_status) { case "301": case "302": case "303": case "307": break; } for (;;) { $error=$http->ReadReplyBody($body,1000); if ($error!="" || strlen($body)==0) { break; } $return .= $body; } } } $http->Close(); } return $return; } function domLoadXML ($xmlStr) { $domDoc = new DOMDocument(); $domDoc->loadXML("$xmlStr"); $rootElement = getRootElement($domDoc); if ( !isset($rootElement) ) { return false; } else { return $domDoc; } } function getRootElement ($domDoc) { if (!empty($domDoc)) { $domElements = $domDoc->getElementsByTagName('*'); if ( !isset($domElements) ) { return false; } else { $rootElement = $domElements->item(0)->localName; return $rootElement; } } else { return false; } } function getFeedImages ($feedUrl) { // using a rss feed instead of blog images. $allImages = array(); $age = get_option('wp_piclens_feed_cache_age'); // expire the cache if it's older than an hour. $expire = time() - (1 * 60 * 60); // check the freshness of the cache if ($age-$expire < 0) { $rss = httpReqUrl($feedUrl); update_option('wp_piclens_feed_cache_age', time()); update_option('wp_piclens_feed_cache', $rss); } else { $rss = get_option('wp_piclens_feed_cache'); } $domObj = domLoadXML($rss); $domItems = $domObj->getElementsByTagName('item'); for ($i = '0'; $i < $domItems->length; $i++) { $domItem = $domItems->item($i); $itemElems = $domItem->getElementsByTagName('text'); $linkElems = $domItem->getElementsByTagName('link'); $link = $linkElems->item(0)->nodeValue; $textElems = $domItem->getElementsByTagName('title'); $text = $textElems->item(0)->nodeValue; for ($ii = '0'; $ii < $itemElems->length; $ii++) { $feedItemText = $itemElems->item($ii)->nodeValue; $tmpArray = DOMParseHTML($feedItemText); $tmpArray['0']['guid'] = $link; $tmpArray['0']['text'] = $text; array_push($allImages, $tmpArray[0]); } } return $allImages; } ?>