Sequenzia/app/helpers/PostHelper.php
2013-10-26 18:06:58 -05:00

190 lines
8.3 KiB
PHP
Executable File

<?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 > 1500 || $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;
}
}