<?php
include_once(dirname(__FILE__) . '/bibtexparser.inc.php');
include_once(dirname(__FILE__) . '/printerfactory.inc.php');
include_once(dirname(__FILE__) . '/functions.inc.php');

add_shortcode('bibpress', 'bibpress_showlist');
add_shortcode('bibpresscite', 'bibpress_cite');

$bibpress_groupby = '';
$bibpress_sortby = '';

#add_action('wp_print_styles', 'bibpress_addcss');
add_action('init', 'bibpress_addHeaderLinks');

function bibpress_cite($params) {
	global $bibpress_groupby, $bibpress_sortby;

	extract(shortcode_atts(array(
		'printer' => 'default',
		'groupby' => 'year',
		'sortby' => 'title',
		'items' => '',
	), $params));

	$bibpress_source_file = ABSPATH  . '/wp-content/bibtex/' . get_option('bibpress_bibtex_file');

	if(!file_exists($bibpress_source_file) || !is_file($bibpress_source_file) || !is_readable($bibpress_source_file)) {
		return (__('Bibpress error: given file is not a file or doesn\'t exists or is not readable:') . $bibpress_source_file);
	}

	$bibpress_groupby = $groupby;
	$bibpress_sortby = $sortby;

	$entries = bibpress_getEntries($bibpress_source_file);

	if(!array_key_exists('entries', $entries))
		throw new Exception('No entries found');
	$entries = $entries['entries'];

	if($groupby != '' || $sortby != '') {
		usort($entries, 'bibpress_sortEntries');
	}
	

	$printer = BibtexPrinterFactory::getPrinter($printer);

	$entriesToShow = explode(',', $items);
	if(!$entriesToShow || count($entriesToShow) == 0) return '';

	$result = '';


	foreach($entries as $entry) {
		$curCite = $entry['bibtexCitation'];

		if(isset($curCite) && $curCite != '') {
			foreach($entriesToShow as $toCite) {
				if($curCite == $toCite) {
					$result .= $printer->printEntry($entry, 'inlineCite');
				}
			}
		}
	}

	return $result;
}

function bibpress_showlist($params) {
	global $bibpress_groupby, $bibpress_sortby;

	extract(shortcode_atts(array(
		'printer' => 'default',
		'groupby' => 'year',
		'sortby' => 'title',
	), $params));

	$uploadDir = wp_upload_dir();	
	$bibpress_source_file = ABSPATH  . '/wp-content/bibtex/' . get_option('bibpress_bibtex_file');

	if(!file_exists($bibpress_source_file) || !is_file($bibpress_source_file) || !is_readable($bibpress_source_file)) {
		return (__('Bibpress error: given file is not a file or doesn\'t exists or is not readable:') . $bibpress_source_file);
	}


	$bibpress_groupby = $groupby;
	$bibpress_sortby = $sortby;

	$entries = bibpress_getEntries($bibpress_source_file);

	if(!array_key_exists('entries', $entries))
		throw new Exception('No entries found');
	$entries = $entries['entries'];

	if($groupby != '' || $sortby != '') {
		usort($entries, 'bibpress_sortEntries');
	}

	$printer = BibtexPrinterFactory::getPrinter($printer);

	$result = '';
	foreach($entries as $entry) $result .= $printer->printEntry($entry);

	return $result;

}

function bibpress_sortEntries($a, $b) {
	global $bibpress_groupby, $bibpress_sortby;

	$result = 0;

	if($bibpress_groupby != '') 
		$result = -1 * strcmp($a[$bibpress_groupby], $b[$bibpress_groupby]);

	if($bibpress_sortby != '' && $result == 0)
		$result = strcmp($a[$bibpress_sortby], $b[$bibpress_sortby]);

	return $result;
}
?>
