2020-04-17 16:50:36 +02:00
< ? php
add_action ( 'init' , 'alm_core_update' ); // Core Update
add_action ( 'admin_init' , 'alm_admin_hooks' );
add_action ( 'wp_ajax_alm_save_repeater' , 'alm_save_repeater' ); // Ajax Save Repeater
add_action ( 'wp_ajax_alm_update_repeater' , 'alm_update_repeater' ); // Ajax Update Repeater
add_action ( 'wp_ajax_alm_get_tax_terms' , 'alm_get_tax_terms' ); // Ajax Get Taxonomy Terms
add_action ( 'wp_ajax_alm_delete_cache' , 'alm_delete_cache' ); // Delete Cache
add_action ( 'wp_ajax_alm_layouts_dismiss' , 'alm_layouts_dismiss' ); // Dismiss Layouts CTA
add_action ( 'wp_ajax_alm_license_activation' , 'alm_license_activation' ); // Activate Add-on
add_action ( 'alm_get_layouts' , 'alm_get_layouts' ); // Add layout selection
add_action ( 'wp_ajax_alm_get_layout' , 'alm_get_layout' ); // Get layout
add_action ( 'wp_ajax_alm_dismiss_sharing' , 'alm_dismiss_sharing' ); // Dismiss sharing
add_action ( 'wp_ajax_alm_set_transient' , 'alm_set_transient' ); // Set transient
add_filter ( 'admin_footer_text' , 'alm_filter_admin_footer_text' ); // Admin menu text
add_action ( 'after_plugin_row' , 'alm_plugin_row' );
/**
* Setup the admin hooks
*
* @ return void
*/
function alm_admin_hooks () {
require_once ( plugin_dir_path ( __FILE__ ) . '/classes/class-nag.php' );
}
/**
* almCreatePluginUpdateNotifications
* Create custom update notifications
*
* @ since 5.2
*/
function alm_plugin_update_messages (){
$addons = alm_get_addons ();
foreach ( $addons as $addon ){
$path = $addon [ 'path' ];
$hook = " in_plugin_update_message- { $path } / { $path } .php " ;
add_action ( $hook , 'alm_prefix_plugin_update_message' , 10 , 2 );
}
}
alm_plugin_update_messages ();
/*
* alm_prefix_plugin_update_message
* Add extra message to plugin updater about expired / inactive licenses
*
* @ since 5.2
*/
function alm_prefix_plugin_update_message ( $data , $response ) {
$addons = alm_get_addons ();
$slug = $response -> slug ;
$version = $response -> new_version ;
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
foreach ( $addons as $key => $addon ){
if ( $addon [ 'path' ] === $slug ){
$index = $key ;
}
}
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
if ( isset ( $index )){
$style = 'display: block; padding: 10px 5px 2px;' ;
$addon = $addons [ $index ];
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
if ( isset ( $addon )){
$name = '<strong>' . $addon [ 'name' ] . '</strong>' ;
$status = get_option ( $addon [ 'status' ]);
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Expired
if ( $status === 'expired' ){
printf ( '<span style="' . $style . '">%s %s</span>' ,
__ ( 'Looks like your subscription has expired.' , 'ajax-load-more' ),
__ ( 'Please login to your <a href="https://connekthq.com/account/" target="_blank">Account</a> to renew the license.' , 'ajax-load-more' )
);
}
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Invalid/Inactive
if ( $status === 'invalid' || $status === 'disabled' ){
printf ( '<span style="' . $style . '">%s %s</span>' ,
__ ( 'Looks like your license is inactive and/or invalid.' , 'ajax-load-more' ),
__ ( 'Please activate the <a href="admin.php?page=ajax-load-more-licenses" target="_blank">license</a> or login to your <a href="https://connekthq.com/account/" target="_blank">Account</a> to renew the license.' , 'ajax-load-more' )
);
}
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Deactivated
if ( $status === 'deactivated' ){
printf ( '<span style="' . $style . '">%s %s</span>' ,
__ ( 'Looks like your license has been deactivated.' , 'ajax-load-more' ),
__ ( 'Please activate the <a href="admin.php?page=ajax-load-more-licenses" target="_blank">license</a> to update.' , 'ajax-load-more' )
);
}
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
}
}
}
/*
* alm_plugin_row
* Create a notification in the plugin row
*
* @ since 5.2
*/
function alm_plugin_row ( $plugin_name ) {
$addons = alm_get_addons ();
$pro_addons = alm_get_pro_addon ();
$addons = array_merge ( alm_get_addons (), alm_get_pro_addon ());
foreach ( $addons as $addon ){
2020-07-21 16:23:51 +02:00
if ( $plugin_name == $addon [ 'path' ] . '/' . $addon [ 'path' ] . '.php' ) {
$status = get_option ( $addon [ 'status' ]);
2020-04-17 16:50:36 +02:00
$style = 'margin: 5px 20px 6px 40px;' ;
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// !valid
if ( $status !== 'valid' ){
$name = ( $addon [ 'name' ] === 'Ajax Load More Pro' ) ? '<strong>' . $addon [ 'name' ] . '</strong>' : '<strong>' . 'Ajax Load More: ' . $addon [ 'name' ] . '</strong>' ;
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
$row = '</tr><tr class="plugin-update-tr"><td colspan="3" class="plugin-update"><div class="update-message" style="' . $style . '">' ;
$row .= sprintf ( __ ( '%sRegister%s your copy of %s to receive access to automatic upgrades and support. Need a license key? %sPurchase one now%s.' ), '<a href="admin.php?page=ajax-load-more-licenses">' , '</a>' , $name , '<a href="' . $addon [ 'url' ] . '" target="blank">' , '</a>' );
$row .= '</div></td>' ;
echo $row ;
2020-07-21 16:23:51 +02:00
}
2020-04-17 16:50:36 +02:00
}
}
}
/*
* alm_render_transient_notification
* Render a notification in the dashboard
*
* @ since 4.0
*/
function alm_render_transient_notification (){
if ( ! has_action ( 'alm_pro_installed' )){
$msg = '🔥 Introducing <strong><a href="https://connekthq.com/plugins/ajax-load-more/pro/" target="_blank">Ajax Load More Pro</a></strong> - get instant access to all 13 add-ons in a single installation! <strong><a href="https://connekthq.com/plugins/ajax-load-more/pro/" target="_blank" class="button button-primary">Upgrade Now</a></strong>' ;
alm_transient_notification ( $msg , 'alm_pro_upgrade' , 'YEAR_IN_SECONDS' , true );
}
}
/*
* alm_transient_notification
* Display a notification on pages with transient
*
* @ since 4.0
*/
function alm_transient_notification ( $message = '' , $transient = '' , $duration = 'YEAR_IN_SECONDS' , $dismissible = true , $type = 'info' ){
if ( ! empty ( $transient )){
$transient_value = get_transient ( $transient );
$dismissible = ( $dismissible ) ? ' is-dismissible' : '' ;
if ( ! isset ( $transient_value ) || empty ( $transient_value ) && ! empty ( $message )){
?>
< div class = " alm-admin-notice notice-<?php echo $type ; ?> notice<?php echo $dismissible ; ?> alm-transient " data - transient = " <?php echo $transient ; ?> " data - duration = " <?php echo $duration ; ?> " >< p >< ? php echo $message ; ?> </p></div>
< ? php
}
}
}
/*
* alm_set_transient
* Set transient via Ajax .
*
* @ since 4.0
*/
function alm_set_transient (){
if ( current_user_can ( 'edit_theme_options' )){
$nonce = $_POST [ " nonce " ];
$transient = $_POST [ " transient_name " ];
$duration = $_POST [ " duration " ];
$duration = ( ! isset ( $duration )) ? 'YEAR_IN_SECONDS' : $duration ;
// Check our nonce, if they don't match then bounce!
if ( ! wp_verify_nonce ( $nonce , 'alm_repeater_nonce' ))
die ( __ ( 'Error - unable to verify nonce, please try again.' , 'ajax-load-more' ));
if ( $transient ){
set_transient ( $transient , 'true' , constant ( $duration ) );
echo __ ( 'Transient set successfully' , 'ajax-load-more' );
}
wp_die ();
}
}
/*
* alm_repeaters_export
* This function will export a repeater template and force download
*
* @ since 3.6
*/
function alm_repeaters_export (){
if ( isset ( $_POST [ " alm_repeaters_export " ]) && ( ! wp_doing_ajax ()) ) {
if ( current_user_can ( 'edit_theme_options' )) { // Confirm credentials
$file = $_POST [ " alm_repeaters_export " ];
if ( file_exists ( $file )){
header ( " Content-Description: File Transfer " );
header ( " Content-Type: application/octet-stream " );
header ( 'Content-Disposition: attachment; filename="' . basename ( $file ) . '"' );
readfile ( $file );
exit ();
}
}
}
}
add_action ( 'admin_init' , 'alm_repeaters_export' );
/*
* alm_license_activation
* Activate Add - on licenses
*
* @ since 2.8 . 3
*/
function alm_license_activation (){
if ( current_user_can ( 'edit_theme_options' )){
$nonce = $_GET [ " nonce " ];
$type = $_GET [ " type " ]; // activate / deactivate
$item_id = $_GET [ " item " ];
$license = $_GET [ " license " ];
$url = $_GET [ " url " ];
$upgrade = $_GET [ " upgrade " ];
$option_status = $_GET [ " status " ];
$option_key = $_GET [ " key " ];
// Check our nonce, if they don't match then bounce!
if ( ! wp_verify_nonce ( $nonce , 'alm_repeater_nonce' )){
die ( 'Error - unable to verify nonce, please try again.' );
}
// API Action
if ( $type === 'activate' || $type === 'check' ){
$action = 'activate_license' ;
} else {
$action = 'deactivate_license' ;
}
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Create the params for the request
$api_params = array (
'edd_action' => $action ,
'license' => $license ,
'item_id' => $item_id , // the ID of our product in EDD
'url' => home_url ()
);
// Call API
$response = wp_remote_post ( ALM_STORE_URL , array ( 'body' => $api_params , 'timeout' => 15 , 'sslverify' => false ) );
// make sure the response came back okay
if ( is_wp_error ( $response ) ){
return false ;
2020-07-21 16:23:51 +02:00
}
2020-04-17 16:50:36 +02:00
$license_data = $response [ 'body' ];
$license_data = json_decode ( $license_data ); // decode the license data
$return [ " success " ] = $license_data -> success ;
$msg = '' ;
if ( $type === 'activate' ){
$return [ " license_limit " ] = $license_data -> license_limit ;
$return [ " expires " ] = $license_data -> expires ;
$return [ " site_count " ] = $license_data -> site_count ;
$return [ " activations_left " ] = $license_data -> activations_left ;
$return [ " item_name " ] = $license_data -> item_name ;
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
if ( $license_data -> activations_left === 0 && $license_data -> success === false ){
$msg = '<strong>You\'re out of available licenses <em>(' . $license_data -> license_limit . ' / ' . $license_data -> site_count . ')</em></strong>. Please visit the <a href="' . $upgrade . '" target="_blank">' . $license_data -> item_name . '</a> website to add additional licenses.' ;
}
}
$return [ " msg " ] = $msg ;
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// If error, make error the status of the license
$license_status = ( isset ( $license_data -> error )) ? $license_data -> error : $license_data -> license ;
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
$return [ " license " ] = $license_status ;
// Update the options table
update_option ( $option_status , $license_status );
update_option ( $option_key , $license );
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Set transient value to store license status
set_transient ( " alm_ { $item_id } _ { $license } " , $license_status , 96 * HOUR_IN_SECONDS ); // 4 days
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Send the response
wp_send_json ( $return );
} else {
echo __ ( 'You don\'t belong here.' , 'ajax-load-more' );
}
}
/*
* alm_admin_notice_errors
* Invalid license notifications
*
* @ since 3.3 . 0
*/
function alm_admin_notice_errors () {
$screen = get_current_screen ();
$alm_is_admin_screen = alm_is_admin_screen ();
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Exit if screen is not dashboard, plugins, settings or ALM admin.
if ( ! $alm_is_admin_screen && $screen -> id !== 'dashboard' && $screen -> id !== 'plugins' && $screen -> id !== 'options-general' && $screen -> id !== 'options' ){
return ;
}
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
$class = 'notice error alm-err-notice' ;
$message = '' ;
$count = 0 ;
if ( has_action ( 'alm_pro_installed' )){ // Pro
$addons = alm_get_pro_addon ();
$message = __ ( 'You have an invalid or expired <a href="admin.php?page=ajax-load-more"><b>Ajax Load More Pro</b></a> license key - please visit the <a href="admin.php?page=ajax-load-more-licenses">License</a> section to input your key or <a href="https://connekthq.com/plugins/ajax-load-more/pro/" target="_blank">purchase</a> one now.' , 'ajax-load-more' );
} else { // Other Addons
$addons = alm_get_addons ();
$message = __ ( 'You have invalid or expired <a href="admin.php?page=ajax-load-more"><b>Ajax Load More</b></a> license keys - please visit the <a href="admin.php?page=ajax-load-more-licenses">Licenses</a> section and input your keys.' , 'ajax-load-more' );
}
// Loop each addon
foreach ( $addons as $addon ){
2020-07-21 16:23:51 +02:00
if ( has_action ( $addon [ 'action' ])){
2020-04-17 16:50:36 +02:00
$key = $addon [ 'key' ]; // Option key
$status = get_option ( $addon [ 'status' ]); // license status
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Check license
$license_status = alm_license_check ( $addon [ 'item_id' ], get_option ( $key ), $status );
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
if ( ! isset ( $status ) || empty ( $status ) || $license_status !== 'valid' ) {
$count ++ ;
}
}
}
// Print result
if ( $count > 0 ) {
printf ( '<div class="%1$s"><p>%2$s</p></div>' , $class , $message );
}
}
add_action ( 'admin_notices' , 'alm_admin_notice_errors' );
/*
* alm_license_check
* Check the status of a license
*
* @ param { String } $item_id The ID of the product
* @ param { String } $license The actual license key
* @ param { String } $option_status The status of the license
* @ updated 5.1 . 7
* @ since 2.8 . 3
*/
function alm_license_check ( $item_id = null , $license = null , $option_status = null ){
if ( ! $item_id || ! $license || ! $option_status ){
return false ;
}
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Get plugin transient for license status
if ( get_transient ( " alm_ { $item_id } _ { $license } " )){
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Transient exists
return get_transient ( " alm_ { $item_id } _ { $license } " );
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
} else {
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
$api_params = array (
'edd_action' => 'check_license' ,
'license' => $license ,
'item_id' => $item_id ,
'url' => home_url ()
);
$response = wp_remote_post ( ALM_STORE_URL , array ( 'body' => $api_params , 'timeout' => 15 , 'sslverify' => false ) );
if ( is_wp_error ( $response ) ) {
return false ;
}
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Get Data
$license_data = json_decode ( wp_remote_retrieve_body ( $response ) );
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Update the options table
update_option ( $option_status , $license_data -> license );
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Set transient value to store license status
set_transient ( " alm_ { $item_id } _ { $license } " , $license_data -> license , 168 * HOUR_IN_SECONDS ); // 7 days
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Return the status
return $license_data -> license ;
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
}
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
}
/*
* alm_get_layout
* Get layout and return value to repeater template
*
* @ since 2.8 . 3
* @ updated 2.14 . 0
*/
function alm_get_layout (){
if ( current_user_can ( 'edit_theme_options' )){
$nonce = sanitize_text_field ( $_GET [ " nonce " ]);
$type = sanitize_text_field ( $_GET [ " type " ]);
$custom = sanitize_text_field ( $_GET [ " custom " ]);
// Check our nonce, if they don't match then bounce!
if ( ! wp_verify_nonce ( $nonce , 'alm_repeater_nonce' ))
die ( 'Error - unable to verify nonce, please try again.' );
if ( $type === 'default' ){ // Default Layout
$content = file_get_contents ( ALM_PATH . 'admin/includes/layout/' . $type . '.php' );
} else { // Custom Layout
if ( $custom == 'true' ){
$dir = 'alm_layouts' ;
if ( is_child_theme ()){
$path = get_stylesheet_directory () . '/' . $dir . '/' . $type ;
// if child theme does not have the layout, check the parent theme
if ( ! file_exists ( $path )){
$path = get_template_directory () . '/' . $dir . '/' . $type ;
}
}
else {
$path = get_template_directory () . '/' . $dir . '/' . $type ;
}
$content = file_get_contents ( $path );
}
// Layouts Add-on
else {
$content = file_get_contents ( ALM_LAYOUTS_PATH . 'layouts/' . $type . '.php' );
}
}
$return [ " value " ] = $content ;
echo json_encode ( $return );
} else {
echo __ ( 'You don\'t belong here.' , 'ajax-load-more' );
}
die ();
}
/*
* alm_get_layouts
* Get the list of layout templates
*
* @ since 2.8 . 7
*/
function alm_get_layouts (){ // do_action
include ( ALM_PATH . 'admin/includes/components/layout-list.php' );
}
/*
* alm_admin_vars
* Create admin variables and ajax nonce
*
* @ since 2.0 . 0
*/
function alm_admin_vars () { ?>
< script type = 'text/javascript' >
/* <![CDATA[ */
var alm_admin_localize = < ? php echo json_encode ( array (
'ajax_admin_url' => admin_url ( 'admin-ajax.php' ),
'restapi' => array (
'url' => function_exists ( 'get_rest_url' ) ? get_rest_url () : '' ,
'namespace' => ALM_REST_NAMESPACE
),
'ajax_load_more' => __ ( 'Ajax Load More' , 'ajax-load-more' ),
'active' => __ ( 'Active' , 'ajax-load-more' ),
'inactive' => __ ( 'Inactive' , 'ajax-load-more' ),
'applying_layout' => __ ( 'Applying layout' , 'ajax-load-more' ),
'template_updated' => __ ( 'Template Updated' , 'ajax-load-more' ),
'alm_admin_nonce' => wp_create_nonce ( 'alm_repeater_nonce' ),
'select_authors' => __ ( 'Select Author(s)' , 'ajax-load-more' ),
'select_cats' => __ ( 'Select Categories' , 'ajax-load-more' ),
'select_tags' => __ ( 'Select Tags' , 'ajax-load-more' ),
'select' => __ ( 'Select' , 'ajax-load-more' ),
'jump_to_option' => __ ( 'Jump to Option' , 'ajax-load-more' ),
'jump_to_template' => __ ( 'Jump to Template' , 'ajax-load-more' ),
'install_now' => __ ( 'Are you sure you want to install this Ajax Load More extension?' , 'ajax-load-more' ),
'install_btn' => __ ( 'Install Now' , 'ajax-load-more' ),
'activate_btn' => __ ( 'Activate' , 'ajax-load-more' ),
'settings_saving' => '<i class="fa fa-spinner fa-spin" aria-hidden="true"></i> ' . __ ( 'Saving Settings' , 'ajax-load-more' ),
'settings_saved' => '<i class="fa fa-check" aria-hidden="true"></i> ' . __ ( 'Settings Saved Successfully' , 'ajax-load-more' ),
'settings_error' => '<i class="fa fa-exclamation-circle" aria-hidden="true"></i> ' . __ ( 'Error Saving Settings' , 'ajax-load-more' ),
'shortcode_max' => __ ( 'There is a maximum of 3 tax_query objects while using the shortcode builder' , 'ajax-load-more' ),
)); ?>
/* ]]> */
</ script >
< ? php }
/*
* alm_set_admin_nonce
* Create admin nonce on ALM pages only
*
* @ since 2.8 . 2
*/
function alm_set_admin_nonce (){
add_action ( 'admin_head' , 'alm_admin_vars' ); // Localized Vars
}
/**
* alm_core_update
* Update default repeater on plugin update .
* If plugin versions do not match or the plugin has been updated and we need to update our repeaters .
*
* @ since 2.0 . 5
*/
function alm_core_update () {
2020-07-21 16:23:51 +02:00
2020-04-17 16:50:36 +02:00
// Exit if Repeater Templates are disbaled
if ( defined ( 'ALM_DISABLE_REPEATER_TEMPLATES' ) && ALM_DISABLE_REPEATER_TEMPLATES ){
return false ;
}
// Add 'alm_version' to WP options table if it does not exist
if ( ! get_option ( 'alm_version' )){
add_option ( 'alm_version' , ALM_VERSION );
}
$alm_installed_ver = get_option ( " alm_version " ); // Get value from WP Option tbl
if ( $alm_installed_ver != ALM_VERSION ) {
delete_transient ( 'alm_dismiss_sharing' ); // Delete ALM transients
alm_run_update (); // Update repeaters
}
}
/**
* alm_run_update
* Run the update on all 'blogs'
*
* @ since 2.7 . 2
*/
function alm_run_update (){
global $wpdb ;
if ( is_multisite ()) {
$blog_ids = $wpdb -> get_col ( " SELECT blog_id FROM $wpdb->blogs " );
// Loop all blogs and run update routine
foreach ( $blog_ids as $blog_id ) {
switch_to_blog ( $blog_id );
alm_update_template_files ();
restore_current_blog ();
}
} else {
alm_update_template_files ();
}
update_option ( " alm_version " , ALM_VERSION ); // Update the WP Option tbl with the new version num
}
/**
* alm_update_template_files
* Update routine for template files
*
* @ since 2.7 . 2
*/
function alm_update_template_files (){
global $wpdb ;
$table_name = $wpdb -> prefix . " alm " ;
// Get all rows where name is 'default'
$rows = $wpdb -> get_results ( " SELECT * FROM $table_name WHERE name = 'default' " );
if ( $rows ){
foreach ( $rows as $row ) { // Loop $rows
$data = $wpdb -> get_var ( " SELECT repeaterDefault FROM $table_name WHERE name = 'default' " );
// Create Base Repeater Dir (alm_templates)
$base_dir = AjaxLoadMore :: alm_get_repeater_path ();
AjaxLoadMore :: alm_mkdir ( $base_dir );
$file = $base_dir . '/default.php' ;
// Wrap is file_exists to avoid updating without cause
if ( ! file_exists ( $file ) ){
try {
$o = fopen ( $file , 'w+' ); //Open file
if ( ! $o ) {
throw new Exception ( __ ( '[Ajax Load More] Error opening default repeater template - Please check your file path and ensure your server is configured to allow Ajax Load More to read and write files within the /ajax-load-more/core/repeater directory' , 'ajax-load-more' ));
}
$w = fwrite ( $o , $data ); //Save the file
if ( ! $w ) {
throw new Exception ( __ ( '[Ajax Load More] Error updating default repeater template - Please check your file path and ensure your server is configured to allow Ajax Load More to read and write files within the /ajax-load-more/core/repeater directory.' , 'ajax-load-more' ));
}
fclose ( $o ); // Close file
} catch ( Exception $e ) { // Display error message in console.
if ( ! isset ( $options [ '_alm_error_notices' ]) || $options [ '_alm_error_notices' ] == '1' ){
echo '<script>console.log("' . $e -> getMessage () . '");</script>' ;
}
}
}
}
}
}
/**
* alm_admin_menu
* Create Admin Menu
*
* @ since 2.0 . 0
*/
add_action ( 'admin_menu' , 'alm_admin_menu' );
function alm_admin_menu () {
$icon = 'dashicons-plus-alt' ;
$icon = ALM_ADMIN_URL . " /img/alm-logo-16x16.svg " ;
$alm_page = add_menu_page (
'Ajax Load More' ,
'Ajax Load More' ,
'edit_theme_options' ,
'ajax-load-more' ,
'alm_settings_page' ,
$icon
);
$alm_settings_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Settings' , 'ajax-load-more' ),
__ ( 'Settings' , 'ajax-load-more' ),
'edit_theme_options' ,
'ajax-load-more' ,
'alm_settings_page'
);
$alm_template_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Repeater Templates' , 'ajax-load-more' ),
__ ( 'Repeater Templates' , 'ajax-load-more' ),
'edit_theme_options' ,
'ajax-load-more-repeaters' ,
'alm_repeater_page'
);
$alm_shortcode_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Shortcode Builder' , 'ajax-load-more' ),
__ ( 'Shortcode Builder' , 'ajax-load-more' ),
'edit_theme_options' ,
'ajax-load-more-shortcode-builder' ,
'alm_shortcode_builder_page'
);
if ( ! has_action ( 'alm_pro_installed' )){ // Not Pro
$alm_addons_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Add-ons' , 'ajax-load-more' ),
__ ( 'Add-ons' , 'ajax-load-more' ),
'edit_theme_options' ,
'ajax-load-more-add-ons' ,
'alm_add_ons_page'
);
}
$alm_extensions_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Extensions' , 'ajax-load-more' ),
__ ( 'Extensions' , 'ajax-load-more' ),
'edit_theme_options' ,
'ajax-load-more-extensions' ,
'alm_extensions_page'
);
$alm_help_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Help' , 'ajax-load-more' ),
__ ( 'Help' , 'ajax-load-more' ),
'edit_theme_options' ,
'ajax-load-more-help' ,
'alm_help_page'
);
$license_title = ( has_action ( 'alm_pro_installed' )) ? __ ( 'License' , 'ajax-load-more' ) : __ ( 'Licenses' , 'ajax-load-more' );
$alm_licenses_page = add_submenu_page (
'ajax-load-more' ,
$license_title ,
$license_title ,
'edit_theme_options' ,
'ajax-load-more-licenses' ,
'alm_licenses_page'
);
$before_link = '<span style="display:block; border-top: 1px solid #555; padding-top: 8px;">' ;
$after_link = '</span>' ;
$style_link_icon = 'style="opacity: 0.6; font-size: 18px; height: 18px; width: 18px; position: relative; left: -2px;"' ;
// Pro
if ( has_action ( 'alm_pro_installed' )){
$alm_pro_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Pro' , 'ajax-load-more' ),
$before_link . '<span class="dashicons dashicons-plus-alt" ' . $style_link_icon . '></span> ' . __ ( 'Pro' , 'ajax-load-more' ) . $after_link ,
'edit_theme_options' ,
'ajax-load-more-pro' ,
'alm_pro_page'
);
} else {
$alm_go_pro_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Pro' , 'ajax-load-more' ),
$before_link . '<span class="dashicons dashicons-plus-alt" ' . $style_link_icon . '></span> ' . __ ( 'Go Pro' , 'ajax-load-more' ) . $after_link ,
'edit_theme_options' ,
'ajax-load-more-go-pro' ,
'alm_go_pro_page'
);
}
// Cache
if ( has_action ( 'alm_cache_installed' )){
$alm_cache_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Cache' , 'ajax-load-more' ),
$before_link . '<span class="dashicons dashicons-admin-generic" ' . $style_link_icon . '></span> ' . __ ( 'Cache' , 'ajax-load-more' ) . $after_link ,
'edit_theme_options' ,
'ajax-load-more-cache' ,
'alm_cache_page'
);
add_action ( 'load-' . $alm_cache_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_cache_page , 'alm_load_cache_admin_js' );
add_action ( 'load-' . $alm_cache_page , 'alm_set_admin_nonce' );
}
// Filters
if ( has_action ( 'alm_filters_installed' )){
if ( has_action ( 'alm_cache_installed' )){
$before_link = '<span style="display:block;">' ;
}
$alm_filters_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'Filters' , 'ajax-load-more' ),
$before_link . '<span class="dashicons dashicons-filter" ' . $style_link_icon . '></span> ' . __ ( 'Filters' , 'ajax-load-more' ) . $after_link ,
'edit_theme_options' ,
'ajax-load-more-filters' ,
'alm_filters_page'
);
add_action ( 'load-' . $alm_filters_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_filters_page , 'alm_load_filters_admin_scripts' );
add_action ( 'load-' . $alm_filters_page , 'alm_set_admin_nonce' );
}
2020-05-04 16:30:49 +02:00
// WooCommerce
if ( has_action ( 'alm_woocommerce_installed' ) && in_array ( 'woocommerce/woocommerce.php' , apply_filters ( 'active_plugins' , get_option ( 'active_plugins' )))){
if ( has_action ( 'alm_cache_installed' ) || has_action ( 'alm_filters_installed' )){
$before_link = '<span style="display:block;">' ;
}
$wooIcon = '<style>.dashicons.alm-woo:before{font-family: WooCommerce!important; content: "\e03d"; font-size: 16px; margin-top: 2px;}</style>' ;
$alm_woocommerce_page = add_submenu_page (
'ajax-load-more' ,
__ ( 'WooCommerce' , 'ajax-load-more' ),
$before_link . $wooIcon . '<span class="dashicons dashicons-before dashicons-admin-generic alm-woo" ' . $style_link_icon . '></span> ' . __ ( 'WooCommerce' , 'ajax-load-more' ) . $after_link ,
'edit_theme_options' ,
'ajax-load-more-woocommerce' ,
'alm_woocommerce_page'
);
add_action ( 'load-' . $alm_woocommerce_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_woocommerce_page , 'alm_set_admin_nonce' );
}
2020-04-17 16:50:36 +02:00
//Add our admin scripts
add_action ( 'load-' . $alm_settings_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_settings_page , 'alm_set_admin_nonce' );
add_action ( 'load-' . $alm_template_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_template_page , 'alm_set_admin_nonce' );
add_action ( 'load-' . $alm_shortcode_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_shortcode_page , 'alm_set_admin_nonce' );
add_action ( 'load-' . $alm_help_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_help_page , 'alm_set_admin_nonce' );
// Pro
if ( has_action ( 'alm_pro_installed' )){
add_action ( 'load-' . $alm_pro_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_pro_page , 'alm_load_pro_admin_js' );
add_action ( 'load-' . $alm_pro_page , 'alm_set_admin_nonce' );
} else {
add_action ( 'load-' . $alm_addons_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_addons_page , 'alm_set_admin_nonce' );
add_action ( 'load-' . $alm_go_pro_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_go_pro_page , 'alm_set_admin_nonce' );
}
add_action ( 'load-' . $alm_extensions_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_extensions_page , 'alm_set_admin_nonce' );
add_action ( 'load-' . $alm_licenses_page , 'alm_load_admin_js' );
add_action ( 'load-' . $alm_licenses_page , 'alm_set_admin_nonce' );
}
/*
* alm_settings_page
* Settings page
*
* @ since 2.0 . 0
*/
function alm_settings_page (){
include_once ( ALM_PATH . 'admin/views/settings.php' );
}
/*
* alm_repeater_page
* Custom Repeaters
*
* @ since 2.0 . 0
*/
function alm_repeater_page (){
include_once ( ALM_PATH . 'admin/views/repeater-templates.php' );
}
/*
* alm_shortcode_builder_page
* Shortcode Builder
*
* @ since 2.0 . 0
*/
function alm_shortcode_builder_page (){
include_once ( ALM_PATH . 'admin/views/shortcode-builder.php' );
}
/*
* alm_add_ons_page
* Ajax Load More Add - ons
*
* @ since 2.0 . 0
*/
function alm_add_ons_page (){
include_once ( ALM_PATH . 'admin/views/add-ons.php' );
}
/*
* alm_extensions_ons_page
* Ajax Load More Add - ons
*
* @ since 3.0 . 0
*/
function alm_extensions_page (){
include_once ( ALM_PATH . 'admin/views/extensions.php' );
}
/*
* alm_extensions_ons_page
* Ajax Load More Add - ons
*
* @ since 4.0 . 0
*/
function alm_go_pro_page (){
include_once ( ALM_PATH . 'admin/views/go-pro.php' );
}
/*
* alm_example_page
* Examples Page
*
* @ since 2.0 . 0
*/
function alm_examples_page (){
include_once ( ALM_PATH . 'admin/views/examples.php' );
}
/*
* alm_help_page
* Help Page ( Implementation Inforgraphic )
*
* @ since 2.8 . 7
*/
function alm_help_page (){
include_once ( ALM_PATH . 'admin/views/help.php' );
}
/*
* alm_licenses_page
* Ajax Load More Licenses
*
* @ since 2.7 . 0
*/
function alm_licenses_page (){
include_once ( ALM_PATH . 'admin/views/licenses.php' );
}
/*
* alm_cache_page
* Cache Add - on page
*
* @ since 3.6 . 0
*/
function alm_pro_page (){
include_once ( ALM_PRO_ADMIN_PATH . 'admin/views/pro.php' );
}
/*
* alm_cache_page
* Cache Add - on page
*
* @ since 2.6 . 0
*/
function alm_cache_page (){
include_once ( ALM_CACHE_ADMIN_PATH . 'admin/views/cache.php' );
}
/*
* alm_filters_page
* Filters Add - on page
*
* @ since 3.4 . 0
*/
function alm_filters_page (){
include_once ( ALM_FILTERS_PATH . 'admin/functions.php' );
include_once ( ALM_FILTERS_PATH . 'admin/views/filters.php' );
}
2020-05-04 16:30:49 +02:00
/*
* alm_woocommerce_page
* WooCommerce Add - on page
*
* @ since 5.3 . 0
*/
function alm_woocommerce_page (){
include_once ( ALM_WOO_PATH . 'admin/views/woocommerce.php' );
}
2020-04-17 16:50:36 +02:00
/**
* alm_load_admin_js
* Load Admin JS
*
* @ since 2.0 . 15
*/
function alm_load_admin_js (){
add_action ( 'admin_enqueue_scripts' , 'alm_enqueue_admin_scripts' );
}
// Pro Scripts
function alm_load_pro_admin_js (){
if ( class_exists ( 'ALMPro' )){
ALMPro :: alm_enqueue_pro_admin_scripts ();
}
}
// Cache Scripts
function alm_load_cache_admin_js (){
if ( class_exists ( 'ALMCache' )){
ALMCache :: alm_enqueue_cache_admin_scripts ();
}
}
// Filters Scripts
function alm_load_filters_admin_scripts (){
if ( class_exists ( 'ALMFilters' )){
ALMFilters :: alm_enqueue_filters_admin_scripts ();
}
}
/**
* alm_enqueue_admin_scripts
* Enqueue Admin JS
*
* @ since 2.0 . 15
*/
function alm_enqueue_admin_scripts (){
// Admin CSS
wp_enqueue_style ( 'alm-admin' , ALM_ADMIN_URL . 'dist/css/admin.css' , '' , ALM_VERSION );
wp_enqueue_style ( 'alm-core' , ALM_URL . '/core/dist/css/ajax-load-more.css' , '' , ALM_VERSION );
// disable ACF select2 on ALM pages
wp_dequeue_style ( 'acf-input' );
// CodeMirror Syntax Highlighting if on Repater Template page
$screen = get_current_screen ();
if ( in_array ( $screen -> id , array ( 'ajax-load-more_page_ajax-load-more-repeaters' ) ) ){
//CodeMirror CSS
wp_enqueue_style ( 'alm-codemirror-css' , ALM_ADMIN_URL . 'codemirror/lib/codemirror.css' );
//CodeMirror JS
wp_enqueue_script ( 'alm-codemirror' , ALM_ADMIN_URL . 'codemirror/lib/codemirror.js' );
wp_enqueue_script ( 'alm-codemirror-matchbrackets' , ALM_ADMIN_URL . 'codemirror/addon/edit/matchbrackets.js' );
wp_enqueue_script ( 'alm-codemirror-htmlmixed' , ALM_ADMIN_URL . 'codemirror/mode/htmlmixed/htmlmixed.js' );
wp_enqueue_script ( 'alm-codemirror-xml' , ALM_ADMIN_URL . 'codemirror/mode/xml/xml.js' );
wp_enqueue_script ( 'alm-codemirror-javascript' , ALM_ADMIN_URL . 'codemirror/mode/javascript/javascript.js' );
wp_enqueue_script ( 'alm-codemirror-mode-css' , ALM_ADMIN_URL . 'codemirror/mode/css/css.js' );
wp_enqueue_script ( 'alm-codemirror-clike' , ALM_ADMIN_URL . 'codemirror/mode/clike/clike.js' );
wp_enqueue_script ( 'alm-codemirror-php' , ALM_ADMIN_URL . 'codemirror/mode/php/php.js' );
}
// Admin JS
wp_enqueue_script ( 'jquery-form' );
wp_enqueue_script ( 'alm-admin' , ALM_ADMIN_URL . 'dist/js/admin.js' , array ( 'jquery' ), ALM_VERSION );
wp_enqueue_script ( 'alm-shortcode-builder' , ALM_ADMIN_URL . 'shortcode-builder/js/shortcode-builder.js' , array ( 'jquery' ), ALM_VERSION );
}
/*
* alm_save_repeater
* Repeater Save function
*
* @ return response
* @ since 2.0 . 0
* @ updated 3.5
*/
function alm_save_repeater (){
if ( current_user_can ( 'edit_theme_options' )){
global $wpdb ;
$table_name = $wpdb -> prefix . " alm " ;
$blog_id = $wpdb -> blogid ;
$options = get_option ( 'alm_settings' ); //Get plugin options
$nonce = $_POST [ " nonce " ];
if ( ! wp_verify_nonce ( $nonce , 'alm_repeater_nonce' )){ // Check our nonce
die ( 'Error - unable to verify nonce, please try again.' );
}
// Get _POST Vars
$c = Trim ( stripslashes ( $_POST [ " value " ])); // Repeater Value
$n = Trim ( stripslashes ( $_POST [ " repeater " ])); // Repeater name
$t = Trim ( stripslashes ( $_POST [ " type " ])); // Repeater name
$a = Trim ( stripslashes ( $_POST [ " alias " ])); // Repeater alias
// Default
if ( $t === 'default' ){
// Create Base Repeater Dir (alm-templates)
$base_dir = AjaxLoadMore :: alm_get_repeater_path ();
AjaxLoadMore :: alm_mkdir ( $base_dir );
$f = $base_dir . '/default.php' ;
}
// Custom Repeaters v2
elseif ( $t === 'unlimited' ){
// Custom Repeaters 2.5+
if ( ALM_UNLIMITED_VERSION >= '2.5' ){
// Get path to repeater dir (alm_templates)
$base_dir = AjaxLoadMore :: alm_get_repeater_path ();
AjaxLoadMore :: alm_mkdir ( $base_dir );
$f = $base_dir . '/' . $n . '.php' ;
} else {
$f = ( $blog_id > 1 ) ? ALM_UNLIMITED_PATH . 'repeaters/' . $blog_id . '/' . $n . '.php' : ALM_UNLIMITED_PATH . 'repeaters/' . $n . '.php' ;
}
}
// Custom Repeaters v1
else {
$f = ALM_REPEATER_PATH . 'repeaters/' . $n . '.php' ;
}
// Write Repeater Template
try {
$o = fopen ( $f , 'w+' ); //Open file
if ( ! $o ) {
throw new Exception ( __ ( '[Ajax Load More] Unable to open repeater template - ' . $f . ' - Please check your file path and ensure your server is configured to allow Ajax Load More to read and write files.' , 'ajax-load-more' ));
}
$w = fwrite ( $o , $c ); //Save the file
if ( ! $w ) {
throw new Exception ( __ ( '[Ajax Load More] Error saving repeater template - ' . $f . ' - Please check your file path and ensure your server is configured to allow Ajax Load More to read and write files.' , 'ajax-load-more' ));
}
fclose ( $o ); //now close it
} catch ( Exception $e ) {
// Display error message in console.
if ( ! isset ( $options [ '_alm_error_notices' ]) || $options [ '_alm_error_notices' ] == '1' ){
echo '<script>console.log("' . $e -> getMessage () . '");</script>' ;
}
}
// Save to database
if ( $t === 'default' ) {
$data_update = array ( 'repeaterDefault' => " $c " , 'pluginVersion' => ALM_VERSION );
$data_where = array ( 'name' => " default " );
}
elseif ( $t === 'unlimited' ){ // Custom Repeaters v2
$table_name = $wpdb -> prefix . " alm_unlimited " ;
$data_update = array ( 'repeaterDefault' => " $c " , 'alias' => " $a " , 'pluginVersion' => ALM_UNLIMITED_VERSION );
$data_where = array ( 'name' => $n );
}
else { // Custom Repeaters
$data_update = array ( 'repeaterDefault' => " $c " , 'alias' => " $a " , 'pluginVersion' => ALM_REPEATER_VERSION );
$data_where = array ( 'name' => $n );
}
$wpdb -> update ( $table_name , $data_update , $data_where );
//Our results
if ( $w ){
echo '<span class="saved">' . __ ( 'Template Saved Successfully' , 'ajax-load-more' ) . '</span>' ;
} else {
echo '<span class="saved-error"><b>' . __ ( 'Error Writing File' , 'ajax-load-more' ) . '</b></span><br/>' . __ ( 'Something went wrong and the data could not be saved.' , 'ajax-load-more' );
}
wp_die ();
} else {
echo __ ( 'You don\'t belong here.' , 'ajax-load-more' );
}
}
/*
* alm_update_repeater
* Update repeater template from database
* User case : User deletes plugin , then installs again and the version has not change . Click 'Update from DB' option to load template .
*
* @ return Database value
* @ since 2.5 . 0
*/
function alm_update_repeater (){
if ( current_user_can ( 'edit_theme_options' )){
$nonce = $_POST [ " nonce " ];
// Check our nonce
if ( ! wp_verify_nonce ( $nonce , 'alm_repeater_nonce' )){ // Check our nonce
die ( 'Error - unable to verify nonce, please try again.' );
}
// Get _POST Vars
$n = Trim ( stripslashes ( $_POST [ " repeater " ])); // Repeater name
$t = Trim ( stripslashes ( $_POST [ " type " ])); // Repeater type (default | unlimited)
// Get value from database
global $wpdb ;
$table_name = $wpdb -> prefix . " alm " ;
if ( $t === 'default' ) $n = 'default' ;
if ( $t === 'unlimited' ) $table_name = $wpdb -> prefix . " alm_unlimited " ;
2020-07-21 16:23:51 +02:00
//$the_repeater = $wpdb->get_var("SELECT repeaterDefault FROM " . $table_name . " WHERE name = '$n'");
$the_repeater = $wpdb -> get_var ( " SELECT repeaterDefault FROM " . $table_name . " WHERE name = ' " . esc_sql ( $n ) . " ' " );
2020-04-17 16:50:36 +02:00
echo $the_repeater ; // Return repeater value
die ();
} else {
echo __ ( 'You don\'t belong here.' , 'ajax-load-more' );
}
}
/*
* alm_get_tax_terms
* Get taxonomy terms for shortcode builder
*
* @ return Taxonomy Terms
* @ since 2.1 . 0
*/
function alm_get_tax_terms (){
if ( current_user_can ( 'edit_theme_options' )){
$nonce = $_GET [ " nonce " ];
// Check our nonce, if they don't match then bounce!
if ( ! wp_verify_nonce ( $nonce , 'alm_repeater_nonce' ))
die ( 'Get Bounced!' );
$taxonomy = ( isset ( $_GET [ 'taxonomy' ])) ? $_GET [ 'taxonomy' ] : '' ;
$index = ( isset ( $_GET [ 'index' ])) ? $_GET [ 'index' ] : '1' ;
$tax_args = array (
'orderby' => 'name' ,
'order' => 'ASC' ,
'hide_empty' => false
);
$terms = get_terms ( $taxonomy , $tax_args );
$returnVal = '' ;
if ( ! empty ( $terms ) && ! is_wp_error ( $terms ) ){
$returnVal .= '<ul>' ;
foreach ( $terms as $term ) {
$returnVal .= '<li><input type="checkbox" class="alm_element" name="tax-term-' . $term -> slug . '" id="tax-term-' . $term -> slug . '-' . $index . '" data-type="' . $term -> slug . '"><label for="tax-term-' . $term -> slug . '-' . $index . '">' . $term -> name . '</label></li>' ;
}
$returnVal .= '</ul>' ;
echo $returnVal ;
die ();
} else {
echo " <p class='warning'>No terms exist within this taxonomy</p> " ;
die ();
}
} else {
echo __ ( 'You don\'t belong here.' , 'ajax-load-more' );
}
}
/*
* alm_layouts_dismiss
* Dismiss Add Layouts CTA in repeater templates .
*
* @ since 2.8 . 2.1
*/
function alm_layouts_dismiss (){
if ( current_user_can ( 'edit_theme_options' )){
$nonce = $_POST [ " nonce " ];
// Check our nonce, if they don't match then bounce!
if ( ! wp_verify_nonce ( $nonce , 'alm_repeater_nonce' ))
die ( 'Error - unable to verify nonce, please try again.' );
update_option ( 'alm_layouts_dismiss' , 'true' );
echo 'Success' ;
die ();
}
}
/*
* alm_dismiss_sharing
* Dismiss sharing widget on plugin settings page .
*
* @ since 2.8 . 2.1
*/
function alm_dismiss_sharing (){
if ( current_user_can ( 'edit_theme_options' )){
$nonce = $_POST [ " nonce " ];
// Check our nonce, if they don't match then bounce!
if ( ! wp_verify_nonce ( $nonce , 'alm_repeater_nonce' ))
die ( __ ( 'Error - unable to verify nonce, please try again.' , 'ajax-load-more' ));
set_transient ( 'alm_dismiss_sharing' , 'true' , YEAR_IN_SECONDS );
echo 'ALM sharing dismissed successfully.' ;
wp_die ();
}
}
/*
* alm_filter_admin_footer_text
* Filter the WP Admin footer text only on ALM pages
*
* @ since 2.12 . 0
*/
function alm_filter_admin_footer_text ( $text ) {
$screen = alm_is_admin_screen ();
if ( ! $screen ){
return ;
}
echo '<strong>Ajax Load More</strong> is made with <span style="color: #e25555;">♥</span> by <a href="https://connekthq.com" target="_blank" style="font-weight: 500;">Connekt</a> | <a href="https://wordpress.org/support/plugin/ajax-load-more/reviews/" target="_blank" style="font-weight: 500;">Leave a Review</a> | <a href="https://connekthq.com/plugins/ajax-load-more/support/" target="_blank" style="font-weight: 500;">Get Support</a>' ;
if ( ! has_action ( 'alm_pro_installed' )){
echo ' | <a href="https://connekthq.com/plugins/ajax-load-more/pro/" target="_blank" style="font-weight: 500;">Go Pro</a>' ;
}
}
/*
* admin_init
* Initiate the plugin , create our setting variables .
*
* @ since 2.0 . 0
*/
add_action ( 'admin_init' , 'alm_admin_init' );
function alm_admin_init (){
register_setting (
'alm-setting-group' ,
'alm_settings' ,
'alm_sanitize_settings'
);
add_settings_section (
'alm_general_settings' ,
'Global Settings' ,
'alm_general_settings_callback' ,
'ajax-load-more'
);
add_settings_section (
'alm_admin_settings' ,
'Admin Settings' ,
'alm_admin_settings_callback' ,
'ajax-load-more'
);
add_settings_field ( // Container type
'_alm_container_type' ,
__ ( 'Container Type' , 'ajax-load-more' ),
'alm_container_type_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
add_settings_field ( // Classnames
'_alm_classname' ,
__ ( 'Container Classes' , 'ajax-load-more' ),
'alm_class_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
add_settings_field ( // Disbale CSS
'_alm_disable_css' ,
__ ( 'Disable CSS' , 'ajax-load-more' ),
'alm_disable_css_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
add_settings_field ( // Btn color
'_alm_btn_color' ,
__ ( 'Button/Loading Style' , 'ajax-load-more' ),
'alm_btn_color_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
add_settings_field ( // Inline CSS
'_alm_inline_css' ,
__ ( 'Load CSS Inline' , 'ajax-load-more' ),
'alm_inline_css_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
add_settings_field ( // Button classes
'_alm_btn_classname' ,
__ ( 'Button Classes' , 'ajax-load-more' ),
'alm_btn_class_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
/*
add_settings_field ( // Disable REST API
'_alm_use_rest_api' ,
__ ( 'REST API' , 'ajax-load-more' ),
'_alm_use_rest_api_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
*/
add_settings_field ( // Legacy Callbacks
'_alm_legacy_callbacks' ,
__ ( 'Legacy Callbacks' , 'ajax-load-more' ),
'_alm_legacy_callbacks_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
2020-05-04 16:30:49 +02:00
/*
2020-04-17 16:50:36 +02:00
add_settings_field ( // Scroll to top on load
'_alm_scroll_top' ,
__ ( 'Top of Page' , 'ajax-load-more' ),
'_alm_scroll_top_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
2020-05-04 16:30:49 +02:00
*/
2020-04-17 16:50:36 +02:00
add_settings_field ( // Uninstall
'_alm_uninstall' ,
__ ( 'Delete on Uninstall' , 'ajax-load-more' ),
'_alm_uninstall_callback' ,
'ajax-load-more' ,
'alm_general_settings'
);
add_settings_field ( // Load dynamic queries
'_alm_disable_dynamic' ,
__ ( 'Dynamic Content' , 'ajax-load-more' ),
'alm_disable_dynamic_callback' ,
'ajax-load-more' ,
'alm_admin_settings'
);
add_settings_field ( // Hide btn
'_alm_hide_btn' ,
__ ( 'Editor Button' , 'ajax-load-more' ),
'alm_hide_btn_callback' ,
'ajax-load-more' ,
'alm_admin_settings'
);
add_settings_field ( // Display error notices
'_alm_error_notices' ,
__ ( 'Error Notices' , 'ajax-load-more' ),
'_alm_error_notices_callback' ,
'ajax-load-more' ,
'alm_admin_settings'
);
// CACHE
if ( has_action ( 'alm_cache_settings' )){
do_action ( 'alm_cache_settings' );
}
// CUSTOM REPEATERS
if ( has_action ( 'alm_unlimited_settings' )){
do_action ( 'alm_unlimited_settings' );
}
// FILTERS
if ( has_action ( 'alm_filters_settings' )){
do_action ( 'alm_filters_settings' );
}
// LAYOUTS
if ( has_action ( 'alm_layouts_settings' )){
do_action ( 'alm_layouts_settings' );
}
// PAGINATION
if ( has_action ( 'alm_paging_settings' )){
do_action ( 'alm_paging_settings' );
}
// PRELOADED
if ( has_action ( 'alm_preloaded_settings' )){
do_action ( 'alm_preloaded_settings' );
}
// REST API
if ( has_action ( 'alm_rest_api_settings' )){
do_action ( 'alm_rest_api_settings' );
}
// SEO
if ( has_action ( 'alm_seo_settings' )){
do_action ( 'alm_seo_settings' );
}
// SINGLE POST
if ( has_action ( 'alm_prev_post_settings' )){
do_action ( 'alm_prev_post_settings' );
}
// TABS
if ( has_action ( 'alm_tabs_settings' )){
do_action ( 'alm_tabs_settings' );
}
// THEME REPEATERS
if ( has_action ( 'alm_theme_repeaters_settings' )){
do_action ( 'alm_theme_repeaters_settings' );
}
}
/*
* alm_general_settings_callback
* Some general settings text
*
* @ since 2.0 . 0
*/
function alm_general_settings_callback () {
echo '<p>' . __ ( 'Customize the user experience of Ajax Load More by updating the fields below.' , 'ajax-load-more' ) . '</p>' ;
}
/*
* alm_admin_settings_callback
* Some general admin settings text
*
* @ since 2.0 . 0
*/
function alm_admin_settings_callback () {
echo '<p>' . __ ( 'The following settings affect the WordPress admin area only.' , 'ajax-load-more' ) . '</p>' ;
}
/*
* alm_sanitize_settings
* Sanitize our form fields
*
* @ since 2.0 . 0
*/
function alm_sanitize_settings ( $input ) {
return $input ;
}
/*
* alm_disable_css_callback
* Diabale Ajax Load More CSS .
*
* @ since 2.0 . 0
*/
function alm_disable_css_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_disable_css' ]))
$options [ '_alm_disable_css' ] = '0' ;
$html = '<input type="hidden" name="alm_settings[_alm_disable_css]" value="0" />' ;
$html .= '<input type="checkbox" id="alm_disable_css_input" name="alm_settings[_alm_disable_css]" value="1"' . (( $options [ '_alm_disable_css' ]) ? ' checked="checked"' : '' ) . ' />' ;
$html .= '<label for="alm_disable_css_input">' . __ ( 'I want to use my own CSS styles.' , 'ajax-load-more' ) . '<br/><span style="display:block;"><i class="fa fa-file-text-o"></i> <a href="' . ALM_URL . '/core/dist/css/ajax-load-more.css" target="blank">' . __ ( 'View Ajax Load More CSS' , 'ajax-load-more' ) . '</a></span></label>' ;
echo $html ;
}
/*
* alm_hide_btn_callback
* Disbale the ALM shortcode button in the WordPress content editor
*
* @ since 2.2 . 1
*/
function alm_hide_btn_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_hide_btn' ]))
$options [ '_alm_hide_btn' ] = '0' ;
$html = '<input type="hidden" name="alm_settings[_alm_hide_btn]" value="0" /><input type="checkbox" id="alm_hide_btn" name="alm_settings[_alm_hide_btn]" value="1"' . (( $options [ '_alm_hide_btn' ]) ? ' checked="checked"' : '' ) . ' />' ;
$html .= '<label for="alm_hide_btn">' . __ ( 'Hide shortcode button in WYSIWYG editor.' , 'ajax-load-more' ) . '</label>' ;
echo $html ;
}
/*
* _alm_error_notices_callback
* Display admin error notices in browser console .
*
* @ since 2.7 . 2
*/
function _alm_error_notices_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_error_notices' ]))
$options [ '_alm_error_notices' ] = '1' ;
$html = '<input type="hidden" name="alm_settings[_alm_error_notices]" value="0" />' ;
$html .= '<input type="checkbox" name="alm_settings[_alm_error_notices]" id="_alm_error_notices" value="1"' . (( $options [ '_alm_error_notices' ]) ? ' checked="checked"' : '' ) . ' />' ;
$html .= '<label for="_alm_error_notices">' . __ ( 'Display error messaging regarding repeater template updates in the browser console.' , 'ajax-load-more' ) . '</label>' ;
echo $html ;
}
/*
* alm_disable_dynamic_callback
* Disable the dynamic population of categories , tags and authors
*
* @ since 2.6 . 0
*/
function alm_disable_dynamic_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_disable_dynamic' ]))
$options [ '_alm_disable_dynamic' ] = '0' ;
$html = '<input type="hidden" name="alm_settings[_alm_disable_dynamic]" value="0" />' ;
$html .= '<input type="checkbox" name="alm_settings[_alm_disable_dynamic]" id="_alm_disable_dynamic" value="1"' . (( $options [ '_alm_disable_dynamic' ]) ? ' checked="checked"' : '' ) . ' />' ;
$html .= '<label for="_alm_disable_dynamic">' . __ ( 'Disable dynamic population of categories, tags and authors in the Shortcode Builder.<span style="display:block">Recommended if you have a large number of categories, tags and/or authors.' , 'ajax-load-more' ) . '</label>' ;
echo $html ;
}
/*
* alm_container_type_callback
* The type of container ul or div
*
* @ since 2.0 . 0
*/
function alm_container_type_callback () {
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_container_type' ]))
$options [ '_alm_container_type' ] = '1' ;
$html = '<input type="radio" id="_alm_container_type_one" name="alm_settings[_alm_container_type]" value="1"' . checked ( 1 , $options [ '_alm_container_type' ], false ) . '/>' ;
$html .= '<label for="_alm_container_type_one"><ul> <span style="padding-top: 2px;"><!-- ' . __ ( 'Ajax Posts Here' , 'ajax-load-more' ) . ' --></span> </ul></label><br/>' ;
$html .= '<input type="radio" id="_alm_container_type_two" name="alm_settings[_alm_container_type]" value="2"' . checked ( 2 , $options [ '_alm_container_type' ], false ) . '/>' ;
$html .= '<label for="_alm_container_type_two"><div> <span style="padding-top: 2px;"><!-- ' . __ ( 'Ajax Posts Here' , 'ajax-load-more' ) . ' --></span> </div></label>' ;
$html .= '<label style="cursor: default !important"><span style="display:block">' . __ ( 'You can modify the container type when building a shortcode.' , 'ajax-load-more' ) . '</span></label>' ;
echo $html ;
}
/*
* alm_class_callback
* Add classes to the Ajax Load More wrapper
*
* @ since 2.0 . 0
*/
function alm_class_callback (){
$options = get_option ( 'alm_settings' );
$html = '<label for="alm_settings[_alm_classname]">' . __ ( 'Add custom classes to the <i>.alm-listing</i> container - classes are applied globally and will appear with every instance of Ajax Load More. <span style="display:block">You can also add classes when building a shortcode.</span>' , 'ajax-load-more' ) . '</label><br/>' ;
$html .= '<input type="text" id="alm_settings[_alm_classname]" name="alm_settings[_alm_classname]" value="' . $options [ '_alm_classname' ] . '" placeholder="posts listing etc..." /> ' ;
echo $html ;
}
/*
* alm_btn_color_callback
* Get button color
*
* @ since 2.0 . 0
*/
function alm_btn_color_callback () {
$options = get_option ( 'alm_settings' );
$type = $options [ '_alm_btn_color' ];
if ( ! isset ( $type ))
$options [ '_alm_btn_color' ] = '0' ;
$selected0 = '' ;
if ( $type == 'default' ) $selected0 = 'selected="selected"' ;
$selected1 = '' ;
if ( $type == 'blue' ) $selected1 = 'selected="selected"' ;
$selected2 = '' ;
if ( $type == 'green' ) $selected2 = 'selected="selected"' ;
$selected3 = '' ;
if ( $type == 'red' ) $selected3 = 'selected="selected"' ;
$selected4 = '' ;
if ( $type == 'purple' ) $selected4 = 'selected="selected"' ;
$selected5 = '' ;
if ( $type == 'grey' ) $selected5 = 'selected="selected"' ;
$selected6 = '' ;
if ( $type == 'white' ) $selected6 = 'selected="selected"' ;
2020-05-04 16:30:49 +02:00
$selected13 = '' ;
if ( $type == 'light-grey' ) $selected13 = 'selected="selected"' ;
2020-04-17 16:50:36 +02:00
$selected7 = '' ;
if ( $type == 'infinite classic' ) $selected7 = 'selected="selected"' ;
$selected8 = '' ;
if ( $type == 'infinite skype' ) $selected8 = 'selected="selected"' ;
$selected9 = '' ;
if ( $type == 'infinite ring' ) $selected9 = 'selected="selected"' ;
$selected10 = '' ;
if ( $type == 'infinite fading-blocks' ) $selected10 = 'selected="selected"' ;
$selected11 = '' ;
if ( $type == 'infinite fading-circles' ) $selected11 = 'selected="selected"' ;
$selected12 = '' ;
if ( $type == 'infinite chasing-arrows' ) $selected12 = 'selected="selected"' ;
$html = '<label for="alm_settings_btn_color">' . __ ( 'Select an Ajax loading style - you can choose between a <strong>Button</strong> or <strong>Infinite Scroll</strong>' , 'ajax-load-more' );
$html .= '.<br/><span style="display:block">Selecting an Infinite Scroll style will remove the click interaction and load content on scroll <u>only</u>.</span>' ;
$html .= '</label>' ;
$html .= '<select id="alm_settings_btn_color" name="alm_settings[_alm_btn_color]">' ;
2020-05-04 16:30:49 +02:00
$html .= '<optgroup label="' . __ ( 'Button Style (Dark)' , 'ajax-load-more' ) . '">' ;
$html .= '<option value="default" class="alm-color default" ' . $selected0 . '>Default</option>' ;
$html .= '<option value="blue" class="alm-color blue" ' . $selected1 . '>Blue</option>' ;
$html .= '<option value="green" class="alm-color green" ' . $selected2 . '>Green</option>' ;
$html .= '<option value="purple" class="alm-color purple" ' . $selected4 . '>Purple</option>' ;
$html .= '<option value="grey" class="alm-color grey" ' . $selected5 . '>Grey</option>' ;
$html .= '</optgroup>' ;
$html .= '<optgroup label="' . __ ( 'Button Style (Light)' , 'ajax-load-more' ) . '">' ;
$html .= '<option value="white" class="alm-color white" ' . $selected6 . '>White</option>' ;
$html .= '<option value="light-grey" class="alm-color light-grey" ' . $selected13 . '>Light Grey</option>' ;
$html .= '</optgroup>' ;
2020-07-21 16:23:51 +02:00
2020-05-04 16:30:49 +02:00
$html .= '<optgroup label="' . __ ( 'Infinite Scroll (No Button)' , 'ajax-load-more' ) . '">' ;
$html .= '<option value="infinite classic" class="infinite classic" ' . $selected7 . '>Classic</option>' ;
$html .= '<option value="infinite skype" class="infinite skype" ' . $selected8 . '>Skype</option>' ;
$html .= '<option value="infinite ring" class="infinite ring" ' . $selected9 . '>Circle Fill</option>' ;
$html .= '<option value="infinite fading-blocks" class="infinite fading-blocks" ' . $selected10 . '>Fading Blocks</option>' ;
$html .= '<option value="infinite fading-circles" class="infinite fading-circles" ' . $selected11 . '>Fading Circles</option>' ;
$html .= '<option value="infinite chasing-arrows" class="infinite chasing-arrows" ' . $selected12 . '>Chasing Arrows</option>' ;
$html .= '</optgroup>' ;
$html .= '</select>' ;
2020-07-21 16:23:51 +02:00
2020-05-04 16:30:49 +02:00
// Set loading class for infinite type only
$loadingClass = ( strpos ( $type , 'infinite' ) !== false ) ? ' loading' : '' ;
2020-04-17 16:50:36 +02:00
$html .= '<div class="clear"></div>' ;
$html .= '<div class="alm-btn-wrap">' ;
2020-05-04 16:30:49 +02:00
$html .= '<div class="ajax-load-more-wrap core ' . $type . '">' ;
$html .= '<span>' . __ ( 'Click to Preview' , 'ajax-load-more' ) . '</span>' ;
$html .= '<button style="cursor: pointer;" type="button" class="alm-load-more-btn' . $loadingClass . '" id="test-alm-button">' . apply_filters ( 'alm_button_label' , __ ( 'Older Posts' , 'ajax-load-more' )) . '</button>' ;
2020-04-17 16:50:36 +02:00
2020-05-04 16:30:49 +02:00
$html .= '</div>' ;
$html .= '</div>' ;
echo $html ;
2020-04-17 16:50:36 +02:00
}
/*
* alm_inline_css_callback
* Load CSS Inline vs the head
*
* @ since 3.3 . 1
*/
function alm_inline_css_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_inline_css' ]))
$options [ '_alm_inline_css' ] = '1' ;
$html = '<input type="hidden" name="alm_settings[_alm_inline_css]" value="0" />' ;
$html .= '<input type="checkbox" name="alm_settings[_alm_inline_css]" id="alm_inline_css" value="1"' . (( $options [ '_alm_inline_css' ]) ? ' checked="checked"' : '' ) . ' />' ;
$html .= '<label for="alm_inline_css">' . __ ( 'Improve site performance by loading Ajax Load More CSS inline.' , 'ajax-load-more' ) . '</label>' ;
echo $html ;
}
/*
* alm_btn_class_callback
* Add classes to the Ajax Load More button
*
* @ since 2.4 . 1
*/
function alm_btn_class_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_btn_classname' ]))
$options [ '_alm_btn_classname' ] = '' ;
$html = '<label for="alm_settings[_alm_btn_classname]">' . __ ( 'Add classes to your <strong>Load More</strong> button.' , 'ajax-load-more' ) . '</label>' ;
$html .= '<input type="text" class="btn-classes" id="alm_settings[_alm_btn_classname]" name="alm_settings[_alm_btn_classname]" value="' . $options [ '_alm_btn_classname' ] . '" placeholder="button rounded listing etc..." /> ' ;
echo $html ;
?>
< script >
// Check if Disable CSS === true
if ( jQuery ( 'input#alm_disable_css_input' ) . is ( " :checked " )){
jQuery ( 'select#alm_settings_btn_color' ) . parent () . parent () . hide (); // Hide button color
jQuery ( 'input#alm_inline_css' ) . parent () . parent () . hide (); // Hide inline css
}
jQuery ( 'input#alm_disable_css_input' ) . change ( function () {
var el = jQuery ( this );
if ( el . is ( " :checked " )) {
el . parent () . parent ( 'tr' ) . next ( 'tr' ) . hide (); // Hide button color
el . parent () . parent ( 'tr' ) . next ( 'tr' ) . next ( 'tr' ) . hide (); // Hide inline css
} else {
el . parent () . parent ( 'tr' ) . next ( 'tr' ) . show (); // show button color
el . parent () . parent ( 'tr' ) . next ( 'tr' ) . next ( 'tr' ) . show (); // show inline css
}
});
</ script >
< ? php
}
/*
* _alm_scroll_top_callback
* Move window to top of screen on page load
*
* @ since 2.6 . 0
*/
function _alm_scroll_top_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_scroll_top' ]))
$options [ '_alm_scroll_top' ] = '0' ;
$html = '<input type="hidden" name="alm_settings[_alm_scroll_top]" value="0" />' ;
$html .= '<input type="checkbox" name="alm_settings[_alm_scroll_top]" id="_alm_scroll_top" value="1"' . (( $options [ '_alm_scroll_top' ]) ? ' checked="checked"' : '' ) . ' />' ;
$html .= '<label for="_alm_scroll_top">' ;
$html .= __ ( 'On initial page load, move the user\'s browser window to the top of the screen.' , 'ajax-load-more' );
$html .= '<span style="display:block">' . __ ( 'This may help prevent the loading of unnecessary posts.' , 'ajax-load-more' ) . '</span>' ;
$html .= '</label>' ;
echo $html ;
}
/*
* _alm_use_rest_api
* Disable REST API in favor of admin - ajax . php
*
* @ since 5.1
*/
function _alm_use_rest_api_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_use_rest_api' ]))
$options [ '_alm_use_rest_api' ] = '0' ;
$html = '<input type="hidden" name="alm_settings[_alm_use_rest_api]" value="0" />' ;
$html .= '<input type="checkbox" name="alm_settings[_alm_use_rest_api]" id="_alm_use_rest_api" value="1"' . (( $options [ '_alm_use_rest_api' ]) ? ' checked="checked"' : '' ) . ' />' ;
$html .= '<label for="_alm_use_rest_api">' ;
$html .= __ ( 'Disable REST API.' , 'ajax-load-more' );
$html .= '<span style="display:block">' . __ ( 'Use `admin-ajax.php` in favour of the WordPress REST API for all Ajax requests.' , 'ajax-load-more' ) . '</span>' ;
$html .= '</label>' ;
echo $html ;
}
/*
* _alm_legacy_callbacks_callback
* Load legacy callback actions
*
* @ since 5.0 . 0
*/
function _alm_legacy_callbacks_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_legacy_callbacks' ]))
$options [ '_alm_legacy_callbacks' ] = '0' ;
$html = '<input type="hidden" name="alm_settings[_alm_legacy_callbacks]" value="0" />' ;
$html .= '<input type="checkbox" name="alm_settings[_alm_legacy_callbacks]" id="_alm_legacy_callbacks" value="1"' . (( $options [ '_alm_legacy_callbacks' ]) ? ' checked="checked"' : '' ) . ' />' ;
$html .= '<label for="_alm_legacy_callbacks">' ;
$html .= __ ( 'Load legacy JavaScript callback functions.' , 'ajax-load-more' );
$html .= '<span style="display:block">' . __ ( 'Ajax Load More <a href="https://connekthq.com/plugins/ajax-load-more/docs/callback-functions/" target="_blank">callback functions</a> were updated in 5.0. Users who were using callbacks prior to ALM 5.0 can load this helper library to maintain compatibility.' , 'ajax-load-more' ) . '</span>' ;
$html .= '</label>' ;
echo $html ;
}
/*
* _alm_uninstall_callback
* Remove all ALM data on uninstall
*
* @ since 4.1 . 0
*/
function _alm_uninstall_callback (){
$options = get_option ( 'alm_settings' );
if ( ! isset ( $options [ '_alm_uninstall' ]))
$options [ '_alm_uninstall' ] = '0' ;
$html = '<input type="hidden" name="alm_settings[_alm_uninstall]" value="0" />' ;
$html .= '<input type="checkbox" name="alm_settings[_alm_uninstall]" id="_alm_uninstall" value="1"' . (( $options [ '_alm_uninstall' ]) ? ' checked="checked"' : '' ) . ' />' ;
$html .= '<label for="_alm_uninstall">' . __ ( 'Check this box if Ajax Load More should remove all of its data* when the plugin is deleted.' , 'ajax-load-more' );
$html .= '<span style="display:block"><em>' . __ ( '* Database Tables, Options and Repeater Templates' , 'ajax-load-more' ) . '</em></span>' ;
$html .= '</label>' ;
echo $html ;
}