/**
 * Archive articles (cron task function).
 *
 * @param vivvo_lite_site	$sm
 */
function auto_update_article_stats($sm)
{
    $db = $sm->get_db();
    //get statistics
    $res = $db->query("SELECT * FROM " . VIVVO_DB_PREFIX . "articles_stats WHERE updated=1");
    while ($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)) {
        // update articles table
        $db->exec("UPDATE " . VIVVO_DB_PREFIX . "articles\n\t\t\t\t\t\tSET last_read='{$row['last_read']}', times_read={$row['times_read']}, today_read={$row['today_read']}\n\t\t\t\t\t\tWHERE id={$row['article_id']}");
        // reset updated flag if no new reads in mean time
        $db->exec("UPDATE " . VIVVO_DB_PREFIX . "articles_stats\n\t\t\t\t\t\tSET updated=0\n\t\t\t\t\t\tWHERE article_id={$row['article_id']} AND times_read={$row['times_read']}");
    }
    if (defined('VIVVO_CRONJOB_MODE')) {
        echo 'auto_update_article_stats: Finished.' . PHP_EOL;
    }
}
/**
 * Import articles (cron task function).
 *
 * @param vivvo_lite_site	$sm
 */
function auto_import_feeds($sm)
{
    require_once dirname(__FILE__) . '/../core/Feeds.class.php';
    require_once VIVVO_FS_FRAMEWORK . 'vivvo_post.php';
    $db = $sm->get_db();
    if (VIVVO_PLUGIN_FEED_IMPORTER_AUTO_DELETE > 0) {
        $datetime = date('Y-m-d H:i:59', VIVVO_START_TIME - VIVVO_PLUGIN_FEED_IMPORTER_AUTO_DELETE * 86400);
        if (VIVVO_PLUGIN_FEED_IMPORTER_TRASH) {
            $db->exec('UPDATE ' . VIVVO_DB_PREFIX . "articles SET status = -2 WHERE created < '{$datetime}' AND feed_item_id IS NOT NULL AND status > -2");
        } else {
            $db->exec('DELETE FROM ' . VIVVO_DB_PREFIX . "articles WHERE created < '{$datetime}' AND feed_item_id IS NOT NULL");
        }
    }
    if (VIVVO_PLUGIN_FEED_IMPORTER_AUTO_ARCHIVE > 0) {
        $datetime = date('Y-m-d H:i:59', VIVVO_START_TIME - VIVVO_PLUGIN_FEED_IMPORTER_AUTO_ARCHIVE * 86400);
        $db->exec('UPDATE ' . VIVVO_DB_PREFIX . "articles SET status = -1 WHERE created < '{$datetime}' AND feed_item_id IS NOT NULL");
    }
    $feed_list = Feeds_list::factory();
    $feed_list->search(array());
    $post_master = new vivvo_post_master($sm);
    $total_added = 0;
    $total_updated = 0;
    foreach ($feed_list->list as $feed) {
        $counts = $feed->import_articles();
        $total_added += $counts[0];
        $total_updated += $counts[1];
        $post_master->set_data_object($feed);
        $post_master->sql_update();
    }
    if (defined('VIVVO_CRONJOB_MODE')) {
        $feed_count = count($feed_list->list);
        echo "auto_import_feeds: Imported {$total_added} and updated {$total_updated} article(s) from {$feed_count} feed(s)." . PHP_EOL;
    } elseif (defined('VIVVO_FEED_IMPORTER_ADMIN_VIEW')) {
        echo json_encode(array('feeds' => count($feed_list->list), 'added' => $total_added, 'updated' => $total_updated));
    }
}
Exemple #3
0
/**
 * Relate articles (cron task function).
 *
 * @param vivvo_lite_site	$sm
 */
