Example #1
0
function punish_comments($hours = 6)
{
    global $globals, $db;
    $log = new Annotation('punish-comment');
    if ($log->read() && $log->time > time() - 3600 * $hours) {
        echo "Comments already verified at: " . get_date_time($log->time) . "\n";
        return false;
    }
    if ($globals['min_karma_for_comments'] > 0) {
        $min_karma = $globals['min_karma_for_comments'];
    } else {
        $min_karma = 4.5;
    }
    $votes_from = time() - $hours * 3600;
    // 'date_sub(now(), interval 6 hour)';
    $comments_from = time() - 2 * $hours * 3600;
    //'date_sub(now(), interval 12 hour)';
    echo "Starting karma_comments...\n";
    $users = "SELECT SQL_NO_CACHE distinct comment_user_id as user_id from comments, users where comment_date > from_unixtime({$comments_from}) and comment_karma < -50 and comment_user_id = user_id and user_level != 'disabled' and user_karma >= {$min_karma}";
    $result = $db->get_results($users);
    $log->store();
    if (!$result) {
        return;
    }
    foreach ($result as $dbuser) {
        $user = new User();
        $user->id = $dbuser->user_id;
        $user->read();
        printf("%07d  %s\n", $user->id, $user->username);
        $punish = 0;
        $comment_votes_count = (int) $db->get_var("SELECT SQL_NO_CACHE count(*) from votes, comments where comment_user_id = {$user->id} and comment_date > from_unixtime({$comments_from}) and vote_type='comments' and vote_link_id = comment_id and  vote_date > from_unixtime({$votes_from}) and vote_user_id != {$user->id}");
        if ($comment_votes_count > 5) {
            $votes_karma = (int) $db->get_var("SELECT SQL_NO_CACHE sum(vote_value) from votes, comments where comment_user_id = {$user->id} and comment_date > from_unixtime({$comments_from}) and vote_type='comments' and vote_link_id = comment_id and vote_date > from_unixtime({$votes_from}) and vote_user_id != {$user->id}");
            if ($votes_karma < 50) {
                $distinct_votes_count = (int) $db->get_var("SELECT SQL_NO_CACHE count(distinct comment_id) from votes, comments where comment_user_id = {$user->id} and comment_date > from_unixtime({$comments_from}) and vote_type='comments' and vote_link_id = comment_id and  vote_date > from_unixtime({$votes_from}) and vote_user_id != {$user->id}");
                $comments_count = (int) $db->get_var("SELECT SQL_NO_CACHE count(*) from comments where comment_user_id = {$user->id} and comment_date > from_unixtime({$comments_from})");
                $comment_coeff = min($comments_count / 10, 1) * min($distinct_votes_count / ($comments_count * 0.75), 1);
                $punish = max(-2, round($votes_karma * $comment_coeff * 1 / 1000, 2));
            }
        }
        if ($punish < -0.1) {
            echo "comments: {$comments_count} votes distinct: {$distinct_votes_count} karma: {$votes_karma} coef: {$comment_coeff} -> {$punish}\n";
            $user->karma += $punish;
            //$user->store();
            $annotation = new Annotation("karma-{$user->id}");
            //$annotation->append(_('Penalización por comentarios').": $punish, nuevo karma: $user->karma\n");
            echo _('Penalización por comentarios') . ": {$punish}, nuevo karma: {$user->karma}\n";
            $log->append(_('Penalización') . " {$user->username}: {$punish}, nuevo karma: {$user->karma}\n");
        }
        $db->barrier();
    }
}
Example #2
0
function do_load() {
	global $db, $current_user;
	$annotation = new Annotation('ec2-autoscaler');
	if (!$annotation->read()) {
		return _('no hay estadísticas disponibles');
	}
	$group = unserialize($annotation->text);
	$str = "web instances: $group->instances, ";
	$str .= "cpu average load: ".round($group->load, 2) . "%, ";
	$str .= "cpu max average ($group->measures periods): ".round($group->load_max, 2)."%, ";
	$str .= "stored at: ". get_date_time($annotation->time);
	return $str;
}
Example #3
0
function do_load()
{
    global $db, $current_user;
    $annotation = new Annotation('ec2_watch');
    if (!$annotation->read()) {
        return _('no hay estadísticas disponibles');
    }
    $group = json_decode($annotation->text);
    $str = "web instances: {$group->instances}, ";
    $str .= "cpu average load: " . round($group->avg_load, 2) . "%, ";
    $str .= "last action: {$group->action} ";
    $str .= "last change: " . get_date_time($group->changed_ts) . " ";
    $str .= "stored at: " . get_date_time($annotation->time);
    return $str;
}
Example #4
0
     $user_id = guess_user_id($_REQUEST['friends_of']);
     $sql = "SELECT link_id FROM links, friends WHERE friend_type='manual' and friend_from = {$user_id} and friend_to=link_author and friend_value > 0 and link_status in ('queued', 'published') ORDER BY link_date DESC limit {$rows}";
     $user_login = $db->get_var("select user_login from users where user_id={$user_id}");
     $title = $site_info->name . ': ' . sprintf(_('amigos de %s'), $user_login);
 } elseif (!empty($_REQUEST['sent_by'])) {
     /////
     // sent links
     /////
     $user_id = guess_user_id($_REQUEST['sent_by']);
     $sql = "SELECT link_id FROM links WHERE link_author={$user_id} and link_votes > 0 ORDER BY link_id DESC limit {$rows}";
     $user_login = $db->get_var("select user_login from users where user_id={$user_id}");
     $title = $site_info->name . ': ' . sprintf(_('noticias de %s'), $user_login);
 } elseif (isset($_REQUEST['active'])) {
     $title = $site_info->name . ': ' . _('más activas');
     $top = new Annotation('top-actives-' . $globals['site_shortname']);
     if ($top->read()) {
         $links = explode(',', $top->text);
     }
 } elseif (isset($_REQUEST['popular'])) {
     $min_date = date("Y-m-d H:i:00", $globals['now'] - 129600);
     // 36 hours
     // The order is not exactly the votes
     // but a time-decreasing function applied to the number of votes
     $sql = "select link_id, (link_votes-link_negatives*2)*(1-(unix_timestamp(now())-unix_timestamp(link_date))*0.8/129600) as value from links, sub_statuses where id = " . SitesMgr::my_id() . " AND link_id = link AND status='published' and date > '{$min_date}' order by value desc limit 25";
 } elseif (isset($_REQUEST['top_visited'])) {
     $min_date = date("Y-m-d H:i:00", $globals['now'] - 172800);
     // 48 hours
     // The order is not exactly the votes
     // but a time-decreasing function applied to the number of votes
     $sql = "select link_id, counter*(1-(unix_timestamp(now())-unix_timestamp(link_date))*0.5/172800) as value from links, link_clicks, sub_statuses where sub_statuses.id = " . SitesMgr::my_id() . " AND link_id = link AND status='published' and date > '{$min_date}' and link_clicks.id = link order by value desc limit 25";
 } else {
Example #5
0
// The source code packaged with this file is Free Software, Copyright (C) 2005 by
// Ricardo Galli <gallir at uib dot es>.
// It's licensed under the AFFERO GENERAL PUBLIC LICENSE unless stated otherwise.
// You can get copies of the licenses here:
//		http://www.affero.org/oagpl.html
// AFFERO GENERAL PUBLIC LICENSE is also included in the file called "COPYING".
include 'config.php';
include mnminclude . 'html1.php';
$globals['ads'] = false;
promote_style();
do_header(_('promote') . ' | ' . _('menéame'));
echo '<div id="singlewrap">' . "\n";
$site_id = SitesMgr::my_parent();
$annotation = new Annotation("promote-{$site_id}");
$annotation->text = $output;
if ($annotation->read()) {
    echo $annotation->text;
}
echo '</div>' . "\n";
do_footer_menu();
do_footer();
function promote_style()
{
    global $globals;
    $globals['extra_head'] = '
<style type="text/css">
p {
	font-family: Bitstream Vera Sans, Arial, Helvetica, sans-serif;
	font-size: 90%;
}
table {
Example #6
0
function do_active_stories()
{
    global $db, $globals, $dblang;
    if ($globals['mobile']) {
        return;
    }
    $key = 'active_stories_' . $globals['site_shortname'] . $globals['v'];
    if (memcache_mprint($key)) {
        return;
    }
    echo '<!-- Calculating ' . __FUNCTION__ . ' -->';
    $title = _('destacadas');
    $url = $globals['base_url'] . 'top_active';
    $top = new Annotation('top-actives-' . $globals['site_shortname']);
    if ($top->read() && ($ids = explode(',', $top->text))) {
        $links = array();
        $ids = array_slice($ids, 0, 5);
        foreach ($ids as $id) {
            $link = Link::from_db($id);
            $link->url = $link->get_relative_permalink();
            $link->thumb = $link->has_thumb();
            $link->total_votes = $link->votes + $link->anonymous;
            if ($link->thumb) {
                $link->thumb_x = round($link->thumb_x / 2);
                $link->thumb_y = round($link->thumb_y / 2);
            }
            $link->check_warn();
            $links[] = $link;
        }
        $subclass = 'red';
        $vars = compact('links', 'title', 'url', 'subclass');
        $output = Haanga::Load('best_stories.html', $vars, true);
        echo $output;
        memcache_madd($key, $output, 60);
    }
}
Example #7
0
 public static function get_extended_properties($id = false)
 {
     static $properties = array(), $last_id = false;
     if ($id == false) {
         $id = self::my_id();
     }
     if (!empty($properties) && $last_id == $id) {
         return $properties;
     }
     $last_id = $id;
     $properties = self::$extended_properties;
     $key = self::PREFERENCES_KEY . $id;
     $a = new Annotation($key);
     if ($a->read() && !empty($a->text)) {
         $res = json_decode($a->text, true);
         // We use associative array
         if ($res) {
             foreach ($res as $k => $v) {
                 $properties[$k] = $v;
             }
         }
     }
     return $properties;
 }
Example #8
0
if (!$my_id > 0) {
    syslog(LOG_INFO, "Meneame, " . basename(__FILE__) . " site not found {$site_name}");
    echo "No site id found\n";
    die;
}
SitesMgr::__init($my_id);
$info = SitesMgr::get_info();
$properties = SitesMgr::get_extended_properties();
$a_tops = new Annotation('top-link-' . $site_name);
echo 'top-link-' . $site_name . "\n";
if (!$a_tops->read()) {
    exit;
}
$tops = explode(',', $a_tops->text);
$a_history = new Annotation('top-link-history-' . $site_name);
if ($a_history->read()) {
    $history = explode(',', $a_history->text);
} else {
    $history = array();
}
if (!in_array($tops[0], $history)) {
    if (!($link = Link::from_db($tops[0]))) {
        echo "Error reading link " . $tops[0] . "\n";
        exit;
    }
    $url = $link->get_permalink($info->sub);
    if ($globals['url_shortener']) {
        $short_url = $link->get_short_permalink();
    } else {
        $short_url = $url;
    }
Example #9
0
	function metas_coef_get() {
		$log = new Annotation("metas-coef");
		if (!$log->read()) return false;
		$dict = unserialize($log->text);
		if (!$dict || ! is_array($dict)) return false; // Failed to unserialize
		return $dict; // Asked for the whole dict
	}
Example #10
0
// You can get copies of the licenses here:
// 		http://www.affero.org/oagpl.html
// AFFERO GENERAL PUBLIC LICENSE is also included in the file called "COPYING".
include 'config.php';
include mnminclude . 'html1.php';
do_header(_('destacadas') . ' | ' . $globals['site_name'], _('destacadas'));
$globals['tag_status'] = 'published';
do_tabs('main', 'active');
/*** SIDEBAR ****/
echo '<div id="sidebar">';
do_banner_right();
do_best_stories();
do_banner_promotions();
do_best_comments();
echo '</div>' . "\n";
/*** END SIDEBAR ***/
echo '<div id="newswrap">' . "\n";
$top = new Annotation('top-actives-' . $globals['site_shortname']);
if ($top->read() && ($links = explode(',', $top->text))) {
    $counter = 0;
    foreach ($links as $id) {
        $link = Link::from_db($id);
        $link->show_clicks = true;
        $link->print_summary();
        $counter++;
        Haanga::Safe_Load('private/ad-interlinks.html', compact('counter', 'page_size'));
    }
}
echo '</div>' . "\n";
do_footer_menu();
do_footer();
Example #11
0
 function all_stats()
 {
     global $db, $globals, $current_user;
     if ($this->stats) {
         return;
     }
     if (!$this->read) {
         $this->read();
     }
     $do_cache = $this->date < $globals['now'] - 86400;
     // Don't cache for new users
     $cache_time = 7200;
     $stats = new Annotation("user_stats-{$this->id}");
     if ($do_cache && $stats->read() && ($stats->time > $globals['now'] - $cache_time || $globals['bot'] || $current_user->user_id == 0 || $stats->time > intval($db->get_var("select unix_timestamp(max(vote_date)) from votes where vote_user_id = {$this->id} and vote_type in ('links', 'posts', 'comments')")))) {
         $obj = unserialize($stats->text);
     } else {
         if ($globals['bot'] && $current_user->user_id == 0) {
             return;
         }
         // Don't calculate stats por bots
         $obj = new stdClass();
         $obj->total_votes = (int) $db->get_var("SELECT count(*) FROM votes WHERE vote_type='links' and vote_user_id = {$this->id}");
         $obj->total_links = (int) $db->get_var("SELECT count(*) FROM links WHERE link_author = {$this->id} and link_votes > 0");
         $obj->published_links = (int) $db->get_var("SELECT count(*) FROM links WHERE link_author = {$this->id} AND link_status = 'published'");
         $obj->total_comments = (int) $db->get_var("SELECT count(*) FROM comments WHERE comment_user_id = {$this->id}");
         $obj->total_posts = (int) $db->get_var("SELECT count(*) FROM posts WHERE post_user_id = {$this->id}");
         $obj->total_friends = (int) $db->get_var("select count(*) from friends where friend_to = {$this->id}");
         $obj->total_images = Upload::user_uploads($this->id) - Upload::user_uploads($this->id, false, 'private');
         if ($do_cache) {
             $stats->text = serialize($obj);
             $stats->store($globals['now'] + 86400 * 90);
             // Expires in 90 days
         }
     }
     foreach (get_object_vars($obj) as $var => $value) {
         $this->{$var} = $value;
     }
     $this->stats = true;
 }
Example #12
0
	static function get_affinity($id, $from = false) {
		global $current_user;

        return 100; // remove affinity control

		$log = new Annotation("affinity-$id");
		if (!$log->read()) return false;
		$dict = unserialize($log->text);
		if (!$dict || ! is_array($dict)) return false; // Failed to unserialize
		if (!$from) return $dict; // Asked for the whole dict
		if (abs($dict[$from]) <= 100) return intval($dict[$from]); // Asked just a value;
		return false; // Nothing found
	}
Example #13
0
 function subs_coef_get()
 {
     global $globals;
     if (empty($globals['sub_balance_metas']) || !in_array(SitesMgr::my_id(), $globals['sub_balance_metas'])) {
         return false;
     }
     $log = new Annotation("subs-coef-" . SitesMgr::my_id());
     if (!$log->read()) {
         return false;
     }
     $dict = unserialize($log->text);
     if (!$dict || !is_array($dict)) {
         return false;
     }
     // Failed to unserialize
     return $dict;
     // Asked for the whole dict
 }
Example #14
0
        $indices = 'posts';
        $sort = 'karma';
        break;
    default:
        $indices = 'links';
        $sort = 'votes';
}
header('Content-Type: application/json; charset=utf-8');
$series = array();
$min_yymm = PHP_INT_MAX;
$max_yymm = (int) date('Ym');
$sp = new RGDB('', '', '', $globals['sphinx_server']);
$sp->port = 9306;
$sp->connect();
$cache = new Annotation("sphinx-{$indices}");
if ($cache->read()) {
    /* If totals' cache is valid, just load the array */
    $totals = json_decode($cache->text, true);
} else {
    /* Otherwise, query to Sphinx and fills $totals */
    $totals = array();
    $res = $sp->get_results("select yearmonth(date) as yymm, count(*) as _count from {$indices} group by yymm limit 2000 option ranker = none");
    if ($res) {
        foreach ($res as $o) {
            $a = (array) $o;
            $totals[$o->yymm] = intval($a["_count"]);
        }
    }
    $cache->text = json_encode($totals);
    $cache->store(time() + 86400);
}