/** * 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)); } }
/** * 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); } }