function prepare_items()
 {
     global $wpdb;
     $sql = 'SELECT term_id, name FROM `' . $wpdb->prefix . 'terms`';
     $buff = $wpdb->get_results($sql, ARRAY_A);
     if ($wpdb->last_error != '') {
         WPGrabberErrorHandler::add($wpdb->last_error, __FILE__, __LINE__);
     } elseif (count($buff)) {
         foreach ($buff as $el) {
             $this->categories[$el['term_id']] = $el['name'];
         }
     }
     $per_page = $this->get_items_per_page('wpgrabber_feeds_per_page', 10);
     $current_page = $this->get_pagenum();
     $this->_column_headers = $this->get_column_info();
     $sql_where = array();
     $sql_order = array();
     if (isset($_POST['s'])) {
         $search = trim($_POST['s']);
         if ($search != '') {
             $sql_where[] = 'w.`name` LIKE \'%' . esc_sql($search) . '%\'';
         }
     }
     if (isset($_SESSION['wpgrabberCategoryFilter']) and intval($_SESSION['wpgrabberCategoryFilter'])) {
         $sql_where[] = 'w.`catid` = ' . (int) $_SESSION['wpgrabberCategoryFilter'];
     }
     if (isset($_GET['orderby'])) {
         $orderby = trim($_GET['orderby']);
         $sortable = $this->get_sortable_columns();
         if ($orderby != '' and isset($sortable[$orderby])) {
             $table = $orderby == 'count_posts' ? '' : 'w.';
             $sql_order[] = $table . $orderby . ' ' . ((isset($_GET['order']) and $_GET['order'] == 'desc') ? 'DESC' : 'ASC');
         }
     }
     $sql_order[] = 'w.id DESC';
     $sql = 'SELECT SQL_CALC_FOUND_ROWS
       w.*, COUNT(wc.id) AS count_posts
     FROM `' . $wpdb->prefix . 'wpgrabber` AS w
     LEFT JOIN `' . $wpdb->prefix . 'wpgrabber_content` AS wc ON wc.feed_id = w.id
     ' . (!empty($sql_where) ? 'WHERE ' . implode(' AND ', $sql_where) : '') . '
     GROUP BY w.id
     ' . (!empty($sql_order) ? 'ORDER BY ' . implode(', ', $sql_order) : '') . '
     LIMIT ' . ($current_page - 1) * $per_page . ', ' . $per_page;
     $items = $wpdb->get_results($sql, ARRAY_A);
     if ($wpdb->last_error != '') {
         WPGrabberErrorHandler::add($wpdb->last_error, __FILE__, __LINE__);
     } else {
         $this->items = $items;
         $this->set_pagination_args(array('total_items' => $wpdb->get_var('SELECT FOUND_ROWS()'), 'per_page' => $per_page));
     }
 }
 protected function _afterExecute($id)
 {
     parent::_afterExecute($id);
     if ($this->testOn) {
     } else {
         foreach ($this->updateFeedData as $key => $value) {
             $sql[] = '`' . $key . '` = \'' . esc_sql($value) . '\'';
         }
         $sql = 'UPDATE `' . $this->db->prefix . 'wpgrabber`
       SET
         ' . implode(',', $sql) . '
       WHERE id = ' . (int) $id;
         $this->db->query($sql);
         if ($this->db->last_error != '') {
             WPGrabberErrorHandler::add($this->db->last_error, __FILE__, __LINE__);
         }
         $this->updateFeedData = array();
         $this->_echo('<br /><b>Импорт ленты: <a target="_blank" href="' . $this->feed['url'] . '">' . $this->feed['name'] . '</a> успешно завершен! - ' . date('H:i:s Y-m-d') . '</b><br />');
     }
 }
function wpgrabberGetErrorLogFile()
{
    WPGrabberErrorHandler::initPhpErrors();
    $filename = 'wpg_error_log.txt';
    $file = WPGrabberErrorHandler::getTxtLog();
    header('Content-type: text/plain');
    header('Content-Length: ' . strlen($file));
    header('Cache-Control: no-cache, must-revalidate');
    header('Pragma: no-cache');
    header('Content-Disposition: attachment; filename="' . $filename . '"');
    echo $file;
    exit;
}