function auto_relate($sm)
{
    if (!VIVVO_ARTICLE_RELATED_CATEGORY and !VIVVO_ARTICLE_RELATED_TAGS and !VIVVO_ARTICLE_RELATED_TOPIC) {
        $result = 'Nothing to do.';
    } else {
        $datetime = date('Y-m-d 23:59:00');
        $db = $sm->get_db();
        do {
            $res = $db->query('SELECT COUNT(*) FROM ' . VIVVO_DB_PREFIX . "articles WHERE created < '{$datetime}' AND status > 0");
            if (!PEAR::isError($res)) {
                $count = $res->fetchOne();
                $res->free();
            } else {
                $result = 'Failed to run.';
                break;
            }
            $db->exec('TRUNCATE TABLE ' . VIVVO_DB_PREFIX . 'related');
            $res = $db->query('SELECT id, category_id FROM ' . VIVVO_DB_PREFIX . "articles WHERE created <= '{$datetime}' AND status > 0");
            if (PEAR::isError($res)) {
                $result = 'Failed to select articles.';
                break;
            }
            $max = VIVVO_ARTICLE_RELATED_CATEGORY + VIVVO_ARTICLE_RELATED_TOPIC + VIVVO_ARTICLE_RELATED_TAGS;
            $rel_category = VIVVO_ARTICLE_RELATED_CATEGORY;
            $rel_parent = VIVVO_ARTICLE_RELATED_CATEGORY / 2;
            $categories = $sm->get_categories()->list;
            while ($row = $res->fetchRow(MDB2_FETCHMODE_ASSOC)) {
                $category_id = $row['category_id'];
                $parent_id = $categories[$category_id]->get_parent_cat();
                $sum = array();
                $join = '';
                if (VIVVO_ARTICLE_RELATED_CATEGORY >= 0) {
                    $sum[] = "IF(a.category_id = {$category_id}, {$rel_category}, IF(a.category_id = {$parent_id}, {$rel_parent}, 0))";
                }
                if (VIVVO_ARTICLE_RELATED_TOPIC >= 0) {
                    $topics_res = $db->query('SELECT DISTINCT tags_groups_id FROM ' . VIVVO_DB_PREFIX . "articles_tags WHERE article_id = {$row['id']}");
                    if (PEAR::isError($topics_res)) {
                        $topics = array();
                    } else {
                        $topics = $topics_res->fetchCol();
                        $topics_res->free();
                    }
                    if (!empty($topics)) {
                        $join .= ' INNER JOIN ' . VIVVO_DB_PREFIX . 'articles_tags AS at1 ON (at1.article_id = a.id AND at1.tags_group_id IN (' . implode(',', $topics) . '))';
                        $sum[] = 'COUNT(DISTINCT at1.tags_groups_id) * ' . VIVVO_ARTICLE_RELATED_TOPIC / count($topics);
                    }
                }
                if (VIVVO_ARTICLE_RELATED_TAGS >= 0) {
                    $tags_res = $db->query('SELECT DISTINCT tag_id FROM ' . VIVVO_DB_PREFIX . "articles_tags WHERE article_id = {$row['id']}");
                    if (PEAR::isError($tags_res)) {
                        $tags = array();
                    } else {
                        $tags = $tags_res->fetchCol();
                        $tags_res->free();
                    }
                    if (!empty($tags)) {
                        $join .= ' INNER JOIN ' . VIVVO_DB_PREFIX . 'articles_tags AS at2 ON (at2.article_id = a.id AND at2.tag_id IN (' . implode(',', $tags) . '))';
                        $sum[] = 'COUNT(DISTINCT at2.tag_id) * ' . VIVVO_ARTICLE_RELATED_TAGS / count($tags);
                    }
                }
                $sql = 'SELECT a.id, (' . implode('+', $sum) . ') AS score
							FROM ' . VIVVO_DB_PREFIX . "articles AS a\r\n\t\t\t\t\t\t\t{$join}\r\n\t\t\t\t\t\t\tWHERE created <= '{$datetime}' AND status > 0 AND a.id != {$row['id']}\r\n\t\t\t\t\t\t\tGROUP BY a.id\r\n\t\t\t\t\t\t\tHAVING score > 0\r\n\t\t\t\t\t\t\tORDER BY score DESC\r\n\t\t\t\t\t\t\tLIMIT 5";
                $related = $db->query($sql);
                if (PEAR::isError($related)) {
                    $result = 'Failed to fetch related articles.';
                    break 2;
                }
                $values = array();
                while ($related_row = $related->fetchRow(MDB2_FETCHMODE_ASSOC)) {
                    $relevance = floor($related_row['score'] / $max * 100);
                    $values[] = "({$row['id']},{$related_row['id']},{$relevance})";
                }
                $related->free();
                $db->exec('INSERT INTO ' . VIVVO_DB_PREFIX . 'related VALUES ' . implode(',', $values));
            }
            $result = 'Executed successfully.';
        } while (0);
    }
    if (defined('VIVVO_CRONJOB_MODE')) {
        echo 'auto_relate: ' . $result . PHP_EOL;
    } else {
        admin_log('(Cron task: Auto Relate)', $result);
    }
}