/**
 * 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));
    }
}
 /**
  * Feed list view
  */
 public function _list_output($assign_list = true)
 {
     $pm = vivvo_lite_site::get_instance()->get_plugin_manager();
     $content_template = $this->load_template($this->_template_root . 'list.xml');
     require_once dirname(__FILE__) . '/core/Feeds.class.php';
     $feed_list = new Feeds_list();
     $feed_list->search(array());
     $content_template->assign('feed_list', $feed_list->list);
     return $content_template;
 }
Example #3
0
 /**
  * Edit feed
  *
  * @param	integer	$feed_id
  * @param	array	$data
  * @return	boolean	true on succes, or false on fail
  */
 public function edit_feed($feed_id, $data)
 {
     if (!$this->check_token()) {
         return false;
     }
     $sm = vivvo_lite_site::get_instance();
     if ($sm->user and $sm->user->can('MANAGE_PLUGIN', 'feed_importer')) {
         if (!vivvo_hooks_manager::call('feed_edit', array(&$feed_id, &$data))) {
             return vivvo_hooks_manager::get_status();
         }
         $feed_list = new Feeds_list();
         $feed_list->search(array());
         if (!empty($data['feed'])) {
             $remove_keys = array_diff(array_keys($feed_list->list), array_keys($data['feed']));
         } else {
             $remove_keys = array_keys($feed_list->list);
         }
         if (!empty($remove_keys)) {
             $feed_list->sql_delete_list($this->_post_master, $remove_keys);
         }
         $edit_keys = $feed_list->get_list_ids();
         $feed_check = array();
         require_once VIVVO_FS_INSTALL_ROOT . 'lib/simplepie/simplepie.php';
         if (is_array($edit_keys) and !empty($edit_keys)) {
             foreach ($edit_keys as $edit_key) {
                 if (!in_array($data['feed'][$edit_key]['feed'], $feed_check)) {
                     $feed_check[] = $data['feed'][$edit_key]['feed'];
                     $feed_list->list[$edit_key]->set_feed($data['feed'][$edit_key]['feed']);
                     $feed_list->list[$edit_key]->set_category_id($data['feed'][$edit_key]['category_id']);
                     $feed_list->list[$edit_key]->set_author($data['feed'][$edit_key]['author']);
                     $simplepie = new SimplePie();
                     $simplepie->enable_cache(false);
                     $simplepie->set_feed_url($data['feed'][$edit_key]['feed']);
                     @$simplepie->init();
                     if (!$simplepie->error()) {
                         $feed_list->list[$edit_key]->set_favicon($simplepie->get_favicon());
                         $this->_post_master->set_data_object($feed_list->list[$edit_key]);
                         $this->_post_master->sql_update();
                     }
                 } else {
                     $this->_post_master->set_data_object($feed_list->list[$edit_key]);
                     $this->_post_master->sql_delete();
                 }
             }
         }
         if (is_array($data['new_feed']) and !empty($data['new_feed'])) {
             foreach ($data['new_feed'] as $add_key => $value) {
                 if (!in_array($data['new_feed'][$add_key]['feed'], $feed_check)) {
                     $feed_check[] = $data['new_feed'][$add_key]['feed'];
                     $new_feed_object = new Feeds();
                     $new_feed_object->set_feed($data['new_feed'][$add_key]['feed']);
                     $new_feed_object->set_category_id($data['new_feed'][$add_key]['category_id']);
                     $new_feed_object->set_author($data['new_feed'][$add_key]['author']);
                     $simplepie = new SimplePie();
                     $simplepie->enable_cache(false);
                     $simplepie->set_feed_url($data['new_feed'][$add_key]['feed']);
                     @$simplepie->init();
                     if (!$simplepie->error()) {
                         $new_feed_object->set_favicon($simplepie->get_favicon());
                         $this->_post_master->set_data_object($new_feed_object);
                         $this->_post_master->sql_insert();
                     }
                 }
             }
         }
         return true;
     } else {
         $this->set_error_code(10103);
         // you don't have sufficient privileges for this action
         return false;
     }
 }