prefix;
$table_name = $wpdb->prefix . 'acf_Feeders';
$base_path = '/'.get_option('access-code-feeder-base-url','feeder').'/';
if( strpos($_SERVER["REQUEST_URI"],$base_path) === 0 ) { //our url
header("X-Robots-Tag: noindex, nofollow", true);
$s_url = str_replace($base_path,'',$_SERVER["REQUEST_URI"]);
$r_url = trim($s_url,'/'); //remove last slash if present
$url_params = explode('/',$r_url);
$feeder_key = $url_params[0];
$sql_rows = $wpdb->prepare("SELECT `id`,`key`,`wp_owner_id`,`content`,`options` FROM $table_name WHERE `key` = %s ",array($feeder_key));
$rows = $wpdb->get_results($sql_rows);
if($rows === FALSE){wp_die('Database Error on Feeder Fetch');}
if(!isset($rows[0])){die('');} //key is not in the DB - simulate empty feeder
$row = $rows[0];
$id = $row->id;
$content = $row->content;
$wp_owner_id = $row->wp_owner_id;
$a_options = json_decode($row->options,true);
$a_codes = explode(PHP_EOL,$content);
$count_codes = count($a_codes);
if($a_codes[0] == ''){ //explode on empty string still returns array
$count_codes = 0;
}
if(count($url_params) === 1){
if($count_codes > 0){
if($a_options['feeder_mode'] == 'TR'){
if( ($count_codes - 1) == ($a_options['feeder_limit']) ){ //to prevent triggering on 0 several times
$this->notify_feeder_owner_on_low_count($wp_owner_id,$a_options['feeder_name'],$a_options['feeder_location'],$a_options['feeder_limit']);
}
$top_item = array_shift($a_codes);
echo(stripslashes($top_item));
$content = implode(PHP_EOL,$a_codes);
}//TR
if($a_options['feeder_mode'] == 'RR'){
$rand_key = array_rand($a_codes, 1);
$rand_item = $a_codes[$rand_key];
if( ($count_codes - 1) == ($a_options['feeder_limit']) ){ //to prevent triggering on 0 several times
$this->notify_feeder_owner_on_low_count($wp_owner_id,$a_options['feeder_name'],$a_options['feeder_location'],$a_options['feeder_limit']);
}
unset( $a_codes[$rand_key]);
echo(stripslashes($rand_item));
$content = implode(PHP_EOL,$a_codes);
}//RR
if($a_options['feeder_mode'] == 'RK'){
$rand_key = array_rand($a_codes, 1);
$rand_item = $a_codes[$rand_key];
echo(stripslashes($rand_item));
$content = implode(PHP_EOL,$a_codes);
}//RR
$sql_update = $wpdb->prepare("UPDATE $table_name SET `content` = %s WHERE `id` = %d",array($content,$id));
if($wpdb->query($sql_update) === FALSE){wp_die('Database Error updating Feeder' );}
}else{
echo(""); //no items left
}
exit();
}else{//url has extra parts
if($url_params [1] == 'COUNT'){
if(strlen($a_codes[0]) > 0){
echo($count_codes);
}else{
echo('0');
}
exit();
}
}
exit(); //we always exit here
}//our URL
}//serve_feeder
function add_settings_link( $links ) {
$img = '
';
$settings_link = '' . $img . __( 'Settings' ) . '';
array_unshift($links , $settings_link);
return $links;
}//add_settings_link()
function notify_feeder_owner_on_low_count($wp_owner_id,$feeder_name,$feeder_edit_url,$feeder_limit){
$user_info = get_userdata($wp_owner_id);
$current_locale = get_locale(); //gotta switch back after email is sent
$feeder_owner_locale = get_user_locale($wp_owner_id); //gotta send email in language of bond owner
switch_to_locale($feeder_owner_locale);
$user_name = $user_info->display_name;
$user_email = $user_info->user_email;
$site_title = get_bloginfo('name');
$site_email = get_bloginfo('admin_email');
$site_description = get_bloginfo('description');
$site_url = get_bloginfo('url');
$email_text = __(" Hello %%USERNAME%%
Feeder '%%FEEDERNAME%%' now has %%CODECOUNT%% access codes left.
You've received this email because the Feeder is configured to notify the owner on low content count.
Have a nice day!
%%SITENAME%%
", 'access-code-feeder' );
$email_text = str_replace('%%USERNAME%%',$user_name,$email_text);
$email_text = str_replace('%%FEEDERNAME%%',$feeder_name,$email_text);
$email_text = str_replace('%%CODECOUNT%%',$feeder_limit,$email_text);
$email_text = str_replace('%%CONFIGURL%%',$feeder_edit_url,$email_text);
$email_text = str_replace('%%SITENAME%%',$site_description,$email_text);
$email_text = str_replace('%%SITEURL%%',$site_url,$email_text);
$email_subject = __("Feeder '%%FEEDERNAME%%' requires attention !", 'access-code-feeder' );
$email_subject = str_replace('%%FEEDERNAME%%',$feeder_name,$email_subject);
$headers = array(
'content-type: text/html', //must have
);
add_filter( 'wp_mail_from_name', array( $this, 'email_replace_name_from' ));
wp_mail( $user_email, $email_subject, $email_text , $headers );
remove_filter( 'wp_mail_from_name', array( $this, 'email_replace_name_from' ));
switch_to_locale($current_locale); //return to normal
}//notify_feeder_owner_on_low_count
function email_replace_name_from($from_name){
return get_bloginfo('name'); //replace "WordPress" to site name. Headers do not work for some servers
}
function init() {
load_plugin_textdomain( 'access-code-feeder', FALSE, basename( dirname( __FILE__ ) ) . '/languages' );
}
function load_plugin_textdomain(){
// load_plugin_textdomain( 'access-code-feeder', FALSE, basename( dirname( __FILE__ ) ) . '/languages' );
}
function prepare_db_tables(){
global $wpdb;
$db_prefix = $wpdb->prefix;
$charset_collate = $wpdb->get_charset_collate();
$create_table_feeders_sql = "CREATE TABLE IF NOT EXISTS `".$db_prefix."acf_Feeders` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`wp_owner_id` INT(11) unsigned NOT NULL,
`key` VARCHAR(100) NOT NULL DEFAULT 1,
`options` VARCHAR(4096) NOT NULL DEFAULT '',
`content` MEDIUMTEXT NOT NULL DEFAULT '',
`created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `feeder_key` (`key`)
)";
$wpdb->show_errors();
if($wpdb->query($create_table_feeders_sql) === FALSE){wp_die();}
}//prepare_db_tables
function admin_init() {
register_setting( 'Access_Code_Feeder_Options', 'access-code-feeder-base-url' );
$this->prepare_db_tables();
}
function admin_menu() {
add_options_page( __( 'Access Code Feeder', 'access-code-feeder' ), __( 'Access Code Feeder', 'access-code-feeder' ), 'manage_options', 'access-code-feeder', array( $this, 'render_options' ) );
}
public function enqueue_scripts_and_styles(){
wp_enqueue_style('messagebox-css', plugin_dir_url(__FILE__) . 'assets/messagebox.css');
wp_enqueue_script( 'messagebox-js', plugin_dir_url(__FILE__) . 'assets/messagebox.js');
wp_enqueue_style('access-code-feeder-css', plugin_dir_url(__FILE__) . 'assets/accesscodefeeder.css');
wp_enqueue_script('access-code-feeder-js', plugin_dir_url(__FILE__) . 'assets/accesscodefeeder.js');
}//enqueue_scripts_and_styles()
public function bootstrap_scripts_and_styles(){
wp_register_style( 'bootstrap.min', plugin_dir_url(__FILE__) . 'assets/bootstrap.min.css' );
wp_enqueue_style('bootstrap.min');
wp_register_script( 'bootstrap.min', plugin_dir_url(__FILE__) . 'assets/bootstrap.min.js' );
wp_enqueue_script('bootstrap.min');
}//bootstrap_scripts_and_styles()
function render_options() {
echo('
' ); _e( 'Use Feeders to pass unique access code to chat bots, merchant software, etc.', 'access-code-feeder' ) ; echo( ' ' ); _e( 'Watch Video', 'access-code-feeder' ) ; echo( '
' ); $this->render_base_url(); $this->render_feeders(); } function render_base_url() { echo(''.__('Feeder Name', 'access-code-feeder').' | ';
$ret .= ''.__('Mode', 'access-code-feeder').' | ';
$ret .= ''.__('Items', 'access-code-feeder').' | ';
$ret .= ''.__('Actions', 'access-code-feeder').' | ';
$ret .= '