201 lines
8.9 KiB
PHP
201 lines
8.9 KiB
PHP
<?php
|
|
/**
|
|
* This file contains the feed constructors
|
|
* @package teachpress/core
|
|
* @license http://www.gnu.org/licenses/gpl-2.0.html GPLv2 or later
|
|
*/
|
|
|
|
/**
|
|
* Generate RSS feed for publications
|
|
* @since 6.0.0
|
|
*/
|
|
function tp_pub_rss_feed_func () {
|
|
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
|
|
$tag = isset($_GET['tag']) ? intval($_GET['tag']) : 0;
|
|
$url = (isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . esc_url($_SERVER['REQUEST_URI']);
|
|
header("Content-Type: application/xml;");
|
|
echo '<?xml version="1.0" encoding="'.get_option('blog_charset').'"?'.'>' . chr(13) . chr(10);
|
|
echo '<rss version="2.0"
|
|
xmlns:content="http://purl.org/rss/1.0/modules/content/"
|
|
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
|
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
xmlns:atom="http://www.w3.org/2005/Atom"
|
|
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
|
|
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
|
|
>' . chr(13) . chr(10);
|
|
echo '<channel>
|
|
<title>' . get_bloginfo('name') . '</title>
|
|
<atom:link href="' . $url . '" rel="self" type="application/rss+xml" />
|
|
<link>' . get_bloginfo('url') . '</link>
|
|
<description>' . get_bloginfo('description') . '</description>
|
|
<language>' . get_bloginfo('language') . '</language>
|
|
<sy:updatePeriod>daily</sy:updatePeriod>
|
|
<sy:updateFrequency>1</sy:updateFrequency>
|
|
<copyright>' . get_bloginfo('name') . '</copyright>
|
|
<pubDate>' . date('r') . '</pubDate>
|
|
<dc:creator>' . get_bloginfo('name') . '</dc:creator>' . chr(13) . chr(10);
|
|
$row = TP_Publications::get_publications(
|
|
array('user' => $id,
|
|
'tag' => $tag,
|
|
'limit' => '0,30',
|
|
'output_type' => ARRAY_A)
|
|
);
|
|
foreach ($row as $row) {
|
|
|
|
// prepare url
|
|
if ( $row['doi'] != '') {
|
|
$item_link = "https://dx.doi.org/" . $row['doi'];
|
|
} elseif ( $row['url'] != '' ) {
|
|
$new = explode(', ', $row['url']);
|
|
$item_link = $new[0];
|
|
} elseif ($row['rel_page'] != '') {
|
|
$item_link = get_bloginfo('url') . '/?page=' . $row['rel_page'];
|
|
} else {
|
|
$item_link = get_bloginfo('url');
|
|
}
|
|
|
|
// prepare author name
|
|
if ( $row['type'] === 'collection' || ( $row['author'] === '' && $row['editor'] !== '' ) ) {
|
|
$all_authors = str_replace(' and ', ', ', TP_HTML::convert_special_chars( $row['editor'] ) ) . ' (' . __('Ed.','teachpress') . ')';
|
|
}
|
|
else {
|
|
$all_authors = str_replace(' and ', ', ', TP_HTML::convert_special_chars( $row['author'] ) );
|
|
}
|
|
|
|
$row['title'] = TP_HTML::convert_special_chars($row['title']);
|
|
$item_link = str_replace( array("\r\n", "\r", "\n"), ',', TP_HTML::convert_special_chars($item_link) );
|
|
$item_link1 = explode(',', $item_link);
|
|
$settings = array(
|
|
'editor_name' => 'simple',
|
|
'editor_separator' => ',',
|
|
'style' => 'simple',
|
|
'meta_label_in' => __('In','teachpress') . ': ',
|
|
'use_span' => false
|
|
);
|
|
echo '
|
|
<item>
|
|
<title><![CDATA[' . TP_HTML::prepare_title($row['title'], 'replace') . ']]></title>
|
|
<description><![CDATA[' . TP_HTML_Publication_Template::get_publication_meta_row($row, $settings) . ']]></description>
|
|
<link><![CDATA[' . $item_link1[0] . ']]></link>
|
|
<dc:creator>' . stripslashes($all_authors) . '</dc:creator>
|
|
<guid isPermaLink="false">' . get_bloginfo('url') . '?publication=' . $row['pub_id'] . '</guid>
|
|
<pubDate>' . date('r', strtotime($row['date'])) . '</pubDate>
|
|
</item>' . chr(13) . chr(10);
|
|
}
|
|
echo '</channel>' . chr(13) . chr(10);
|
|
echo '</rss>';
|
|
}
|
|
|
|
/**
|
|
* Generates the BibTeX publication feed
|
|
* @since 6.0.0
|
|
*/
|
|
function tp_pub_bibtex_feed_func () {
|
|
$id = isset( $_GET['id'] ) ? intval($_GET['id']) : 0;
|
|
$tag = isset( $_GET['tag'] ) ? intval($_GET['tag']) : 0;
|
|
$use_bibtool = isset( $_GET['use_bibtool'] ) ? true : false;
|
|
header('Content-Type: text/plain; charset=utf-8;');
|
|
$convert_bibtex = ( get_tp_option('convert_bibtex') == '1' ) ? true : false;
|
|
$row = TP_Publications::get_publications(array('user' => $id, 'tag' => $tag, 'output_type' => ARRAY_A));
|
|
$result = '';
|
|
foreach ($row as $row) {
|
|
$tags = TP_Tags::get_tags(array('pub_id' => $row['pub_id'], 'output_type' => ARRAY_A));
|
|
// if you want to use bibtool
|
|
if ( $use_bibtool === true ) {
|
|
$result .= TP_Bibtex::get_single_publication_bibtex($row, $tags, $convert_bibtex);
|
|
}
|
|
// the general way
|
|
else {
|
|
echo TP_Bibtex::get_single_publication_bibtex($row, $tags, $convert_bibtex);
|
|
}
|
|
}
|
|
if ( $use_bibtool === true ) {
|
|
$trimmed = trim(preg_replace('/\s+/', ' ', $result));
|
|
passthru('echo ' . escapeshellarg($trimmed) . ' | bibtool -f "%-2n(author)_%-3T(title)_%2d(year)" -q ');
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generates the export stream
|
|
* @since 6.0.0
|
|
*/
|
|
function tp_export_feed_func() {
|
|
$key = isset ( $_GET['key'] ) ? $_GET['key'] : '';
|
|
// Export single publication
|
|
if ( $key != '' ) {
|
|
header('Content-Type: text/plain; charset=utf-8' );
|
|
$filename = preg_replace('/[^a-zA-Z0-9]/', '_', $key);
|
|
header("Content-Disposition: attachment; filename=" . $filename . ".bib");
|
|
TP_Export::get_publication_by_key($key);
|
|
}
|
|
elseif ( is_user_logged_in() && current_user_can('use_teachpress') ) {
|
|
$type = isset ( $_GET['type'] ) ? htmlspecialchars($_GET['type']) : '';
|
|
$course_id = isset ( $_GET['course_id'] ) ? intval($_GET['course_id']) : 0;
|
|
$user_id = isset ( $_GET['tp_user'] ) ? intval($_GET['tp_user']) : 0;
|
|
$format = isset ( $_GET['tp_format'] ) ? htmlspecialchars($_GET['tp_format']) : '';
|
|
$sel = isset ( $_GET['tp_sel'] ) ? htmlspecialchars($_GET['tp_sel']) : '';
|
|
$filename = 'teachpress_course_' . $course_id . '_' . date('dmY');
|
|
|
|
// Export courses
|
|
if ( $type === "xls" && $course_id != 0 ) {
|
|
header("Content-type: application/vnd-ms-excel; charset=utf-8");
|
|
header("Content-Disposition: attachment; filename=" . $filename . ".xls");
|
|
TP_Export::get_course_xls($course_id);
|
|
}
|
|
|
|
if ( $type === 'csv' && $course_id != 0 ) {
|
|
header('Content-Type: text/x-csv');
|
|
header("Content-Disposition: attachment; filename=" . $filename . ".csv");
|
|
TP_Export::get_course_csv($course_id);
|
|
}
|
|
|
|
// Export publication lists
|
|
if ( $type === 'pub' ) {
|
|
$filename = 'teachpress_pub_' . date('dmY');
|
|
$encoding = ( get_tp_option('convert_bibtex') == '1' ) ? 'Cp1252' : 'UTF-8';
|
|
if ( $format === 'bib' ) {
|
|
header('Content-Type: text/plain; charset=utf-8' );
|
|
header("Content-Disposition: attachment; filename=" . $filename . ".bib");
|
|
echo '% This file was created with teachPress ' . get_tp_version() . chr(13) . chr(10);
|
|
echo '% Encoding: ' . $encoding . chr(13) . chr(10) . chr(13) . chr(10);
|
|
if ( $sel == '' ) {
|
|
TP_Export::get_publications($user_id);
|
|
}
|
|
else {
|
|
TP_Export::get_selected_publications($sel);
|
|
}
|
|
}
|
|
if ( $format === 'txt' ) {
|
|
header('Content-Type: text/plain; charset=utf-8' );
|
|
header("Content-Disposition: attachment; filename=" . $filename . ".txt");
|
|
TP_Export::get_publications($user_id,'bibtex');
|
|
}
|
|
if ( $format === 'rtf' ) {
|
|
header('Content-Type: text/plain; charset=utf-8' );
|
|
header("Content-Disposition: attachment; filename=" . $filename . ".rtf");
|
|
TP_Export::get_publications($user_id,'rtf');
|
|
}
|
|
if ( $format === 'rss' ) {
|
|
if ( $user_id == 0 ) {
|
|
header("Location: " . home_url() . '?feed=tp_pub_rss');
|
|
exit;
|
|
}
|
|
else {
|
|
header("Location: " . home_url() . "?feed=tp_pub_rss&id=$user_id");
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
// return a plain text with nothing
|
|
header('Content-Type: text/plain; charset=utf-8' );
|
|
return;
|
|
}
|
|
}
|
|
else {
|
|
// return a plain text with nothing
|
|
header('Content-Type: text/plain; charset=utf-8' );
|
|
return;
|
|
}
|
|
}
|