File: D:/HostingSpaces/ERijn/knijft.eu/wwwroot/wp-content/plugins/wysija-newsletters/helpers/back.php
<?php
defined('WYSIJA') or die('Restricted access');
/**
* class managing the admin vital part to integrate wordpress
*/
class WYSIJA_help_back extends WYSIJA_help{
function __construct(){
parent::__construct();
//check that the application has been installed properly
$config=WYSIJA::get('config','model');
define('WYSIJA_DBG',(int)$config->getValue('debug_new'));
//by default do not show the errors until we get into the debug file
if(!defined('WP_DEBUG') || !WP_DEBUG){
error_reporting(0);
ini_set('display_errors', '0');
}
add_filter('admin_footer_text', array(&$this, 'admin_footer_text'));
add_filter('update_footer', array(&$this, 'update_footer'), 15);
//the controller is backend is it from our pages or from wordpress?
//are we pluging-in to wordpress interfaces or doing entirely our own page?
if(isset($_GET['page']) && substr($_GET['page'],0,7)=='wysija_'){
define('WYSIJA_ITF',TRUE);
$this->controller=WYSIJA::get(str_replace('wysija_','',$_GET['page']),'controller');
}else{//check if we are pluging in wordpress interface
define('WYSIJA_ITF',FALSE);
}
if( WYSIJA_DBG>0 ) include_once(WYSIJA_INC.'debug.php');
if(!function_exists('dbg')) {
function dbg($mixed,$exit=true){}
}
//we set up the important hooks for backend: menus js css etc
if(defined('DOING_AJAX')){
//difference between frontend and backend
add_action( 'after_setup_theme', array($this, 'ajax_setup') );
}else{
if(WYSIJA_ITF) {
add_action('admin_init', array( $this , 'verify_capability'),1);
add_action('admin_init', array($this->controller, 'main'));
add_action('after_setup_theme',array($this,'resolveConflicts'));
}
//this is a fix for qtranslate as we were loading translatable string quite early
//somehow if we add caps to one role the user with that role doesnt get its caps updated ...
add_action('after_setup_theme', array('WYSIJA', 'update_user_caps'),11);
add_action('admin_menu', array($this, 'define_translated_strings'),98);
add_action('admin_menu', array($this, 'add_menus'),99);
add_action('admin_enqueue_scripts',array($this, 'add_js'),10,1);
//add specific page script
add_action('admin_head-post-new.php',array($this,'addCodeToPagePost'));
add_action('admin_head-post.php',array($this,'addCodeToPagePost'));
//make sure that admin and super admin always have the highest access
$wptools = WYSIJA::get('wp_tools', 'helper');
$wptools->set_default_rolecaps();
// Hook the warning function for premium.
add_action( 'admin_init', array(&$this, 'warn_action_on_premium') );
}
//if the comment form option is activated then we add an approval action
if($config->getValue('commentform')){
add_action('wp_set_comment_status', array($this,'comment_approved'), 60,2);
}
}
private function _set_ajax_nonces(){
if( isset( $_GET['page'] ) && substr( $_GET['page'] ,0 ,7 ) == 'wysija_' ){
$ajax_nonces = array(
'campaigns' => array(
'switch_theme' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'switch_theme'
), true),
'save_editor' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'save_editor'
), true),
'save_styles' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'save_styles'
), true),
'deleteimg' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'deleteimg'
), true),
'deleteTheme' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'deleteTheme'
), true),
'save_IQS' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'save_IQS'
), true),
'send_preview' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'send_preview'
), true),
'send_spamtest' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'send_spamtest'
), true),
'insert_articles' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'insert_articles'
), true),
'set_divider' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'set_divider'
), true),
'generate_social_bookmarks' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'generate_social_bookmarks'
), true),
'install_theme' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'install_theme'
), true),
'setDefaultTheme' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'setDefaultTheme'
), true),
'deleteTheme' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'deleteTheme'
), true),
'save_poll' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'save_poll'
), true),
'sub_delete_image' => WYSIJA_view::secure(array(
'controller' => 'wysija_campaigns',
'action' => 'sub_delete_image',
), true),
),
'config' => array(
'send_test_mail' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'send_test_mail'
), true),
'send_test_mail_ms' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'send_test_mail_ms'
), true),
'bounce_process' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'bounce_process'
), true),
'share_analytics' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'share_analytics'
), true),
'wysija_form_manage_field' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'wysija_form_manage_field'
), true),
'form_field_delete' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'form_field_delete'
), true),
'form_name_save' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'form_name_save'
), true),
'form_save' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'form_save'
), true),
'validate' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'validate'
), true),
'linkignore' => WYSIJA_view::secure(array(
'controller' => 'wysija_config',
'action' => 'linkignore'
), true),
)
);
}else{
$ajax_nonces = array();
}
wp_localize_script('wysija-admin', 'wysijanonces', $ajax_nonces);
}
/**
* On any of the administration pages related to MailPoet, if the user
* has the key and doesn't have the premium plugin active a warning will
* be displayed.
*
* @return null
*/
public function warn_action_on_premium(){
$mdl_config=WYSIJA::get('config','model');
if($mdl_config->getValue('premium_key') && !WYSIJA::is_plugin_active(WJ_Upgrade::$plugins[1])){
if( file_exists( WPMU_PLUGIN_DIR . DIRECTORY_SEPARATOR . WJ_Upgrade::$plugins[1] ) || file_exists( WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . WJ_Upgrade::$plugins[1] ) ){
//send a message to the user so that he activates the premium plugin or try to fetch it directly.
$this->notice('<p>'.__('You need to activate the MailPoet Premium plugin.', WYSIJA).' <a data-warn="' . esc_attr__( "Confirm activating the MailPoet Premium Plugin?", WYSIJA ) . '" class="button-primary" title="' . esc_attr__( "Activate MailPoet Premium Version", WYSIJA ) . '" href="' . wp_nonce_url('plugins.php?action=activate&plugin=' . urlencode(WJ_Upgrade::$plugins[1]) . '&plugin_status=all', 'activate-plugin_' . WJ_Upgrade::$plugins[1]) . '">'.__('Activate now',WYSIJA).'</a></p>');
} else {
$args = array(
'page' => 'wysija_config',
'action' => 'packager-switch',
'_mp_action' => 'install',
'_wpnonce' => wp_create_nonce('packager-switch'),
);
if (WYSIJA::is_beta())
$args["stable"] = 1;
$link = esc_attr(add_query_arg($args, admin_url('admin.php')));
//send a message to the user so that he gets the premium plugin or try to fetch it directly.
$this->notice('<p>'.__('Congrats, your Premium license is active. One last step...', WYSIJA).' <a data-warn="' . esc_attr__( "Confirm installing the MailPoet Premium Plugin?", WYSIJA ) . '" id="install-wjp" class="button-primary" title="' . esc_attr__( "Installing MailPoet Premium Version", WYSIJA ) . '" href="' . esc_url($link) . '">'.__('Download the Premium plugin.',WYSIJA).'</a></p>');
}
}
return null;
}
function comment_approved($cid,$comment_status){
//if the comment is approved and the meta wysija_comment_subscribe appears, then we have one subscriber more to add
$metaresult=get_comment_meta($cid, 'wysija_comment_subscribe', true);
if($comment_status=='approve' && get_comment_meta($cid, 'wysija_comment_subscribe', true)){
$mConfig=WYSIJA::get('config','model');
$comment = get_comment($cid);
$userHelper=WYSIJA::get('user','helper');
$data=array('user'=>array('email'=>$comment->comment_author_email,'firstname'=>$comment->comment_author),'user_list'=>array('list_ids'=>$mConfig->getValue('commentform_lists')));
$userHelper->addSubscriber($data);
}
}
function ajax_setup(){
if(!isset($_REQUEST['adminurl']) && !is_user_logged_in()) add_action('wp_ajax_nopriv_wysija_ajax', array($this, 'ajax'));
else add_action('wp_ajax_wysija_ajax', array($this, 'ajax'));
}
/**
* let's fix all the conflicts that we may have
*/
function resolveConflicts(){
// check conflicting themes
$possibleConflictiveThemes = $this->controller->get_conflictive_plugins(true);
$conflictingTheme = null;
$currentTheme = strtolower(function_exists( 'wp_get_theme' ) ? wp_get_theme() : get_current_theme());
foreach($possibleConflictiveThemes as $keyTheme => $conflictTheme) {
if($keyTheme === $currentTheme) {
$conflictingTheme = $keyTheme;
}
}
// if the current theme is known to make troubles, let's resolve this
if($conflictingTheme !== null) {
$helperConflicts = WYSIJA::get('conflicts', 'helper');
$helperConflicts->resolve(array($possibleConflictiveThemes[$conflictingTheme]));
}
// check conflicting plugins
$possibleConflictivePlugins=$this->controller->get_conflictive_plugins();
$conflictingPlugins=array();
foreach($possibleConflictivePlugins as $keyPlg => $conflictPlug){
if(WYSIJA::is_plugin_active($conflictPlug['file'])) {
//plugin is activated
$conflictingPlugins[$keyPlg]=$conflictPlug;
}
}
if($conflictingPlugins){
$helperConflicts=WYSIJA::get('conflicts','helper');
$helperConflicts->resolve($conflictingPlugins);
}
}
/**
* this function will check the role of the user executing the action, if it's called from another
* WordPress admin page than page.php for instance admin-post.php
* @return boolean
*/
function verify_capability(){
if( isset( $_GET['page'] ) && substr( $_GET['page'] ,0 ,7 ) == 'wysija_' ){
switch( $_GET['page'] ){
case 'wysija_campaigns':
$role_needed = 'wysija_newsletters';
break;
case 'wysija_subscribers':
$role_needed = 'wysija_subscribers';
break;
case 'wysija_config':
$role_needed = 'wysija_config';
break;
case 'wysija_statistics':
$role_needed = 'wysija_stats_dashboard';
break;
default:
$role_needed = 'switch_themes';
}
if( current_user_can( $role_needed ) ){
return true;
} else{
die( 'You are not allowed here.' );
}
}else{
// this is not a wysija interface/action we can let it pass
return true;
}
}
/**
* translatable strings need to be not loaded to early, this is why we put them ina separate function
* @global type $wysija_installing
*/
function define_translated_strings(){
$config = WYSIJA::get('config','model');
$linkcontent = __("It doesn't always work the way we want it to, doesn't it? We have a [link]dedicated support website[/link] with documentation and a ticketing system.",WYSIJA);
$finds = array('[link]','[/link]');
$replace = array('<a target="_blank" href="http://support.mailpoet.com" title="support.mailpoet.com">','</a>');
$truelinkhelp = '<p>'.str_replace($finds,$replace,$linkcontent).'</p>';
$truelinkhelp .= '<p>'.__('MailPoet Version: ',WYSIJA).'<strong>'.WYSIJA::get_version().'</strong></p>';
$this->menus=array(
'campaigns'=>array('title'=>'MailPoet'),
'subscribers'=>array('title'=>__('Subscribers',WYSIJA)), // if the key "subscribers" is changed, please change in the filter "wysija_menus" as well.
'config'=>array('title'=>__('Settings',WYSIJA)),
'premium'=>array('title'=>__('Premium',WYSIJA))
);
$this->menus = apply_filters('wysija_menus', $this->menus);
$this->menuHelp = $truelinkhelp;
if($config->getValue('queue_sends_slow')){
$msg=$config->getValue('ignore_msgs');
if(!isset($msg['queuesendsslow'])){
$this->notice(
__('Tired of waiting more than 48h to send your emails?',WYSIJA).' '. str_replace(array('[link]','[/link]'), array('<a href="http://docs.mailpoet.com/article/48-wp-cron-batch-emails-sending-frequency" target="_blank">','</a>'), __('[link]Find out[/link] how you can improve this.',WYSIJA)).
' <a class="linkignore queuesendsslow" href="javascript:;">'.__('Hide!',WYSIJA).'</a>');
}
}
if(WYSIJA_ITF){
global $wysija_installing;
if( !$config->getValue('sending_emails_ok')){
$msg=$config->getValue('ignore_msgs');
$urlsendingmethod='admin.php?page=wysija_config#tab-sendingmethod';
if($_REQUEST['page'] === 'wysija_config') {
$urlsendingmethod='#tab-sendingmethod';
}
}
}
}
function add_menus(){
global $menu,$submenu;// WordPress globals be careful there
$count=0;
//anti conflicting menus code to make sure that another plugin is not at the same level as us
$position=50;
$positionplus1=$position+1;
while(isset($menu[$position]) || isset($menu[$positionplus1])){
$position++;
$positionplus1=$position+1;
//check that there is no menu at our level neither at ourlevel+1 because that will make us disappear in some case :/
if(!isset($menu[$position]) && isset($menu[$positionplus1])){
$position=$position+2;
}
}
global $wysija_installing;
foreach($this->menus as $action=> $menutemp){
$actionFull='wysija_'.$action;
if (!isset($menutemp['subtitle']))
$menutemp['subtitle'] = $menutemp['title'];
if ($action == 'campaigns')
$roleformenu = 'wysija_newsletters';
elseif ($action == 'subscribers')
$roleformenu = 'wysija_subscribers';
elseif ($action == 'statistics')
$roleformenu = 'wysija_stats_dashboard';
else
$roleformenu = 'wysija_config';
if($wysija_installing===true){
if($count==0){
$parentmenu=$actionFull;
$hookname = add_menu_page(
$menutemp['title'],
$menutemp['subtitle'],
$roleformenu,
$actionFull,
array($this->controller, 'errorInstall'),
WYSIJA_EDITOR_IMG.'menu-icon.png',
$position
);
}
}else{
if($count==0){
$parentmenu = $actionFull;
$hookname = add_menu_page(
$menutemp['title'],
$menutemp['subtitle'],
$roleformenu,
$actionFull ,
array($this->controller, 'render'),
WYSIJA_EDITOR_IMG.'menu-icon.png',
$position
);
}else{
$hookname=add_submenu_page($parentmenu,$menutemp['title'], $menutemp['subtitle'], $roleformenu, $actionFull , array($this->controller, 'render'));
}
//manage wp help tab
if(WYSIJA_ITF){
//wp3.3
if(version_compare(get_bloginfo('version'), '3.3.0')>= 0){
add_action('load-'.$hookname, array($this,'add_help_tab'));
}else{
//wp3.0
add_contextual_help($hookname, $this->menuHelp);
}
}
}
$count++;
}
// Correct the text of submenu, in case there is only 1 submenu is enabled
if(isset($submenu[$parentmenu])) {
switch ($submenu[$parentmenu][0][2]) {
case 'wysija_subscribers':
$textmenu=__('Subscribers',WYSIJA);
break;
case 'wysija_statistics':
$textmenu=__('Statistics',WYSIJA);
break;
case 'wysija_config':
$textmenu=__('Settings',WYSIJA);
break;
case 'wysija_campaigns':
default:
$textmenu=__('Newsletters',WYSIJA);
break;
}
$submenu[$parentmenu][0][0]=$submenu[$parentmenu][0][3]=$textmenu;
}
}
function add_help_tab($params){
$screen = get_current_screen();
if(method_exists($screen, "add_help_tab")){
$screen->add_help_tab(array(
'id' => 'wysija_help_tab',
'title' => __('Get Help!',WYSIJA),
'content'=> $this->menuHelp));
$tabfunc=true;
}
}
function add_js($hook) {
//needed in all the wordpress admin pages including wysija's ones
$jstrans=array();
wp_register_script('wysija-charts', 'https://www.google.com/jsapi', array( 'jquery' ), true);
wp_register_script('wysija-admin-list', WYSIJA_URL.'js/admin-listing.js', array( 'jquery' ), true, WYSIJA::get_version());
wp_register_script('wysija-base-script-64', WYSIJA_URL.'js/base-script-64.js', array( 'jquery' ), true, WYSIJA::get_version());
wp_enqueue_style('wysija-admin-css-widget', WYSIJA_URL.'css/admin-widget.css',array(),WYSIJA::get_version());
// If Cron enabled sending, send Mixpanel data and reset flag.
$model_config = WYSIJA::get('config', 'model');
if ($model_config->getValue('send_analytics_now') == 1) {
$analytics = new WJ_Analytics();
$analytics->generate_data();
$analytics->send();
// Reset sending flag.
$model_config->save(array('send_analytics_now' => 0));
}
//we are in wysija's admin interface
if(WYSIJA_ITF){
wp_enqueue_style('wysija-admin-css-global', WYSIJA_URL.'css/admin-global.css',array(),WYSIJA::get_version());
wp_enqueue_script('wysija-admin-js-global', WYSIJA_URL.'js/admin-wysija-global.js',array(),WYSIJA::get_version());
$pagename=str_replace('wysija_','',$_REQUEST['page']);
$backloader=WYSIJA::get('backloader','helper');
$backloader->init( $this->controller );
//$this->controller->jsTrans["ignoremsg"]=__('Are you sure you want to ignore this message?.',WYSIJA);
$jstrans=$this->controller->jsTrans;
//if(!in_array('wysija-admin-ajax-proto',$this->controller->js)) $this->controller->js[]='wysija-admin-ajax';
$jstrans['gopremium']=__('Go Premium!',WYSIJA);
//enqueue all the scripts that have been declared in the controller
$backloader->parse_js( $this->controller, $pagename, WYSIJA_URL );
//this will load automatically existing scripts and stylesheets based on the page and action parameters
$backloader->load_assets($pagename,WYSIJA_DIR,WYSIJA_URL,$this->controller);
//add some translation
$backloader->localize( $pagename, WYSIJA_DIR, WYSIJA_URL, $this->controller );
// add rtl support
if ( is_rtl() ) {
wp_enqueue_style('wysija-admin-rtl', WYSIJA_URL.'css/rtl.css',array(),WYSIJA::get_version());
}
$this->_set_ajax_nonces();
}
$jstrans['newsletters']=__('Newsletters',WYSIJA);
$jstrans['urlpremium']='admin.php?page=wysija_config#tab-premium';
$jstrans['premium_activating'] = __('Checking license', WYSIJA);
if(isset($_REQUEST['page']) && $_REQUEST['page']=='wysija_config'){
$jstrans['urlpremium']='#tab-premium';
}
wp_localize_script('wysija-admin', 'wysijatrans', $jstrans);
}
/**
* code only executed in the page or post in admin
*/
function addCodeToPagePost(){
//code to add external buttons to the tmce only if the user has the rights to add the forms
if(get_user_option('rich_editing') == 'true') {
add_filter("mce_external_plugins", array($this,"addRichPlugin"));
add_filter('mce_buttons', array($this,'addRichButton1'),999);
$myStyleUrl = "../../plugins/wysija-newsletters/css/tmce/style.css";
add_editor_style($myStyleUrl);
//add_filter('tiny_mce_before_init', array($this,'TMCEinnercss'),12 );
wp_enqueue_style('custom_TMCE_admin_css', WYSIJA_URL.'css/tmce/panelbtns.css');
wp_print_styles('custom_TMCE_admin_css');
}
}
function addRichPlugin($plugin_array) {
global $wp_version;
if ( version_compare( $wp_version, '3.9', '<' ) ){
$suffix = '';
} else {
$suffix = '_39';
}
$plugin_array['wysija_register'] = WYSIJA_URL.'mce/wysija_register/editor_plugin'.$suffix.'.js';
return $plugin_array;
}
function addRichButton1($buttons) {
$newButtons=array();
foreach($buttons as $value) $newButtons[]=$value;
array_push($newButtons, '|', 'wysija_register');
return $newButtons;
}
function admin_footer_text($text) {
$screen = get_current_screen();
if (strpos($screen->base, 'wysija')===false)
return $text;
return
"<a target='_blank' href='http://support.mailpoet.com/feedback/?utm_source=wpadmin&utm_campaign=contact_footer'>" . __( 'Contact Support', WYSIJA ) . "</a>" .
" | " .
str_replace(
array('[stars]','[link]','[/link]'),
array('<a target="_blank" href="http://clicky.me/wp-reviews" >★★★★★</a>','<a target="_blank" href="http://clicky.me/wp-reviews" >','</a>'),
__('Add your [stars] on [link]wordpress.org[/link] and keep this plugin essentially free.',WYSIJA)
) .
"";
}
function update_footer($text){
$screen = get_current_screen();
if (strpos($screen->base, 'wysija')===false)
return $text;
$version_link = esc_url(add_query_arg(
array(
'page' => 'wysija_campaigns',
'action' => 'whats_new',
),
admin_url('admin.php')
));
$version_string = "</p>" .
"<p class='alignright'>" .
__("MailPoet Version", WYSIJA) . ": <a href='{$version_link}'>" . esc_attr(WYSIJA::get_version()) . "</a>";
$version_string = apply_filters('mailpoet_back_footer', $version_string);
return $version_string;
}
}