here to configure.', 'adsnipp' ));
/**
* $adsnipp_db_version - current database version
* and used on plugin update to sync database tables
*/
global $adsnipp_db_version;
$adsnipp_db_version = '1.0';
/**
* register_activation_hook implementation
*
* creaing db tables on plugin activation
*/
function adsnipp_install()
{
global $wpdb;
global $adsnipp_db_version;
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
$found_tables = $wpdb->get_col("SHOW TABLES LIKE '{$wpdb->prefix}adsnipp%';");
if(!in_array("{$wpdb->prefix}adsnipp_ads", $found_tables)) {
$sql = "CREATE TABLE `{$wpdb->prefix}adsnipp_ads` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`network` VARCHAR(100) NOT NULL,
`platform` VARCHAR(10) NOT NULL,
`script` TEXT NOT NULL,
`published` TINYINT(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
);";
dbDelta($sql);
}
if(!in_array("{$wpdb->prefix}adsnipp_stats", $found_tables)) {
$sql = "CREATE TABLE `{$wpdb->prefix}adsnipp_stats` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`ad_id` INT(11) NOT NULL,
`day` INT(15) NOT NULL DEFAULT '0',
`impressions` INT(11) NOT NULL DEFAULT '0',
`clicks` INT(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
INDEX `ad_id` (`ad_id`),
INDEX `day` (`day`)
);";
dbDelta($sql);
}
// save current database version for later use (on upgrade)
add_option('adsnipp_db_version', $adsnipp_db_version);
}
register_activation_hook(__FILE__, 'adsnipp_install');
/**
* Trick to update plugin database
*/
function adsnipp_update_db_check()
{
global $adsnipp_db_version;
if (get_site_option('adsnipp_db_version') != $adsnipp_db_version) {
adsnipp_install();
}
}
add_action('plugins_loaded', 'adsnipp_update_db_check');
if ( is_admin() ) {
//Including class for displaying records
require_once ADSNIPP_PATH . 'includes/class-adsnipp-list-table.php';
require_once ADSNIPP_PATH . 'includes/class-adsnipp-api.php';
// Add admin notices.
add_action('admin_notices', 'adsnipp_admin_notices');
} else {
add_action("wp_enqueue_scripts", 'adsnipp_custom_scripts');
}
/**
* Administration
*/
/**
* admin_menu hook implementation, will add pages to list ads and to add new one
*/
function adsnipp_admin_menu()
{
add_menu_page(__('AdSnipp', 'adsnipp'), __('AdSnipp', 'adsnipp'), 'activate_plugins', 'adsnipp', 'adsnipp_stats_page_handler', ADSNIPP_URL . 'includes/images/menu-icon.png');
add_submenu_page('adsnipp', __('Stats', 'adsnipp'), __('Stats', 'adsnipp'), 'activate_plugins', 'adsnipp', 'adsnipp_stats_page_handler');
add_submenu_page('adsnipp', __('My Ads', 'adsnipp'), __('My Ads', 'adsnipp'), 'activate_plugins', 'adsnipp_ads', 'adsnipp_ads_page_handler');
}
add_action('admin_menu', 'adsnipp_admin_menu');
/**
* Stats page handler
*/
function adsnipp_stats_page_handler()
{
global $wpdb;
$stats = array();
//Yesterday stats
$yesterday = strtotime('yesterday midnight');
$stats['yesterday']['impressions'] = $wpdb->get_var("SELECT SUM(`impressions`) FROM {$wpdb->prefix}adsnipp_stats WHERE `day` = " . $yesterday);
$stats['yesterday']['impressions'] = $stats['yesterday']['impressions'] ? $stats['yesterday']['impressions'] : 0;
$stats['yesterday']['clicks'] = $wpdb->get_var("SELECT SUM(`clicks`) FROM {$wpdb->prefix}adsnipp_stats WHERE `day` = " . $yesterday);
$stats['yesterday']['clicks'] = $stats['yesterday']['clicks'] ? $stats['yesterday']['clicks'] : 0;
//Last 8 days stats
$from = strtotime('today midnight') - 7 * 86400;
$stats['8days']['desktop'] = $wpdb->get_results("SELECT s.ad_id, a.title, SUM(clicks) AS total_clicks,
SUM(impressions) AS total_impressions, SUM(clicks+ impressions ) AS total
FROM wp_adsnipp_stats AS s
JOIN wp_adsnipp_ads AS a ON s.ad_id = a.id
WHERE a.platform = 'Desktop' AND s.day >= " . $from . "
GROUP BY ad_id
ORDER BY total DESC
LIMIT 5");
$stats['8days']['mobile'] = $wpdb->get_results("SELECT s.ad_id, a.title, SUM(clicks) AS total_clicks,
SUM(impressions) AS total_impressions, SUM(clicks+ impressions ) AS total
FROM wp_adsnipp_stats AS s
JOIN wp_adsnipp_ads AS a ON s.ad_id = a.id
WHERE a.platform = 'Mobile' AND s.day >= " . $from . "
GROUP BY ad_id
ORDER BY total DESC
LIMIT 5");
?>
|
|
|
' . $ad->title . '
|
' . ($ad->total_impressions ? $ad->total_impressions : 0). '
|
' . ($ad->total_clicks ? $ad->total_clicks : 0). '
|
';
}
} else {
echo '
|
No stats found.
|
';
}
?>
prepare_items();
$message = '';
if ('on' === $table->current_action()) {
$message = '' . sprintf(__('Items On: %d', 'adsnipp'), count($_REQUEST['id'])) . '
';
} else if ('off' === $table->current_action()) {
$message = '' . sprintf(__('Items Off: %d', 'adsnipp'), count($_REQUEST['id'])) . '
';
} else if ('delete' === $table->current_action()) {
$message = '' . sprintf(__('Items deleted: %d', 'adsnipp'), count($_REQUEST['id'])) . '
';
}
?>
prefix . 'adsnipp_ads';
$message = '';
$notice = '';
// default $item
$default = array(
'id' => 0,
'title' => '',
'platform' => '',
'network' => '',
'script' => '',
'published' => 0,
);
if (wp_verify_nonce($_REQUEST['nonce'], basename(__FILE__))) {
$_REQUEST = stripslashes_deep( $_REQUEST );
if (isset($_REQUEST['title'])) {
$_REQUEST['title'] = htmlspecialchars(trim($_REQUEST['title']), ENT_QUOTES);
}
if (isset($_REQUEST['network'])) {
$_REQUEST['network'] = htmlspecialchars(trim($_REQUEST['network']), ENT_QUOTES);
}
if (isset($_REQUEST['script'])) {
$_REQUEST['script'] = htmlspecialchars(trim($_REQUEST['script'], "\t\n "), ENT_QUOTES);
}
$item = shortcode_atts($default, $_REQUEST);
$item_valid = adsnipp_validate_ad($item);
if ($item_valid === true) {
if ($item['id'] == 0) {
$result = $wpdb->insert($table_name, $item);
$item['id'] = $wpdb->insert_id;
if ($result) {
$message = __('Ad was successfully saved', 'adsnipp');
if (!get_option('adsnipp_registered')) {
adsnipp_register();
}
} else {
$notice = __('There was an error while saving ad', 'adsnipp');
}
} else {
$result = $wpdb->update($table_name, $item, array('id' => $item['id']));
if ($result) {
$message = __('Ad was successfully updated', 'adsnipp');
} else {
$notice = __('There was an error while updating ad', 'adsnipp');
}
}
} else {
$notice = $item_valid;
}
}
else {
$item = $default;
if (isset($_REQUEST['id'])) {
$item = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE id = %d", $_REQUEST['id']), ARRAY_A);
if (!$item) {
$item = $default;
$notice = __('Ad not found', 'adsnipp');
}
}
}
// here we adding our custom meta box
add_meta_box('ad_form_meta_box', 'Ad data', 'adsnipp_ad_form_meta_box_handler', 'ad', 'normal', 'default');
?>
', $messages);
}
}
/**
* For later
*/
/*function adsnipp_languages()
{
load_plugin_textdomain('adsnipp', false, dirname(plugin_basename(__FILE__)) . '/language');
}
add_action('init', 'adsnipp_languages');*/
/**
* Publish active ads at Desktop/Mobile incrementing impressions
*/
function adsnipp_publish_ads(){
global $wpdb;
$platform = wp_is_mobile() ? 'Mobile' : 'Desktop';
$items = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}adsnipp_ads WHERE platform = '" . $platform . "' AND published = 1");
if (count($items)) {
foreach ($items as $item) {
echo '' . htmlspecialchars_decode($item->script, ENT_QUOTES) . '
';
adsnipp_add_impression($item->id);
}
}
}
add_action('wp_head', 'adsnipp_publish_ads');
/**
* Add impressions
*/
function adsnipp_add_impression($ad_id) {
global $wpdb;
$today = strtotime('today midnight');
$stats = $wpdb->get_var($wpdb->prepare("SELECT `id` FROM {$wpdb->prefix}adsnipp_stats WHERE `ad_id` = %d AND `day` = $today;", $ad_id));
if($stats) {
$wpdb->query("UPDATE {$wpdb->prefix}adsnipp_stats SET `impressions` = `impressions` + 1 WHERE `id` = $stats;");
} else {
$wpdb->insert($wpdb->prefix.'adsnipp_stats', array('ad_id' => $ad_id, 'day' => $today, 'clicks' => 0, 'impressions' => 1));
}
}
/**
* Count impressions
*/
function adsnipp_count_impression($ad_id, $period = 'all') {
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare("SELECT SUM(`impressions`) FROM {$wpdb->prefix}adsnipp_stats WHERE `ad_id` = %d;", $ad_id));
if (!$count) {
$count = 0;
}
return $count;
}
/**
* Count clicks
*/
function adsnipp_count_clicks($ad_id, $period = 'all') {
global $wpdb;
$count = $wpdb->get_var($wpdb->prepare("SELECT SUM(`clicks`) FROM {$wpdb->prefix}adsnipp_stats WHERE `ad_id` = %d;", $ad_id));
if (!$count) {
$count = 0;
}
return $count;
}
/**
* Add clicks
*/
function adsnipp_click_callback() {
global $wpdb;
$ad_id = esc_attr($_POST['track']);
if(is_numeric($ad_id)) {
$id = $wpdb->get_var($wpdb->prepare("SELECT `id` FROM `".$wpdb->prefix."adsnipp_ads` WHERE `id` = %d;", $ad_id));
if ($id) {
$today = strtotime('today midnight');
$stats = $wpdb->get_var($wpdb->prepare("SELECT `id` FROM `".$wpdb->prefix."adsnipp_stats` WHERE `ad_id` = %d AND `day` = $today;", $ad_id));
if($stats) {
$wpdb->query("UPDATE `".$wpdb->prefix."adsnipp_stats` SET `clicks` = `clicks` + 1 WHERE `id` = $stats;");
} else {
$wpdb->insert($wpdb->prefix.'adsnipp_stats', array('ad_id' => $ad_id, 'day' => $today, 'clicks' => 1, 'impressions' => 1));
}
}
}
wp_die();
}
add_action('wp_ajax_adsnipp_click', 'adsnipp_click_callback');
/**
* Include custom scripts
*/
function adsnipp_custom_scripts() {
wp_enqueue_script('clicktrack-adsnipp', ADSNIPP_URL . 'includes/jquery.adsnipp.clicktracker.js', false, null, true);
require_once ABSPATH . 'wp-admin/includes/plugin.php';
$plugin_info = get_plugin_data(__FILE__);
$ver = $plugin_info["Version"];
$app_id = get_option('adsnipp_app_id', '') ? get_option('adsnipp_app_id', '') : '1';
wp_enqueue_script('adsnipp-csrf', 'https://www.sweetcaptcha.com/api/v2/apps/csrf/' . $app_id, array(), $ver, true);
}
/**
* Admin Notices
*/
function adsnipp_admin_notices() {
if (!get_option('adsnipp_registered')) {
echo '
' .
ADSNIPP_NOT_READY . '
';
// WP Pointers
$seen_it = explode(',', get_user_meta(get_current_user_id(), 'dismissed_wp_pointers', true));
if (!in_array('adsnipp', $seen_it)) {
adsnipp_popup_setup();
}
} else {
$api_instance = new Addsnipp_Api(get_option('adsnipp_app_id'), get_option('adsnipp_key'), get_option('adsnipp_secret'));
$api_instance->get_html();
}
}
/**
* Admin Notices Popup
*/
function adsnipp_popup_setup() {
wp_enqueue_style( 'wp-pointer' );
wp_enqueue_script( 'jquery-ui' );
wp_enqueue_script( 'wp-pointer' );
wp_enqueue_script( 'utils' );
?>
'adsnipp',
'website' => get_option('siteurl'),
'email' => get_option('admin_email'),
);
$api_instance = new Addsnipp_Api();
$result = json_decode($api_instance->submit_register_form($params), true);
if (!$result['error'] && isset($result['app_id'])) {
add_option('adsnipp_app_id', $result['app_id']);
add_option('adsnipp_key', $result['key']);
add_option('adsnipp_secret', $result['secret']);
$api_instance->registered = true;
}
}