<?php class PostHelper extends Rails\ActionView\Helper { public function source_link($source, $abbreviate = true) { if (!$source) { return 'none'; } elseif (strpos($source, 'http') === 0) { $text = $source; if ($abbreviate) $text = substr($text, 7, 20) . '...'; return $this->linkTo($text, $source, ['rel' => 'nofollow']); } else { return $this->h($source); } } public function print_preview($post, $options = array()) { $is_post = $post instanceof Post; if ($is_post && !CONFIG()->can_see_post(current_user(), $post)) return ""; $image_class = "preview"; !isset($options['url_params']) && $options['url_params'] = null; $image_id = isset($options['image_id']) ? 'id="'.$options['image_id'].'"' : null; $image_title = $is_post ? $this->h("Rating: ".$post->pretty_rating()." Score: ".$post->score." Tags: ".$this->h($post->cached_tags." User: ".$post->author())) : null; $link_onclick = isset($options['onclick']) ? 'onclick="'.$options['onclick'].'"' : null; $link_onmouseover = isset($options['onmouseover']) ? ' onmouseover="'.$options['onmouseover'].'"' : null; $link_onmouseout = isset($options['onmouseout']) ? ' onmouseout="'.$options['onmouseout'].'"' : null; if (isset($options['display']) && $options['display'] == 'block') { # Show the thumbnail at its actual resolution, and crop it with northern orientation # to a smaller size. list($width, $height) = $post->raw_preview_dimensions(); $block_size = array(200, 200); $visible_width = min(array($block_size[0], $width)); $crop_left = ($width - $visible_width) / 2; } elseif (isset($options['display']) && $options['display'] == 'large') { list($width, $height) = $post->raw_preview_dimensions(); $block_size = array($width, $height); $crop_left = 0; } else { # Scale it down to a smaller size. This is exactly one half the actual size, to improve # resizing quality. list($width, $height) = $post->preview_dimensions(); $block_size = array(150, 150); $crop_left = 0; } $image = '<img src="'.$post->preview_url().'" style="margin-left: '.$crop_left*(-1).'px;" alt="'.$image_title.'" class="'.$image_class.'" title="'.$image_title.'" '.$image_id.' width="'.$width.'" height="'.$height.'">'; if ($is_post) { $plid = '<span class="plid">#pl http://'.CONFIG()->server_host.'/post/show/'.$post->id.'</span>'; $target_url = '/post/show/' . $post->id . '/' . $post->tag_title() . $options['url_params']; } else { $plid = ""; $target_url = $post->url; } $link_class = "thumb"; !$is_post && $link_class .= " no-browser-link"; $link = '<a class="'.$link_class.'" href="'.$target_url.'" '.$link_onclick.$link_onmouseover.$link_onmouseout.'>'.$image.$plid.'</a>'; $div = '<div class="inner" style="width: '.$block_size[0].'px; height: '.$block_size[1].'px;">'.$link.'</div>'; if ($post->use_jpeg(current_user()) && empty($options['disable_jpeg_direct_links'])) { $dl_width = $post->jpeg_width; $dl_height = $post->jpeg_height; $dl_url = $post->jpeg_url(); } else { $dl_width = $post->width; $dl_height = $post->height; $dl_url = $post->file_url(); } $directlink_info = ' <span class="directlink-info"> <img class="directlink-icon directlink-icon-large" src="/images/ddl_large.gif" alt=""> <img class="directlink-icon directlink-icon-small" src="/images/ddl.gif" alt=""> <img class="parent-display" src="/images/post-star-parent.gif" alt=""> <img class="child-display" src="/images/post-star-child.gif" alt=""> <img class="flagged-display" src="/images/post-star-flagged.gif" alt=""> <img class="pending-display" src="/images/post-star-pending.gif" alt=""> </span> '; $li_class = ""; $ddl_class = "directlink"; $ddl_class .= ($post->width > 1920 || $post->height > 1500 )? " largeimg":" smallimg"; if (!empty($options['similarity'])) { $icon = '<img src="'.$post->service_icon().'" alt="'.$post->service().'" class="service-icon" id="source">'; $ddl_class .= " similar similar-directlink"; is_numeric($options['similarity']) && $options['similarity'] >= 90 && $li_class .= " similar-match"; is_string($options['similarity']) && $options['similarity'] == 'Original' && $li_class .= " similar-original"; $directlink_info = '<span class="similar-text">'.$icon.'</span>'.$directlink_info; } if (!empty($options['hide_directlink'])) $directlink = ""; else { $directlink_res = '<span class="directlink-res">'.$dl_width.' x '.$dl_height.'</span>'; if (current_user()->can_see_posts()) $directlink = '<a class="'.$ddl_class.'" href="'.$dl_url.'">'.$directlink_info.$directlink_res.'</a>'; else $directlink = '<a class="'.$ddl_class.'" href="#" onclick="return false;">'.$directlink_info.$directlink_res.'</a>'; } if ($is_post) { # Hide regular posts by default. They'll be unhidden by the scripts once the # blacklists are loaded. Don't do this for ExternalPost, which don't support # blacklists. !empty($options['blacklisting']) && $li_class .= " javascript-hide"; $li_class .= " creator-id-".$post->user_id; } $post->is_flagged() && $li_class .= " flagged"; $post->has_children && $li_class .= " has-children"; $post->parent_id && $li_class .= " has-parent"; $post->is_pending() && $li_class .= " pending"; # We need to specify a width on the <li>, since IE7 won't figure it out on its own. $item = '<li style="width: '.($block_size[0]+10).'px;" id="p'.$post->id.'" class="'.$li_class.'">'.$div.$directlink.'</li>'; return $item; } public function auto_discovery_link_tag_with_id($type = 'rss', $url_options = array(), $tag_options = array()) { if (is_array($url_options)) { $url = array_shift($url_options); $url_options['only_path'] = false; $href = $this->urlFor($url, $url_options); } else { $href = $url_options; } return $this->tag( "link", array( "rel" => isset($tag_options['rel']) ? $tag_options['rel'] : "alternate", "type" => isset($tag_options['type']) ? $tag_options['type'] : "application/".$type."+xml", "title" => isset($tag_options['title']) ? $tag_options['title'] : strtoupper($type), "id" => $tag_options['id'], "href" => $href )); } public function vote_tooltip_widget() { return '<span class="vote-desc"></span>'; } public function vote_widget($user = null, $className = "standard-vote-widget") { if (!$user) $user = current_user(); $html = '<span class="stars '.$className.'">'; if (!$user->is_anonymous()) { foreach(range(0, 3) as $vote) $html .= '<a href="#" class="star star-'.$vote.' star-off"></a>'; $html .= '<span class="vote-up-block"><a class="star vote-up" href="#"></a></span>'; } $html .= '</span>'; return $html; } public function get_service_icon($service) { return ExternalPost::get_service_icon($service); } /* Import uses this */ public function import_file_detail_name($name) { if (is_int(strpos($name, '/'))) { $parts = explode('/', $name); $last_part = array_pop($parts); $name = '<span class="dir">'.implode('/', $parts).'/</span>'.$last_part; } else { $name = substr(stripslashes($name), 0, 100); strlen($name) > 100 && $name .= '...'; } return $name; } }