get_credits_ref() != '' ) {
$rel = 'rel="nofollow"';
$url .= '?ref=' . atkp_options::$loader->get_credits_ref();
}
if ( ATKPTools::is_lang_de() ) {
return sprintf( __( 'Die Anzeige der Produkte wurde mit dem affiliate-toolkit WordPress Plugin umgesetzt.', 'affiliate-toolkit-starter' ), esc_url( $url ), esc_attr( $rel ) );
} else {
return sprintf( __( 'The product display was implemented using the affiliate-toolkit WordPress plugin.', 'affiliate-toolkit-starter' ), esc_url( $url ), esc_attr( $rel ) );
}
}
public static function get_acf_fields( $post_type ) {
$fieldarray = array();
if ( function_exists( 'get_field_objects' ) ) {
$groups = acf_get_field_groups( array( 'post_type' => $post_type ) );
foreach ( $groups as $group ) {
$fields = acf_get_fields( $group['key'] );
foreach ( $fields as $field ) {
$label = $field["label"];
$name = $field["name"];
$fieldarray[ $name ] = $label;
}
}
}
return $fieldarray;
}
/**
* @param string $type
* @param string $title
* @param bool $iswpcronjob
* @param array $list
* @param string $status
*
* @return atkp_queue mixed
*/
public static function create_queue( $type, $title, $iswpcronjob, $list, $status ) {
$atkp_queue = new atkp_queue();
$atkp_queue->status = $status; //atkp_queue_status::ACTIVE;
$atkp_queue->type = $type;
if ( $title != '' ) {
$atkp_queue->title = $title;
} else {
if ( $iswpcronjob ) {
$atkp_queue->title = __( 'WordPress Cronjob', 'affiliate-toolkit-starter' );
} else if ( class_exists( 'WP_CLI' ) ) {
$atkp_queue->title = __( 'WordPress CLI Cronjob', 'affiliate-toolkit-starter' );
} else {
$atkp_queue->title = __( 'affiliate-toolkit Cronjob', 'affiliate-toolkit-starter' );
}
}
$atkp_queue->entries = $list;
$atkp_queuetable_helper = new atkp_queuetable_helper();
return $atkp_queuetable_helper->save_queue( $atkp_queue );
}
public static function get_string_between( $string, $start, $end ) {
$string = ' ' . $string;
$ini = strpos( $string, $start );
if ( $ini == 0 ) {
return '';
}
$ini += strlen( $start );
$len = strpos( $string, $end, $ini ) - $ini;
return substr( $string, $ini, $len );
}
public static function validate_ean( $ean ) {
return BarcodeValidator::IsValidEAN8( $ean ) || BarcodeValidator::IsValidEAN13( $ean ) || BarcodeValidator::IsValidEAN14( $ean );
}
public static function validate_isbn( $isbn ) {
return BarcodeValidator::IsValidISBN( $isbn );
}
public static function validate_gtin( $gtin ): bool {
return BarcodeValidator::IsValidEAN8( $gtin ) || BarcodeValidator::IsValidEAN13( $gtin ) || BarcodeValidator::IsValidEAN14( $gtin );
}
public static function display_helptext( $text, $url = '', $urltitle = 'Read more' ) {
$link = '';
if ( $url != '' ) {
$link = ' ' . esc_html__( $urltitle, 'affiliate-toolkit-starter' ) . '';
}
$allowed_html = array(
'div' => array(
'class' => array(),
'style' => array(),
),
'span' => array(
'class' => array(),
'style' => array(),
),
'a' => array(
'href' => array(),
'target' => array(),
'title' => array(),
)
);
echo wp_kses( '
' . __( $text, 'affiliate-toolkit-starter' ) . $link . '
', $allowed_html );
}
public static function display_warntext( $text, $url = '', $urltitle = 'Read more' ) {
$link = '';
if ( $url != '' ) {
$link .= ' ' . $urltitle . '';
}
$allowed_html = array(
'div' => array(
'class' => array(),
'style' => array(),
),
'span' => array(
'class' => array(),
'style' => array(),
),
'a' => array(
'href' => array(),
'target' => array(),
'title' => array(),
)
);
echo wp_kses( ' ' . __( $text, 'affiliate-toolkit-starter' ) . $link . '
', $allowed_html );
}
public static function check_sslurl( $url ) {
if ( is_ssl() && ATKPTools::startsWith( $url, 'http://' ) && ! ATKPTools::startsWith( $url, 'https://' ) ) {
$url = 'https://' . substr( $url, 7 );
}
return $url;
}
public static function get_fieldgroups() {
$args = array(
'posts_per_page' => 100,
'post_type' => array( ATKP_FIELDGROUP_POSTTYPE ),
'post_status' => array( 'publish', 'draft' ),
);
$groups = get_posts( $args );
return $groups;
}
public static function get_fieldgroups_with_taxonomy() {
$args = array(
'posts_per_page' => 100,
'post_type' => array( ATKP_FIELDGROUP_POSTTYPE ),
'post_status' => array( 'publish', 'draft' ),
'meta_query' => array(
'key' => ATKP_FIELDGROUP_POSTTYPE . '_hastaxonomy',
'value' => 1,
'compare' => '=',
'type' => 'NUMERIC'
)
);
$groups = get_posts( $args );
return $groups;
}
public static function get_fieldgroups_by_productid( $postId ) {
$category = get_option( ATKP_PLUGIN_PREFIX . '_product_category_taxonomy', strtolower( __( 'Productcategory', 'affiliate-toolkit-starter' ) ) );
$categoryvalues = array();
//$terms = get_the_terms( $postId, $category );
$categoryvalues = wp_get_post_terms( intval( $postId ), $category, array( 'fields' => 'ids' ) );
if ( $categoryvalues == null || ! $categoryvalues || ! is_array( $categoryvalues ) ) {
return array();
}
$args = array(
'posts_per_page' => 25,
'post_type' => array( ATKP_FIELDGROUP_POSTTYPE ),
'post_status' => array( 'publish', 'draft' ),
'include_children' => true,
'tax_query' => array(
array(
'taxonomy' => $category, //or tag or custom taxonomy
'field' => 'term_id',
'terms' => $categoryvalues,
'operator' => 'IN',
)
)
);
$groups = get_posts( $args );
//var_dump($categoryvalues);
//var_dump($groups);exit;
return $groups;
}
public static function has_subshops( $shoptype ) {
$shoptypes = array();
$shoptypes[] = '2';
$shoptypes[] = '3';
$shoptypes[] = '5';
$shoptypes[] = '8';
$shoptypes[] = '9';
$shoptypes[] = '10';
$shoptypes[] = '13';
$shoptypes[] = '14';
$shoptypes[] = '15';
$shoptypes = apply_filters( 'atkp_subshop_supported', $shoptypes );
return in_array( $shoptype, $shoptypes);
}
public static function has_eanpricecompare( $shoptype ) {
$shoptypes = array();
$shoptypes[] = '8';
$shoptypes = apply_filters( 'atkp_subshop_ean_notsupported', $shoptypes );
return !in_array($shoptype, $shoptypes);
}
public static function has_articlenumbersearch( $shoptype ) {
$shoptypes = array();
$shoptypes[] = '1';
$shoptypes[] = '2';
$shoptypes[] = '4';
$shoptypes[] = '10';
$shoptypes[] = '13';
$shoptypes = apply_filters( 'atkp_subshop_articlenumber_supported', $shoptypes );
return in_array($shoptype, $shoptypes);
}
public static function create_list( $title, $shopid, $listtype, $searchterm, $department = '', $sortby = '', $loadmoreoffers = false ) {
//throw new exception($listtype);
if ( $title == '' ) {
$title = $listtype . '-' . $searchterm . ( $department != '' ? '-' . $department : '' );
}
global $user_ID;
$new_post = array(
'post_title' => $title,
'post_status' => 'publish',
'post_author' => $user_ID,
'post_type' => ATKP_LIST_POSTTYPE,
);
$post_id = wp_insert_post( $new_post );
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_shopid', $shopid );
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_source', $listtype );
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_preferlocalproduct', true );
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_loadmoreoffers', $loadmoreoffers );
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_search_department', $department == '' ? 'All' : $department );
if ( $listtype == '10' || $listtype == '11' ) {
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_node_id', $searchterm );
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_search_limit', 10 );
} else {
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_search_keyword', $searchterm );
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_search_limit', 20 );
}
if ( $sortby != '' ) {
ATKPTools::set_post_setting( $post_id, ATKP_LIST_POSTTYPE . '_search_orderby', $sortby );
}
return $post_id;
}
public static function get_current_utc() {
$script_at = date_default_timezone_get();
date_default_timezone_set( "UTC" );
$time = time();
date_default_timezone_set( $script_at );
return $time;
}
public static function get_formatted_date( $updatedon ) {
if ( $updatedon == '' ) {
return '';
}
$localtime = date_i18n( get_option( 'date_format' ), $updatedon );
//$localtime = get_date_from_gmt( $utctime, 'Y-m-d H:i:s' );
//$localtime = $utctime; //date_i18n(get_option( 'date_format' ), $utctime);
return $localtime;
}
public static function get_formatted_time( $updatedon ) {
if ( $updatedon == '' ) {
return '';
}
$utctime = date_i18n( 'Y-m-d H:i:s', $updatedon, true );
$localtime = get_date_from_gmt( $utctime, get_option( 'time_format' ) );
return $localtime;
}
private static $iscreating = false;
public static function publish_product( $post_id, $posttitle = '' ) {
$query = array(
'ID' => $post_id,
'post_status' => 'publish'
);
wp_update_post( $query, true );
if ( $posttitle != '' ) {
global $wpdb;
$wpdb->update( $wpdb->posts, array(
'post_title' => $posttitle,
'post_name' => sanitize_title( $posttitle )
), array( 'ID' => $post_id ) );
}
}
public static function create_product( $title, $shopid, $asin, $status, $asintype = 'ASIN', $subshopid = '' ) {
if ( self::$iscreating ) {
return null;
}
self::$iscreating = true;
$defaultproductstate = atkp_options::$loader->get_defaultproductstate(); // get_option( ATKP_PLUGIN_PREFIX . '_defaultproductstate', 'draft' );
if ( $status == null || $status == '' ) {
$status = $defaultproductstate;
}
$title = str_replace( "\'", "", $title );
//25.06.2018 -> $status == 'publish' ? 'publish' : veröffentlich wird erst am ende
global $user_ID;
$new_post = array(
'post_title' => $title,
'post_status' => $status == 'publish' ? 'publish' : 'draft',
'post_author' => $user_ID,
'post_type' => ATKP_PRODUCT_POSTTYPE,
);
$post_id = wp_insert_post( $new_post );
self::$iscreating = false;
if ( $status == 'woo' ) {
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_iswoocommerce', 1 );
}
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_shopid', $shopid );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_init_subshopid', $subshopid );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_refreshmoreoffersregulary', 1 );
if ( $shopid == '' ) {
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_asin', $asin );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_asintype', $asintype );
if ( $asintype == 'EAN' ) {
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_ean', $asin );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_refreshmoreoffersregulary', 1 );
}
} else {
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_asin', $asin );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_asintype', $asintype );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_refreshreviewinforegulary', 1 );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_refreshpriceinforegulary', 1 );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_refreshproducturlregulary', 1 );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_refreshimagesregulary', 1 );
ATKPTools::set_post_setting( $post_id, ATKP_PRODUCT_POSTTYPE . '_refreshmoreoffersregulary', 1 );
}
return $post_id;
}
public static function delete_image_attachment( $attach_id ) {
//wenn thumbnail vorhanden dann nicht setzen
if ( $attach_id != '' ) {
delete_post_thumbnail( $attach_id );
wp_delete_attachment( $attach_id, false );
}
}
public static function upload_image( $image_url, $image_name, $post_id, $idx = 1 ) {
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( '*** upload_image started (' . $image_url . ' / ' . $image_name . ' / ' . $post_id . ') ***' );
}
if ( ! function_exists( 'file_get_contents' ) ) {
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( 'function file_get_contents not exists' );
}
return false;
}
// Add Featured Image to Post
$upload_dir = wp_upload_dir(); // Set upload folder
$context = stream_context_create(
array(
'http' => array(
'method' => "GET",
'header' => "Accept-language: en\r\n" .
"Cookie: foo=bar\r\n" . // check function.stream-context-create on php.net
"User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n"
// i.e. An iPad
)
)
);
$image_data = @file_get_contents( $image_url, false, null ); // Get image data
//wenn fehler beim lesen auftritt, wird false zurück gegeben
if ( ! $image_data ) {
$error = error_get_last();
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( '$image_data is empty: ' . $image_url );
}
ATKPLog::LogError( "HTTP request failed. Error was: " . $error['message'] );
return false;
}
//find attachmentid
$args = array(
'post_status' => 'inherit',
'post_type' => 'attachment',
'meta_query' => array(
array(
'key' => ATKP_PLUGIN_PREFIX . '_key',
'compare' => '=',
'value' => $post_id . '-' . $idx
)
)
);
$attach_query = new WP_Query( $args );
$posts_array = $attach_query->posts;
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( 'attachment found: ' . serialize( $posts_array ) );
}
if ( isset( $posts_array ) && count( $posts_array ) > 0 ) {
$attachmentid = $posts_array[0]->ID;
$theurl = wp_get_attachment_image_src( $attachmentid, 'full' );
}
$basedir = $upload_dir['basedir'];
$baseurl = $upload_dir['baseurl'];
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( '$basedir: ' . serialize( $basedir ) );
ATKPLog::LogDebug( '$baseurl: ' . serialize( $baseurl ) );
}
if ( isset( $theurl ) && $theurl ) {
$file = $basedir . str_replace( $baseurl, '', $theurl[0] );
$filename = $posts_array[0]->post_name;
} else {
$ext = substr( strrchr( $image_url, '.' ), 1 );
//dateiendung hat nur 3 stellen
$ext = strlen( $ext ) <= 3 ? $ext : '';
if ( $ext == '' || $ext == ' ' ) {
$ext = 'jpg';
}
$image_name = strlen( $image_name ) > 30 ? substr( $image_name, 0, 30 ) : $image_name;
$unique_file_name = sanitize_file_name( $post_id . '-' . $idx . '-' . sanitize_title( $image_name ) . '.' . $ext );
//wp_unique_filename( $upload_dir['path'], $image_name.'.'.$ext ); // Generate unique name
$filename = strtolower( basename( $unique_file_name ) ); // Create image file name
$basedir = '';
// Check folder permission and define file location
if ( wp_mkdir_p( $upload_dir['path'] ) ) {
$basedir = $upload_dir['path'];
} else {
$basedir = $upload_dir['basedir'];
}
//$basedir = wp_upload_dir('2017/01')['basedir']. '/product-image';
//wp_mkdir_p($basedir);
$file = $basedir . '/' . $filename;
$file = urldecode( $file );
}
/* Restore original Post Data */
wp_reset_postdata();
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( '$file: ' . serialize( $file ) );
ATKPLog::LogDebug( '$filename: ' . serialize( $filename ) );
}
// Create the image file on the server
if ( ! file_put_contents( $file, $image_data ) ) {
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( 'image cannot be saved: ' . $file );
}
return false;
}
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( 'file saved: ' . $file );
}
//find attachmentid
//$args = array(
// 'post_per_page' => 1,
// 'post_type' => 'attachment',
// 'name' => $filename,
//);
//$posts_array = get_posts( $args );
// Check image file type
$wp_filetype = wp_check_filetype( $filename, null );
if ( isset( $posts_array ) && count( $posts_array ) > 0 ) {
$attach_id = $posts_array[0]->ID;
$data = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => $filename,
'post_status' => 'inherit'
);
//wp_update_attachment_metadata( $attach_id, $data );
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( '*** existing attachment updated: ' . $attach_id . '' );
ATKPLog::LogDebug( serialize( $data ) );
}
} else {
// Set attachment data
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => $filename,
'post_status' => 'inherit'
);
// Create the attachment
$attach_id = wp_insert_attachment( $attachment, $file, $post_id );
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( '*** attachment created: ' . $attach_id . '' );
ATKPLog::LogDebug( serialize( $attachment ) );
}
}
// Include image.php
require_once( ABSPATH . 'wp-admin/includes/image.php' );
// Assign metadata to attachment
wp_update_attachment_metadata( $attach_id, wp_generate_attachment_metadata( $attach_id, $file ) );
//set atkp key
ATKPTools::set_post_setting( $attach_id, ATKP_PLUGIN_PREFIX . '_key', $post_id . '-' . $idx );
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( '*** upload_image finished (' . $attach_id . ') ***' );
}
return $attach_id;
}
public static function set_featured_image( $image_url, $image_name, $post_id ) {
$imgurl = ATKPTools::get_post_setting( $post_id, ATKP_PLUGIN_PREFIX . '_current_imageurl');
$thumbnail = get_post_thumbnail_id( $post_id );
//wenn bildurl gleich ist und thumbnail vorhanden, dann ist ein update nicht erforderlich
if($imgurl == $image_url && $thumbnail != '')
return;
$attach_id = ATKPTools::upload_image( $image_url, $image_name, $post_id, 1 );
//lösche das alte thumbnail wenn der upload nicht erfolgreich war
if ( $attach_id == false ) {
//ATKPTools::delete_image_attachment($thumbnail);
if ( has_post_thumbnail( $post_id ) ) {
$attachment_id = get_post_thumbnail_id( $post_id );
if ( $attachment_id ) {
wp_delete_attachment( $attachment_id, true );
}
}
}
if ( ATKPLog::$logenabled ) {
ATKPLog::LogDebug( 'existing thumbnailid: ' . $thumbnail . ', new thumbnailid: ' . $attach_id );
}
// And finally assign featured image to post
set_post_thumbnail( $post_id, $attach_id );
ATKPTools::set_post_setting( $post_id, ATKP_PLUGIN_PREFIX . '_current_imageurl', $image_url);
}
public static function exists_cron_job( $hookParam = ATKP_EVENT, $output = false ) {
//$cron = _get_cron_array();
//$hook = wp_get_schedule( $hookParam );
$crons = _get_cron_array();
$events = array();
if ( $crons ) {
foreach ( $crons as $time => $cron ) {
foreach ( $cron as $hook => $dings ) {
foreach ( $dings as $sig => $data ) {
if ( $hook == $hookParam ) {
if ( $data['schedule'] ) {
if ( $output ) {
$localtime = get_date_from_gmt( date( 'Y-m-d H:i:s', $time ), get_option( 'time_format' ) );
$localdate = get_date_from_gmt( date( 'Y-m-d H:i:s', $time ), get_option( 'date_format' ) );
$text = '';
$text .= ' ' . sprintf( esc_html__( 'Cronjob\'s next execution: %s %s', 'affiliate-toolkit-starter' ), $localdate, $localtime );
$text .= ' (' . self::time_since( time(), $time ) . ')';
$text .= ' Interval: ' . self::interval( isset( $data['interval'] ) ? $data['interval'] : null );
echo esc_html($text);
}
return true;
}
}
}
}
}
}
if ( $output ) {
echo esc_html__( 'cronjob is not running! Click the "Save Changes" button.', 'affiliate-toolkit-starter' );
}
return false;
}
public static function time_since( $older_date, $newer_date ) {
return self::interval( $newer_date - $older_date );
}
public static function interval( $since ) {
__( '%s years', 'affiliate-toolkit-starter' );
__( '%s months', 'affiliate-toolkit-starter' );
__( '%s weeks', 'affiliate-toolkit-starter' );
__( '%s days', 'affiliate-toolkit-starter' );
__( '%s hours', 'affiliate-toolkit-starter' );
__( '%s minutes', 'affiliate-toolkit-starter' );
__( '%s seconds', 'affiliate-toolkit-starter' );
// array of time period chunks
$chunks = array(
array( 60 * 60 * 24 * 365, _n_noop( '%s year', '%s years', 'affiliate-toolkit-starter' ) ),
array( 60 * 60 * 24 * 30, _n_noop( '%s month', '%s months', 'affiliate-toolkit-starter' ) ),
array( 60 * 60 * 24 * 7, _n_noop( '%s week', '%s weeks', 'affiliate-toolkit-starter' ) ),
array( 60 * 60 * 24, _n_noop( '%s day', '%s days', 'affiliate-toolkit-starter' ) ),
array( 60 * 60, _n_noop( '%s hour', '%s hours', 'affiliate-toolkit-starter' ) ),
array( 60, _n_noop( '%s minute', '%s minutes', 'affiliate-toolkit-starter' ) ),
array( 1, _n_noop( '%s second', '%s seconds', 'affiliate-toolkit-starter' ) ),
);
if ( $since <= 0 ) {
return __( 'now', 'affiliate-toolkit-starter' );
}
// we only want to output two chunks of time here, eg:
// x years, xx months
// x days, xx hours
// so there's only two bits of calculation below:
// step one: the first chunk
for ( $i = 0, $j = count( $chunks ); $i < $j; $i ++ ) {
$seconds = $chunks[ $i ][0];
$name = $chunks[ $i ][1];
// finding the biggest chunk (if the chunk fits, break)
if ( ( $count = floor( $since / $seconds ) ) != 0 ) {
break;
}
}
// set output var
$output = sprintf( translate_nooped_plural( $name, $count, ATKP_PLUGIN_PREFIX ), $count );
// step two: the second chunk
if ( $i + 1 < $j ) {
$seconds2 = $chunks[ $i + 1 ][0];
$name2 = $chunks[ $i + 1 ][1];
if ( ( $count2 = floor( ( $since - ( $seconds * $count ) ) / $seconds2 ) ) != 0 ) {
// add to output var
$output .= ' ' . sprintf( translate_nooped_plural( $name2, $count2, ATKP_PLUGIN_PREFIX ), $count2 );
}
}
return $output;
}
public static function mix_colors( $basecolor, $mixcolor, $ratio, $addHash = true ) {
if ( $basecolor == '' || $basecolor == null ) {
return $basecolor;
}
$baseComponentOffset = strlen( $basecolor ) == 7 ? 1 : 0;
$baseComponentRed = hexdec( substr( $basecolor, $baseComponentOffset, 2 ) );
$baseComponentGreen = hexdec( substr( $basecolor, $baseComponentOffset + 2, 2 ) );
$baseComponentBlue = hexdec( substr( $basecolor, $baseComponentOffset + 4, 2 ) );
$mixComponentOffset = strlen( $mixcolor ) == 7 ? 1 : 0;
$mixComponentRed = hexdec( substr( $mixcolor, $mixComponentOffset, 2 ) );
$mixComponentGreen = hexdec( substr( $mixcolor, $mixComponentOffset + 2, 2 ) );
$mixComponentBlue = hexdec( substr( $mixcolor, $mixComponentOffset + 4, 2 ) );
$Rsum = $baseComponentRed + $mixComponentRed;
$Gsum = $baseComponentGreen + $mixComponentGreen;
$Bsum = $baseComponentBlue + $mixComponentBlue;
$R = ( $baseComponentRed * ( 100 - $ratio ) + $mixComponentRed * $ratio ) / 100;
$G = ( $baseComponentGreen * ( 100 - $ratio ) + $mixComponentGreen * $ratio ) / 100;
$B = ( $baseComponentBlue * ( 100 - $ratio ) + $mixComponentBlue * $ratio ) / 100;
$redPercentage = max( $R, $G, $B ) > 255 ? $R / max( $Rsum, $Gsum, $Bsum ) : $R / 255;
$greenPercentage = max( $R, $G, $B ) > 255 ? $G / max( $Rsum, $Gsum, $Bsum ) : $G / 255;
$bluePercentage = max( $R, $G, $B ) > 255 ? $B / max( $Rsum, $Gsum, $Bsum ) : $B / 255;
$redRGB = floor( 255 * $redPercentage );
$greenRGB = floor( 255 * $greenPercentage );
$blueRGB = floor( 255 * $bluePercentage );
$color = sprintf( "%02X%02X%02X", $redRGB, $greenRGB, $blueRGB );
return $addHash ? '#' . $color : $color;
}
/**
* Recursively sort an array of taxonomy terms hierarchically. Child categories will be
* placed under a 'children' member of their parent term.
* @param Array $cats taxonomy term objects to sort
* @param Array $into result array to put them in
* @param integer $parentId the current parent ID to put them in
*/
private static function sort_terms_hierarchicaly(Array &$cats, Array &$into, $parentId = 0)
{
foreach ($cats as $i => $cat) {
if ($cat->parent == $parentId) {
$into[$cat->term_id] = $cat;
unset($cats[$i]);
}
}
foreach ($into as $topCat) {
$topCat->children = array();
self::sort_terms_hierarchicaly($cats, $topCat->children, $topCat->term_id );
}
}
public static function copy_taxonomy($from_productid, $from_taxonomyname, $to_productid, $to_taxonomyname) {
$categories = wp_get_post_terms( $from_productid, $from_taxonomyname );
$categoryHierarchy = array();
self::sort_terms_hierarchicaly($categories, $categoryHierarchy );
//delete existing terms
wp_set_object_terms( $to_productid, null, $to_taxonomyname );
self::copy_taxonomy_h( $from_productid, $from_taxonomyname, $to_productid, $to_taxonomyname, $categoryHierarchy, 0 );
//get all categories for the post
$categories = wp_get_object_terms( $to_productid, $to_taxonomyname );
$default_product_cat = get_option( 'default_product_cat' );
//if there is more than one category set, check to see if one of them is the default
if ( count( $categories ) > 1 ) {
foreach ( $categories as $key => $category ) {
//if category is the default, then remove it
if ( $category->term_id == $default_product_cat ) {
wp_remove_object_terms( $to_productid, $category->term_id, $to_taxonomyname );
}
}
}
}
private static function copy_taxonomy_h($from_productid, $from_taxonomyname, $to_productid, $to_taxonomyname, $children, $parentid) {
foreach($children as $cat) {
$termid = 0;
if ( ! term_exists( $cat->name, $to_taxonomyname, $parentid ) ) {
if ( $parentid > 0 ) {
$term = wp_insert_term(
$cat->name, // the term
$to_taxonomyname, // the taxonomy
array( 'parent' => $parentid )
);
} else {
$term = wp_insert_term(
$cat->name, // the term
$to_taxonomyname // the taxonomy
);
}
if ( is_wp_error( $term ) ) {
$error_string = $term->get_error_message();
throw new Exception ( esc_html__( 'Term error (parent: ' . $parentid . '): ' . $error_string . ' - TaxonomyName: ' . $to_taxonomyname . " - Value: " . $cat->name, 'affiliate-toolkit-starter' ) );
}
$termid = intval( $term['term_id'] );
}else {
$term = null;
if ( $parentid > 0 ) {
$terms = get_term_children( $parentid, $to_taxonomyname );
foreach ( $terms as $termx ) {
$termxf = get_term_by( 'id', $termx, $to_taxonomyname );
if ( $termxf->name == $cat->name ) {
$term = $termxf;
break;
}
}
} else {
$term = get_term_by( 'name', $cat->name, $to_taxonomyname );
}
if($term != null) {
$termid = $term->term_id;
}
}
if ( $termid > 0 ) {
$term_taxonomy_ids = wp_set_object_terms( $to_productid, $termid, $to_taxonomyname, true );
if ( isset( $cat->children ) && count($cat->children) > 0) {
self::copy_taxonomy_h( $from_productid, $from_taxonomyname, $to_productid, $to_taxonomyname, $cat->children, $termid );
}
}
}
}
public static function check_taxonomy( $post_id, $taxonomyName, $taxonomyValue, $hierchical_mode = true ) {
if ( $taxonomyValue == '' || $taxonomyValue == null ) {
wp_set_object_terms( $post_id, null, $taxonomyName );
return;
}
$taxonomyValues = array();
if ( $hierchical_mode && ! is_array( $taxonomyValue ) ) {
$taxonomyValues = explode( ',', $taxonomyValue );
} else if ( ! is_array( $taxonomyValue ) ) {
array_push( $taxonomyValues, $taxonomyValue );
} else {
$taxonomyValues = $taxonomyValue;
}
$taxonomyValues = array_map( 'trim', $taxonomyValues );
$cat_ids = array();
$parent_id = - 1;
foreach ( $taxonomyValues as $taxonomyValue ) {
if ( $taxonomyValue == '' ) {
continue;
}
$termid = - 1;
if ( ! term_exists( $taxonomyValue, $taxonomyName, $parent_id == - 1 ? null : $parent_id ) ) {
if ( $parent_id >= 0 ) {
$term = wp_insert_term(
$taxonomyValue, // the term
$taxonomyName, // the taxonomy
array( 'parent' => $parent_id )
);
} else {
$term = wp_insert_term(
$taxonomyValue, // the term
$taxonomyName // the taxonomy
);
}
if ( is_wp_error( $term ) ) {
$error_string = $term->get_error_message();
return;
//throw new Exception ( 'Term error (parent: ' . $parent_id . '/' . $hierchical_mode . '): ' . $error_string . ' - TaxonomyName: ' . $taxonomyName . " - Value: " . $taxonomyValue );
}
$termid = intval( $term['term_id'] );
} else {
$term = null;
if ( $parent_id >= 0 ) {
$terms = get_term_children( $parent_id, $taxonomyName );
foreach ( $terms as $termx ) {
$termxf = get_term_by( 'id', $termx, $taxonomyName );
if ( $termxf->name == $taxonomyValue || $termxf->slug == $taxonomyValue ) {
$term = $termxf;
break;
}
}
}
if ( $term == null ) {
$term = get_term_by( 'name', $taxonomyValue, $taxonomyName );
if ( ! $term ) {
$term = get_term_by( 'slug', $taxonomyValue, $taxonomyName );
}
}
if ( $term ) {
$termid = $term->term_id;
} //term_taxonomy_id
}
if ( $termid != - 1 ) {
array_push( $cat_ids, $termid );
if ( ! $hierchical_mode ) {
$parent_id = $termid;
}
}
}
$cat_ids = array_map( 'intval', $cat_ids );
$cat_ids = array_unique( $cat_ids );
if ( count( $cat_ids ) > 0 ) {
$term_taxonomy_ids = wp_set_object_terms( $post_id, $cat_ids, $taxonomyName, false );
if ( is_wp_error( $term_taxonomy_ids ) ) {
$error_string = $term_taxonomy_ids->get_error_message();
return;
//throw new Exception ( 'Term error: ' . $error_string . ' - TaxonomyName: ' . $taxonomyName . " - IDs: " . serialize( $cat_ids ) );
// There was an error somewhere and the terms couldn't be set.
//TODO: logging
} else {
// Success! These categories were added to the post.
}
}
}
public static function add_global_scripts( $name ) {
$output = new atkp_output();
$custom_js = $output->get_js_output();
wp_add_inline_script( $name, $custom_js );
}
public static function write_global_scripts() {
$output = new atkp_output();
$custom_js = $output->get_js_output();
self::write_file( $custom_js, 'scripts.js' );
}
public static function write_global_styles() {
if ( atkp_options::$loader->get_css_inline() == atkp_css_type::CssFile || atkp_options::$loader->get_css_inline() == atkp_css_type::Inline ) {
$output = new atkp_output();
$custom_js = $output->get_css_output();
self::write_file( $custom_js, 'styles.css' );
} else {
self::delete_file( 'styles.css' );
}
}
public static function get_global_style_url() {
return self::get_file( 'styles.css' );
}
public static function get_global_script_url() {
return self::get_file( 'scripts.js' );
}
public static function get_file( $name ) {
$upload_dir = wp_upload_dir();
if ( empty( $upload_dir['basedir'] ) ) {
return null;
}
$user_dirname = $upload_dir['basedir'] . '/affiliate-toolkit';
if ( ! file_exists( $user_dirname ) ) {
return null;
}
$user_filename = $user_dirname . '/' . $name;
if ( ! file_exists( $user_filename ) ) {
return null;
}
return $upload_dir['baseurl'] . '/affiliate-toolkit' . '/' . $name;
}
public static function get_uploaddir( $subfolder = '' ) {
$upload_dir = wp_upload_dir();
if ( ! empty( $upload_dir['basedir'] ) ) {
$user_dirname = $upload_dir['basedir'] . '/affiliate-toolkit' . ( $subfolder != '' ? '/' . $subfolder : '' );
if ( ! file_exists( $user_dirname ) ) {
wp_mkdir_p( $user_dirname );
}
}
return $user_dirname;
}
public static function delete_file( $name ) {
try {
$user_dirname = self::get_uploaddir();
if ( file_exists( $user_dirname . '/' . $name ) ) {
unlink( $user_dirname . '/' . $name );
}
} catch ( Exception $e ) {
}
}
public static function write_file( $content, $name ) {
try {
$user_dirname = self::get_uploaddir();
file_put_contents( $user_dirname . '/' . $name, $content );
} catch ( Exception $e ) {
}
}
public static function add_column( $post_types, $label, $callback, $priority = 10 ) {
if ( ! is_array( $post_types ) ) {
$post_types = array( $post_types );
}
foreach ( $post_types as $post_type ) {
$filter_name = 'manage_' . $post_type . '_posts_columns';
add_filter( $filter_name, function ( $columns ) use ( $label, $priority ) {
$key = sanitize_title( $label );
$col = array( $key => $label );
if ( $priority < 0 ) {
return array_merge( $col, $columns );
} else if ( $priority > count( $columns ) ) {
return array_merge( $columns, $col );
} else {
$offset = $priority;
$sorted = array_slice( $columns, 0, $offset, true ) + $col + array_slice( $columns, $offset, null, true );
return $sorted;
}
}, $priority );
add_action( 'manage_' . $post_type . '_posts_custom_column', function ( $col, $pid ) use ( $label, $callback ) {
$key = sanitize_title( $label );
if ( $col == $key ) {
$callback( $pid );
}
}, $priority, 2 );
}
}
public static function show_notification( $text, $class = 'updated', $type = 'info' ) {
if ( $class == 'yellow' ) {
$class = 'updated';
}
if ( $class == 'red' ) {
$class = 'error';
}
if ( $class == 'blue' ) {
$class = 'notice';
}
echo( '' );
}
public static function get_siteurl() {
$url = 'unknown';
if ( is_multisite() ) {
$url = network_site_url();
} else {
$url = site_url();
}
return $url;
}
public static function get_endpointurl() {
$url = admin_url( 'admin-ajax.php' );
return $url;
}
public static function exists_get_parameter( $key ) {
return isset( $_GET[ $key ] );
}
public static function get_get_parameter( $key, $type ) {
$parametervalue = null;
if ( isset( $_GET[ $key ] ) ) {
$parametervalue = $_GET[ $key ];
}
return ATKPTools::get_casted_value( $parametervalue, $type );
}
public static function exists_post_parameter( $key ) {
return isset( $_POST[ $key ] );
}
public static function get_post_parameter( $key, $type ) {
$parametervalue = null;
if ( isset( $_POST[ $key ] ) ) {
$parametervalue = $_POST[ $key ];
}
return ATKPTools::get_casted_value( $parametervalue, $type );
}
public static function get_casted_value( $parametervalue, $type ) {
switch ( $type ) {
case 'bool':
if ( $parametervalue == null || $parametervalue == '' ) {
return false;
} else {
//hack for older versions than 5.5
if ( function_exists( 'boolval' ) ) {
return boolval( $parametervalue );
} else {
return (bool) $parametervalue;
}
}
break;
case 'intarray':
if ( $parametervalue == null || ! is_array( $parametervalue ) ) {
return 0;
} else {
return array_map( 'intval', $parametervalue );
}
break;
case 'int':
if ( $parametervalue == null || $parametervalue == '' ) {
return 0;
} else {
return intval( $parametervalue );
}
break;
case 'double':
if ( $parametervalue == null || $parametervalue == '' ) {
return 0;
} else {
return floatval( $parametervalue );
}
break;
case 'stringarray':
if ( $parametervalue == null || ! is_array( $parametervalue ) ) {
return 0;
} else {
return array_map( 'sanitize_text_field', $parametervalue );
}
break;
case 'string':
if ( $parametervalue == null || $parametervalue == '' ) {
return '';
} else {
return sanitize_text_field( $parametervalue );
}
break;
case 'multistring2':
case 'multistring':
if ( $parametervalue == null || $parametervalue == '' ) {
return '';
} else {
return implode( "\n", array_map( 'sanitize_text_field', (array) explode( "\n", (string) $parametervalue ) ) );
}
break;
case 'allhtml':
if ( $parametervalue == null || $parametervalue == '' ) {
return '';
} else {
return ( $parametervalue );
}
break;
case 'html':
if ( $parametervalue == null || $parametervalue == '' ) {
return '';
} else {
return wp_kses_post( $parametervalue );
}
break;
case 'url':
if ( $parametervalue == null || $parametervalue == '' ) {
return '';
} else {
/*
return strip_tags(
stripslashes(
filter_var($parametervalue, FILTER_VALIDATE_URL)
)
);*/
return $parametervalue; //sanitize_text_field( $parametervalue );
}
break;
default:
throw new exception( esc_html__( 'type unkown: ' . $type, 'affiliate-toolkit-starter' ) );
}
}
public static function get_time( $time, $type, $gmt = 0 ) {
switch ( $type ) {
case 'mysql':
return ( $gmt ) ? gmdate( $time, 'Y-m-d H:i:s' ) : gmdate( $time, 'Y-m-d H:i:s', ( time() + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) ) );
case 'timestamp':
return ( $gmt ) ? $time : $time + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS );
default:
return ( $gmt ) ? date( $time, $type ) : date( $time, $type, $time + ( get_option( 'gmt_offset' ) * HOUR_IN_SECONDS ) );
}
}
private static $post_meta_cache = array();
/**
* Lädt ein Metafield von einem Post mit Cache-Unterstützung
*
* @param int $post_id Die Post-ID von welchem das Metafield geladen werden soll
* @param string $key Der Name des Metafields
* @param mixed $default_value Der Standardwert, falls das Metafield nicht existiert
*
* @return mixed Der Wert des Metafields
*/
public static function get_post_setting( $post_id, $key, $default_value = '' ) {
// Überprüfen, ob der Cache für diesen Post bereits existiert
if ( ! isset( self::$post_meta_cache[ $post_id ] ) ) {
global $wpdb;
// Alle Metafelder auf einmal abrufen ohne LIKE-Filter
$query = $wpdb->prepare(
"SELECT meta_key, meta_value FROM {$wpdb->postmeta}
WHERE post_id = %d",
$post_id
);
$results = $wpdb->get_results( $query );
// Cache für diesen Post initialisieren
self::$post_meta_cache[ $post_id ] = array();
// Nur die relevanten Ergebnisse in den Cache laden
$prefix = ATKP_PLUGIN_PREFIX;
$prefix_length = strlen( $prefix );
if ( $results ) {
foreach ( $results as $row ) {
// Im PHP-Code auf das Präfix prüfen
if ( strtolower( substr( $row->meta_key, 0, $prefix_length ) ) === strtolower( $prefix ) ) {
self::$post_meta_cache[ $post_id ][ $row->meta_key ] = maybe_unserialize( $row->meta_value );
}
}
}
}
// Wert aus dem Cache zurückgeben oder Standardwert, falls nicht vorhanden
if ( isset( self::$post_meta_cache[ $post_id ][ $key ] ) ) {
return self::$post_meta_cache[ $post_id ][ $key];
} else {
return ''; //$default_value;
}
}
/**
* Schreibt ein Metafield von einem Post und aktualisiert den Cache
*
* @param int $post_id Die Post-ID von welchem das Metafield geladen werden soll
* @param string $key Der Name des Metafields
* @param mixed $value Der Wert des Metafields
*/
public static function set_post_setting( $post_id, $key, $value ) {
// Bestehenden Metawert löschen
delete_post_meta( $post_id, $key );
// Neuen Wert hinzufügen, wenn nicht null
if ( $value !== null ) {
add_post_meta( $post_id, $key, $value );
// Cache aktualisieren, falls er existiert
if ( isset( self::$post_meta_cache[ $post_id ] ) ) {
self::$post_meta_cache[ $post_id ][ $key ] = $value;
}
} else {
// Wenn der Wert null ist und der Cache existiert, den Eintrag aus dem Cache entfernen
if ( isset( self::$post_meta_cache[ $post_id ] ) && isset( self::$post_meta_cache[ $post_id ][ $key ] ) ) {
unset( self::$post_meta_cache[ $post_id ][ $key ] );
}
}
}
/**
* Cache für einen bestimmten Post oder den gesamten Cache leeren
*
* @param int|null $post_id Optional: Die Post-ID, deren Cache geleert werden soll (null für gesamten Cache)
*/
public static function clear_post_settings_cache( $post_id = null ) {
if ( $post_id === null ) {
self::$post_meta_cache = array();
} else if ( isset( self::$post_meta_cache[ $post_id ] ) ) {
unset( self::$post_meta_cache[ $post_id ] );
}
}
public static function set_setting( $key, $value ) {
delete_option( $key );
add_option( $key, $value );
}
public static function get_setting( $key, $defaultvalue = null ) {
// Wenn es eine Plugin-Option ist, Cache verwenden
if ( strpos( $key, ATKP_PLUGIN_PREFIX . '_' ) === 0 ) {
$option_name = str_replace( ATKP_PLUGIN_PREFIX , '', $key );
return ATKPOptionsCache::get_option( $option_name, $defaultvalue );
}
// Für andere Optionen direkt aus DB
$value = get_option( $key );
return isset( $value ) ? $value : $defaultvalue;
}
public static function delete_all_options() {
global $wpdb;
$plugin_options = $wpdb->get_results( "SELECT option_name FROM $wpdb->options WHERE option_name LIKE '" . ATKP_PLUGIN_PREFIX . "_%'" );
foreach ( $plugin_options as $option ) {
delete_option( $option->option_name );
}
}
public static function substrwords( $text, $maxchar, $end = '...' ) {
if ( strlen( $text ) > $maxchar || $text == '' ) {
$words = preg_split( '/\s/', $text );
$output = '';
$i = 0;
while ( 1 ) {
$length = strlen( $output ) + strlen( $words[ $i ] );
if ( $length > $maxchar ) {
break;
} else {
$output .= " " . $words[ $i ];
++ $i;
}
}
$output .= $end;
} else {
$output = $text;
}
return $output;
}
public static function str_shorten( $string, $max_length, $suffix = '' ) {
if ( strlen( $string ) > $max_length ) {
return substr( $string, 0, $max_length ) . $suffix;
}
return $string;
}
public static function str_contains( $string, $searchstring, $caseSensitive = true ) {
if ( $caseSensitive ) {
if ( strpos( $string, $searchstring ) !== false ) {
return true;
} else {
return false;
}
} else {
if ( stripos( $string, $searchstring ) !== false ) {
return true;
} else {
return false;
}
}
}
public static function startsWith( $haystack, $needle ) {
// search backwards starting from haystack length characters from the end
return $needle === "" || strrpos( $haystack, $needle, - strlen( $haystack ) ) !== false;
}
public static function price_to_float( $s ) {
//$s = str_replace( ',', '.', $s );
// remove everything except numbers and dot "."
//$s = preg_replace( "/[^0-9\.]/", "", $s );
// remove all seperators from first part and keep the end
//$s = str_replace( '.', '', substr( $s, 0, - 3 ) ) . substr( $s, - 3 );
$f = self::strToFloat( $s ); //(float) $s
// return float
return round( $f, 2 );
}
private static function strToFloat( $str ) {
$str = preg_replace( "/[^0-9.,]/", "", $str );
$str = preg_replace( '[^0-9\,\.\-\+]', '', strval( $str ) );
$str = strtr( $str, ',', '.' );
$pos = strrpos( $str, '.' );
return ( $pos === false ? floatval( $str ) : floatval( str_replace( '.', '', substr( $str, 0, $pos ) ) . substr( $str, $pos ) ) );
}
public static function clear_string( $string ) {
if ( $string == '' ) {
return '';
}
// Strip HTML Tags
$clear = strip_tags( $string );
// Clean up things like &
//$clear = html_entity_decode( $clear );
// Strip out any url-encoded stuff
$clear = urldecode( $clear );
// Replace non-AlNum characters with space
//$clear = preg_replace('/[^A-Za-z0-9(),]/', ' ', $clear);
// Replace Multiple spaces with single space
$clear = preg_replace( '/ +/', ' ', $clear );
// Trim the string of leading/trailing space
$clear = trim( $clear );
$clear = str_replace( '\'', '', $clear );
$clear = str_replace( ' ', ' ', $clear );
$umlaute = array(
"Ö" => "Ö",
"ö" => "ö",
"Ä" => "Ä",
"ä" => "ä",
"Ü" => "Ü",
"ü" => "ü",
"ß" => "ß",
);
foreach ( $umlaute as $html => $umlaut ) {
$clear = str_replace( $html, $umlaut, $clear );
}
return $clear;
}
public static function casttoclass( $class, $object ) {
return unserialize( preg_replace( '/^O:\d+:"[^"]++"/', 'O:' . strlen( $class ) . ':"' . $class . '"', serialize( $object ) ) );
}
public static function get_currenttime() {
return time();
}
public static function get_client_ip_address() {
if ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
$address = $_SERVER['HTTP_CLIENT_IP'];
} elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
$address = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$address = $_SERVER['REMOTE_ADDR'];
}
return $address;
}
public static function get_user_agent() {
$agents = array(
#Chrome
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36',
'Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36',
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36',
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
#Firefox
'Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)',
'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)',
'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)',
'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)',
'Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)',
'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)',
'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)'
);
$agent = array_rand( $agents, 1 );
return $agent;
}
/**
* Get table charset and collation.
*
* @return string
* @since 2012.10.22
*/
public static function get_wp_charset_collate() {
global $wpdb;
$charset_collate = '';
if ( ! empty ( $wpdb->charset ) ) {
$charset_collate = "DEFAULT CHARACTER SET $wpdb->charset";
}
if ( ! empty ( $wpdb->collate ) ) {
$charset_collate .= " COLLATE $wpdb->collate";
}
return $charset_collate;
}
public static function get_attached_filters( $hook, $format = false ) {
global $wp_filter;
if ( empty( $hook ) || ! isset( $wp_filter[ $hook ] ) ) {
return '';
}
$array_names = array();
foreach ( $wp_filter[ $hook ]->callbacks as $prio => $function ) {
foreach ( $function as $nam => $f ) {
$array_names[] = $f['function'];
}
}
return $format ? ( '' . print_r( $array_names, true ) . '
' ) : $array_names;
}
public static function get_plugin_name_from_callable( $callable ) {
try {
if ( is_array( $callable ) && count( $callable ) === 2 ) {
// Array mit [Objekt/Klasse, Methode]
$reflection = new ReflectionMethod( $callable[0], $callable[1] );
} elseif ( is_string( $callable ) ) {
// Funktionsname als String
$reflection = new ReflectionFunction( $callable );
} elseif ( $callable instanceof Closure ) {
// Closure
$reflection = new ReflectionFunction( $callable );
} else {
return 'unknown';
}
$filename = $reflection->getFileName();
// Extrahiere Plugin-Namen aus dem Dateipfad
// Annahme: Datei liegt in wp-content/plugins/plugin-name/...
if ( preg_match( '#/plugins/([^/]+)/#', $filename, $matches ) ) {
return $matches[1];
}
return 'unknown';
} catch ( Exception $e ) {
return 'unknown';
}
}
public static function get_plugins_for_hook( $hook_name ) {
global $wp_filter;
if ( ! isset( $wp_filter[ $hook_name ] ) ) {
return array();
}
$plugins = array();
foreach ( $wp_filter[ $hook_name ]->callbacks as $priority => $callbacks ) {
foreach ( $callbacks as $callback ) {
$plugin_name = ATKPTools::get_plugin_name_from_callable( $callback['function'] );
if ( $plugin_name !== 'unknown' && ! in_array( $plugin_name, $plugins ) ) {
$plugins[] = $plugin_name;
}
}
}
return $plugins;
}
public static function get_plugin_name_from_object($object) {
if (!is_object($object)) {
return 'unknown';
}
try {
$reflection = new ReflectionClass($object);
$filename = $reflection->getFileName();
// Extrahiere Plugin-Namen aus dem Dateipfad
if (preg_match('#/plugins/([^/]+)/#', $filename, $matches)) {
return $matches[1];
}
return 'unknown';
} catch (Exception $e) {
return 'unknown';
}
}
public static function is_license_active_for_plugin( $plugin_name ) {
if ( ! isset( atkp_options::$loader->edd_plugin_data ) || empty( atkp_options::$loader->edd_plugin_data ) ) {
return true; // Keine Lizenzprüfung erforderlich
}
// Suche die Modul-ID anhand des Plugin-Slugs
$module_id = null;
foreach ( atkp_options::$loader->edd_plugin_data as $slug => $appdata ) {
if ( strpos( $plugin_name, $slug ) !== false ) {
$module_id = $appdata['item_id'];
break;
}
}
if ( $module_id === null ) {
return true; // Plugin nicht in edd_plugin_data -> keine Lizenzprüfung
}
$modules = ATKP_LicenseController::get_modules();
foreach ( $modules as $moduleid => $modulename ) {
if($moduleid != $module_id)
continue;
$license = ATKP_LicenseController::get_module_license( $modulename );
if ( $license == '' ) {
return false;
}
$license_status = ATKP_LicenseController::get_module_license_status( $modulename );
return $license_status === 'valid';
}
return true; // Standardmäßig gültig
}
}