ASong2U_Web/wp-content/plugins/wp-views/embedded/inc/wpv-pagination-embedded.php

489 lines
17 KiB
PHP

<?php
// Set the default values to display in the View editor.
add_filter('wpv_view_settings', 'wpv_pager_defaults', 10, 2);
function wpv_pager_defaults($view_settings, $view_id=null) {
$defaults = array(
'posts_per_page' => 10,
'pagination' => array(
0 => 'disable',
'mode' => 'paged',
'preload_images' => 1,
'cache_pages' => 1,
'preload_pages' => 1,
'spinner' => 'default',
'spinner_image' => WPV_URL . '/res/img/ajax-loader.gif',
'spinner_image_uploaded' => '',
'callback_next' => '',
'page_selector_control_type' => 'drop_down',
),
'ajax_pagination' => array(
0 => 'disable',
'style' => 'fade',
),
'rollover' => array(
'posts_per_page' => 4,
'speed' => 5,
'effect' => 'fade',
'preload_images' => 1,
'include_page_selector' => 0,
),
);
$view_settings = wpv_parse_args_recursive($view_settings, $defaults);
if ($view_settings['pagination']['spinner'] == 'uploaded') {
$view_settings['pagination']['spinner_image'] = $view_settings['pagination']['spinner_image_uploaded'];
}
return $view_settings;
}
add_filter('wpv_view_settings_save', 'wpv_pager_defaults_save', 10, 1);
function wpv_pager_defaults_save($view_settings) {
// we need to set 0 for the checkboxes that aren't checked and are missing for the $_POST.
$defaults = array(
'pagination' => array(
'preload_images' => 0,
'cache_pages' => 0,
'preload_pages' => 0,
),
'rollover' => array(
'preload_images' => 0,
),
);
$view_settings = wpv_parse_args_recursive($view_settings, $defaults);
return $view_settings;
}
/**
* Views-Shortcode: wpv-pagination
*
* Description: Display the pagination controls that are within the shortcode.
* The pagination controls will only be displayed if there are multiple
* pages to display
*
* Parameters:
* This has no parameters.
*
*/
add_shortcode('wpv-pagination', 'wpv_pagination_shortcode');
function wpv_pagination_shortcode($atts, $value) {
extract(
shortcode_atts(array(), $atts)
);
global $WP_Views;
if ($WP_Views->get_max_pages() > 1.0) {
// output the pagination.
return wpv_do_shortcode($value);
} else {
// only 1 page so we don't need any pagination controls.
return '';
}
}
/**
* Views-Shortcode: wpv-pager-num-page
*
* Description: Display the maximum number of pages found by the Views Query.
*
* Parameters:
* This has no parameters.
*
*/
add_shortcode('wpv-pager-num-page', 'wpv_pager_num_page_shortcode');
function wpv_pager_num_page_shortcode($atts) {
extract(
shortcode_atts(array(), $atts)
);
global $WP_Views;
return sprintf('%1.0f', $WP_Views->get_max_pages());
}
/**
* Views-Shortcode: wpv-pager-prev-page
*
* Description: Display a "Previous" link to move to the previous page.
* eg. [wpv-pager-prev-page]Previous[/wpv-pager-prev-page]
*
* Parameters:
* This has no parameters.
*
*/
add_shortcode('wpv-pager-prev-page', 'wpv_pager_prev_page_shortcode');
function wpv_pager_prev_page_shortcode($atts, $value) {
extract(
shortcode_atts(array(), $atts)
);
global $WP_Views;
$page = $WP_Views->get_current_page_number();
if ($page > 1) {
$page--;
$value = wpv_do_shortcode($value);
// TODO remove
// return '<a href="#" onclick="return wpv_pager_click_' . $WP_Views->get_view_count() . '(\'' . $page. '\')">' . $value . '</a>';
$view_settings = $WP_Views->get_view_settings();
$ajax = $view_settings['ajax_pagination'][0] == 'enable' ? 'true' : 'false';
$effect = isset($view_settings['ajax_pagination']['style']) ? $view_settings['ajax_pagination']['style'] : 'fade';
$cache_pages = $view_settings['pagination']['cache_pages'];
$preload_pages = $view_settings['pagination']['preload_pages'];
$spinner = $view_settings['pagination']['spinner'];
$spinner_image = $view_settings['pagination']['spinner_image'];
$callback_next = $view_settings['pagination']['callback_next'];
return '<a href="#" class="wpv-filter-previous-link" onclick="return wpv_pagination_replace_view(' . $WP_Views->get_view_count() . ',' . $page . ', ' . $ajax . ', \'' . $effect . '\', ' . $WP_Views->get_max_pages() . ', ' . $cache_pages . ', ' . $preload_pages . ', \'' . $spinner . '\', \'' . $spinner_image . '\', \'' . $callback_next . '\', false)">' . $value . '</a>';
} else {
return '';
}
}
/**
* Views-Shortcode: wpv-pager-next-page
*
* Description: Display a "Next" link to move to the next page.
* eg. [wpv-pager-next-page]Next[/wpv-pager-next-page]
*
* Parameters:
* This has no parameters.
*
*/
add_shortcode('wpv-pager-next-page', 'wpv_pager_next_page_shortcode');
function wpv_pager_next_page_shortcode($atts, $value) {
extract(
shortcode_atts(array(), $atts)
);
global $WP_Views;
$page = $WP_Views->get_current_page_number();
if ($page < $WP_Views->get_max_pages()) {
$page++;
$value = wpv_do_shortcode($value);
// TODO remove
// return '<a href="#" onclick="return wpv_pager_click_' . $WP_Views->get_view_count() . '(\'' . $page. '\')">' . $value . '</a>';
$view_settings = $WP_Views->get_view_settings();
$ajax = $view_settings['ajax_pagination'][0] == 'enable' ? 'true' : 'false';
$effect = isset($view_settings['ajax_pagination']['style']) ? $view_settings['ajax_pagination']['style'] : 'fade';
$cache_pages = $view_settings['pagination']['cache_pages'];
$preload_pages = $view_settings['pagination']['preload_pages'];
$spinner = $view_settings['pagination']['spinner'];
$spinner_image = $view_settings['pagination']['spinner_image'];
$callback_next = $view_settings['pagination']['callback_next'];
return '<a href="#" class="wpv-filter-next-link" onclick="return wpv_pagination_replace_view(' . $WP_Views->get_view_count() . ',' . $page . ', ' . $ajax . ', \'' . $effect . '\',' . $WP_Views->get_max_pages() . ', ' . $cache_pages . ', ' . $preload_pages . ', \'' . $spinner . '\', \'' . $spinner_image . '\', \'' . $callback_next . '\', false)">' . $value . '</a>';
} else {
return '';
}
}
/**
* Views-Shortcode: wpv-pager-current-page
*
* Description: Display the current page number. It can be displayed as a number
* or as a drop-down list to select another page.
*
* Parameters:
* 'style' => leave empty to display a number.
* 'style' => 'drop_down' to display a selector to select another page.
* 'stile' => 'link' to display a series of links to each page
*
*/
add_shortcode('wpv-pager-current-page', 'wpv_pager_current_page_shortcode');
function wpv_pager_current_page_shortcode($atts) {
extract(
shortcode_atts(array(), $atts)
);
global $WP_Views;
$page = $WP_Views->get_current_page_number();
if (isset($atts['style'])) {
$view_settings = $WP_Views->get_view_settings();
$cache_pages = $view_settings['pagination']['cache_pages'];
$preload_pages = $view_settings['pagination']['preload_pages'];
$spinner = $view_settings['pagination']['spinner'];
$spinner_image = $view_settings['pagination']['spinner_image'];
$callback_next = $view_settings['pagination']['callback_next'];
if ($view_settings['pagination']['mode'] == 'paged') {
$ajax = $view_settings['ajax_pagination'][0] == 'enable' ? 'true' : 'false';
$effect = isset($view_settings['ajax_pagination']['style']) ? $view_settings['ajax_pagination']['style'] : 'fade';
}
if ($view_settings['pagination']['mode'] == 'rollover') {
$ajax = 'true';
$effect = $view_settings['rollover']['effect'];
// convert rollover to slide effect if the user clicks on a page.
if ($effect == 'slideleft' || $effect == 'slideright') {
$effect = 'slideh';
}
if ($effect == 'slideup' || $effect == 'slidedown') {
$effect = 'slidev';
}
}
switch($atts['style']) {
case 'drop_down':
$out = '';
$out .= '<select id="wpv-page-selector-' . $WP_Views->get_view_count() . '" onchange="wpv_pagination_replace_view(' . $WP_Views->get_view_count() . ', jQuery(this).val(), ' . $ajax . ', \'' . $effect . '\',' . $WP_Views->get_max_pages() . ', ' . $cache_pages . ', ' . $preload_pages . ', \'' . $spinner . '\', \'' . $spinner_image . '\', \'' . $callback_next . '\', true);">' . "\n";
$max_page = intval($WP_Views->get_max_pages());
for ($i = 1; $i < $max_page + 1; $i++) {
$is_selected = $i == $page ? ' selected="selected"' : '';
$page_number = apply_filters('wpv_pagination_page_number', $i);
$out .= '<option value="' . $i . '" ' . $is_selected . '>' . $page_number . "</option>\n";
}
$out .= "</select>\n";
return $out;
case 'link':
$page_count = intval($WP_Views->get_max_pages());
// output a series of links to each page.
$out = '<div class="wpv_pagination_links">';
$out .= '<ul class="wpv_pagination_dots" style="list-style-position:outside; margin: 0; list-style-type: none;">';
for ($i = 1; $i < $page_count + 1; $i++) {
$page_title = sprintf(__('Page %s', 'wpv-views'), $i);
$page_title = apply_filters('wpv_pagination_page_title', $page_title, $i);
$page_number = apply_filters('wpv_pagination_page_number', $i);
$link = '<a title="' . $page_title . '" href="#" class="wpv-filter-previous-link" onclick="wpv_pagination_replace_view_links(' . $WP_Views->get_view_count() . ',' . $i . ', ' . $ajax . ', \'' . $effect . '\', ' . $page_count . ', ' . $cache_pages . ', ' . $preload_pages . ', \'' . $spinner . '\', \'' . $spinner_image . '\', \'' . $callback_next . '\', true); return false;">' . $page_number . '</a>';
$link_id = 'wpv-page-link-' . $WP_Views->get_view_count() . '-' . $i;
if ($i == $page) {
$out .= '<li style="list-style-position:outside; list-style-type: none; float: left; margin-right: 5px;" id="' . $link_id . '" class="wpv_page_current">' . $link . '</li>';
} else {
$out .= '<li style="list-style-position:outside; list-style-type: none; float: left; margin-right: 5px;" id="' . $link_id . '">' . $link . '</li>';
}
}
$out .= '</ul>';
$out .= '</div>';
$out .= '<br />';
return $out;
}
} else {
// show the page number.
return sprintf('%d', $page);
}
}
function wpv_pagination_js() {
static $js_rendered = false;
if ($js_rendered == false) {
$ajax_url = site_url();
if (substr($ajax_url, strlen($ajax_url) - 1, 1) != '/') {
$ajax_url .= '/';
}
$permalink_structure = get_option('permalink_structure');
if ($permalink_structure != '') {
$ajax_url .= 'wpv-ajax-pagination/';
} else {
$ajax_url = plugins_url('wpv-ajax-pagination-default.php', __FILE__);
}
?>
<script type="text/javascript">
var wpv_admin_ajax_url = "<?php echo admin_url('admin-ajax.php'); ?>";
var wpv_ajax_pagination_url = "<?php echo $ajax_url; ?>";
</script>
<?php
$js_rendered = true;
}
}
function wpv_pagination_rollover_shortcode() {
global $WP_Views;
$view_settings = $WP_Views->get_view_settings();
$view_settings['rollover']['count'] = $WP_Views->get_max_pages();
wpv_pagination_rollover_add_slide($WP_Views->get_view_count(),
$view_settings);
add_action('wp_footer', 'wpv_pagination_rollover_js');
}
function wpv_pagination_rollover_add_slide($id, $settings = array()) {
static $rollovers = array();
if ($id == 'get') {
return $rollovers;
}
$rollovers[$id] = $settings;
}
function wpv_pagination_rollover_js() {
$rollovers = wpv_pagination_rollover_add_slide('get');
if (!empty($rollovers)) {
global $WP_Views;
$out = '';
wpv_pagination_js();
?>
<script type="text/javascript">
jQuery(document).ready(function(){
<?php
foreach ($rollovers as $id => $rollover) {
$out .= 'jQuery("#wpv-view-layout-' . $id . '").wpvRollover({id: ' . $id
. ', effect: "' . $rollover['rollover']['effect']
. '", speed: ' . $rollover['rollover']['speed']
. ', page: 1, count: ' . $rollover['rollover']['count']
. ', cache_pages:' . $rollover['pagination']['cache_pages']
. ', preload_pages:' . $rollover['pagination']['preload_pages']
. ', spinner:"' . $rollover['pagination']['spinner'] . '"'
. ', spinner_image:"' . $rollover['pagination']['spinner_image'] . '"'
. ', callback_next:"' . $rollover['pagination']['callback_next'] . '"'
. '});' . "\r\n";
}
echo $out;
?>
});
</script>
<?php
}
}
// add a filter so we can set the correct language in WPML during pagination
add_filter('icl_current_language', 'wpv_ajax_pagination_lang');
function wpv_ajax_pagination_lang($lang) {
if (isset($_POST['action']) && $_POST['action'] == 'wpv_get_page' && isset($_POST['lang'])) {
$lang = $_POST['lang'];
}
return $lang;
}
// Gets the new page for a view.
function wpv_ajax_get_page($post_data) {
global $WP_Views;
// Fix a problem with WPML using cookie language when DOING_AJAX is set.
$cookie_lang = null;
if (isset($_COOKIE['_icl_current_language']) && isset($post_data['lang'])) {
$cookie_lang = $_COOKIE['_icl_current_language'];
$_COOKIE['_icl_current_language'] = $post_data['lang'];
}
// Switch WPML to the correct language.
if (isset($post_data['lang'])) {
global $sitepress;
if (method_exists($sitepress, 'switch_lang')) {
$sitepress->switch_lang($post_data['lang']);
}
}
$post_id = $post_data['post_id'];
$_GET['wpv_paged'] = $post_data['page'];
$_GET['wpv_view_count'] = $post_data['view_number'];
if (isset($post_data['wpv_column_sort_id'])) {
$_GET['wpv_column_sort_id'] = $post_data['wpv_column_sort_id'];
}
if (isset($post_data['wpv_column_sort_dir'])) {
$_GET['wpv_column_sort_dir'] = $post_data['wpv_column_sort_dir'];
}
if (isset($post_data['get_params'])) {
foreach($post_data['get_params'] as $key => $param) {
$_GET[$key] = $param;
}
}
global $post, $authordata, $id;
$view_data = unserialize(base64_decode($post_data['view_hash']));
$post = get_post($post_id);
$authordata = new WP_User($post->post_author);
$id = $post->ID;
if ($post_data['wpv_view_widget_id'] == 0) {
// set the view count so we return the right view number after rendering.
$WP_Views->set_view_count(intval($post_data['view_number']) - 1);
echo $WP_Views->short_tag_wpv_view($view_data);
//echo wpv_do_shortcode($post->post_content);
} else {
// set the view count so we return the right view number after rendering.
$WP_Views->set_view_count(intval($post_data['view_number']) - 1);
$widget = new WPV_Widget();
$ars = array('before_widget' => '',
'before_title' => '',
'after_title' => '',
'after_widget' => '');
$widget->widget($args, array('title' => '',
'view' => $post_data['wpv_view_widget_id']));
echo $WP_Views->get_max_pages();
}
if ($cookie_lang) {
// reset language cookie.
$_COOKIE['_icl_current_language'] = $cookie_lang;
}
}
add_action('template_redirect', 'wpv_pagination_router');
function wpv_pagination_router() {
global $wp_query;
$bits =explode("/",$_SERVER['REQUEST_URI']);
for ($i = 0; $i < count($bits) - 1; $i++) {
if ($bits[$i] == 'wpv-ajax-pagination') {
// get the post data. It's hex encoded json
$post_data = $bits[$i + 1];
$post_data = pack('H*', $post_data);
$post_data = json_decode($post_data, true);
header('HTTP/1.0 200 OK');
header( 'Content-Type: text/css' );
echo '<html><body>';
wpv_ajax_get_page($post_data);
echo '</body></html>';
$wp_query->is_404 = false;
exit;
}
}
}