user_email)) return true;
$this->loadAcyLibrary();
$userClass = acym_get('class.user');
$userClass->synchDeleteCmsUser($cmsUser->user_email);
}
function synchSaveUsers($userId, $oldUser = null)
{
if (empty($userId)) return true;
$isnew = empty($oldUser);
$cmsUser = get_user_by('id', $userId);
if (empty($cmsUser->user_email)) return true;
$this->loadAcyLibrary();
$user = [
'email' => $cmsUser->user_email,
'id' => $cmsUser->ID,
'block' => 0,
];
if (!empty($cmsUser->display_name)) {
$user['name'] = $cmsUser->display_name;
} elseif (!empty($cmsUser->user_nicename)) {
$user['name'] = $cmsUser->user_nicename;
}
$oldUser = empty($oldUser->user_email) ? null : ['email' => $oldUser->user_email];
$userClass = acym_get('class.user');
$userClass->synchSaveCmsUser($user, $isnew, $oldUser);
}
public function getPosts()
{
$return = [];
$search_results = new WP_Query(
[
's' => $_GET['searchedterm'],
'post_status' => 'publish',
'ignore_sticky_posts' => 1,
'post_type' => 'post',
'posts_per_page' => 20,
]
);
if ($search_results->have_posts()) {
while ($search_results->have_posts()) {
$search_results->the_post();
$return[] = [$search_results->post->ID, $search_results->post->post_title];
}
}
echo json_encode($return);
exit;
}
/**
* Reset the package download URL when successfully updated the plugin
*
* @param $upgrader_object
* @param $options
*/
public function after_update($upgrader_object, $options)
{
$this->loadAcyLibrary();
// Get latest version
$config = acym_config();
$current_plugin_path_name = plugin_basename(__FILE__);
if ($options['action'] != 'update' || $options['type'] != 'plugin') return;
if (!empty($options['plugin']) && $options['plugin'] == $current_plugin_path_name) {
$newConfig = new stdClass();
$newConfig->downloadurl = '';
$config->save($newConfig);
} elseif (!empty($options['plugins'])) {
foreach ($options['plugins'] as $each_plugin) {
if ($each_plugin != $current_plugin_path_name) continue;
$newConfig = new stdClass();
$newConfig->downloadurl = '';
$config->save($newConfig);
}
}
}
public function notice_update()
{
global $pagenow;
if (!in_array($pagenow, ['update-core.php', 'plugins.php'])) return;
$this->loadAcyLibrary();
echo '
'.acym_translation('ACYM_PLEASE_ASSIGN_YOUR_SITE_IF_YOU_WANT_TO_UPDATE').'
';
}
public function checkUpdates($transient)
{
$this->loadAcyLibrary();
// Get latest version
$config = acym_config();
$plugin_slug = plugin_basename(__FILE__);
if (!empty($transient->response[$plugin_slug])) $transient->response[$plugin_slug]->package = $config->get('downloadurl', '');
$lastCheck = $config->get('lastupdatecheck', 0);
if ((empty($_REQUEST['force-check']) || $_REQUEST['force-check'] != 1) && $lastCheck > time() - 86400) {
return $transient;
}
$currentVersion = $config->get('version');
$url = ACYM_UPDATEMEURL.'updatexml&component=acymailing&cms=wp&level='.$config->get('level').'&version='.$currentVersion;
if (acym_level(1)) {
$url .= '&li='.urlencode(base64_encode(ACYM_LIVE));
}
$updateInformation = acym_fileGetContent($url, 10);
$updateInformation = substr($updateInformation, strpos($updateInformation, 'update[0]->version;
if (!empty($currentVersion) && version_compare($currentVersion, $latestVersion, '>=')) {
if (!empty($transient->response[$plugin_slug])) {
unset($transient->response[$plugin_slug]);
}
return $transient;
}
$required = (string)$xml->update[0]->min_wp_version;
$tested = (string)$xml->update[0]->tested_wp_version;
$requiredPHP = (string)$xml->update[0]->min_php_version;
$downloadURL = (string)$xml->update[0]->downloadurl;
$updateBanner = (string)$xml->update[0]->banner;
// Add the update to transient if any
if (strpos($downloadURL, 'http') === false) {
$downloadURL = '';
add_action('admin_notices', [$this, 'notice_update'], 110);
}
$transient->response[$plugin_slug] = (object)[
'new_version' => $latestVersion,
'package' => $downloadURL,
'slug' => $plugin_slug,
'icons' => [
'1x' => ACYM_ACYWEBSITE.'images/logo_icon.png',
],
];
// Save the latest version and the license expiration date to warn the user when something's wrong
$newConfig = new stdClass();
$newConfig->lastupdatecheck = time();
$newConfig->latestversion = $latestVersion;
$newConfig->requiredversion = $required;
$newConfig->testedversion = $tested;
$newConfig->requiredphp = $requiredPHP;
$newConfig->updatebanner = ACYM_ACYWEBSITE.$updateBanner;
$newConfig->downloadurl = $downloadURL;
if (acym_level(1)) {
$url = ACYM_UPDATEMEURL.'update&task=loadUserInformation&component=acymailing&level='.strtolower($config->get('level', 'starter'));
if (acym_level(1)) {
$url .= '&domain='.urlencode(rtrim(ACYM_LIVE, '/'));
}
ob_start();
$userInformation = acym_fileGetContent($url, 30);
$warnings = ob_get_clean();
// Could not load the user information
if (!empty($userInformation)) {
$decodedInformation = json_decode($userInformation, true);
$newConfig->expirationdate = $decodedInformation['expiration'];
}
}
$config->save($newConfig);
return $transient;
}
public static function hookUpdate($result, $action = null, $args = null)
{
$acySlug = basename(__DIR__).'/index.php';
if (empty($action) || $action != 'plugin_information' || empty($args->slug) || $args->slug != $acySlug) {
return $result;
}
// Load Acy library
require_once(rtrim(__DIR__, DS).DS.'back'.DS.'helpers'.DS.'helper.php');
$config = acym_config();
$pluginInfo = new stdClass();
$pluginInfo->banners = [
'low' => $config->get('updatebanner'),
];
$pluginInfo->name = ACYM_NAME;
$pluginInfo->slug = $acySlug;
$pluginInfo->version = $config->get('latestversion');
$pluginInfo->author = 'Acyba';
$pluginInfo->homepage = ACYM_ACYWEBSITE;
$pluginInfo->requires = $config->get('requiredversion');
$pluginInfo->tested = $config->get('testedversion');
$pluginInfo->requires_php = $config->get('requiredphp');
$pluginInfo->download_link = $config->get('downloadurl');
$changelog = acym_fileGetContent(ACYM_ACYWEBSITE.'support/change-log.html?tmpl=component', 10);
$changelog = preg_replace('#.*#Uis', '', $changelog);
$changelog = preg_replace('##Uis', '', $changelog);
$changelog = str_replace([''], [''], $changelog);
$pluginInfo->sections = [
_x('Changelog', 'Plugin installer section title') => $changelog,
];
return $pluginInfo;
}
/**
* Meh.
*/
function frontRouter()
{
$this->router('_front');
}
function router($suffix = '')
{
if (empty($suffix)) auth_redirect();
$this->loadAcyLibrary();
$this->updateAcym();
if (file_exists(ACYM_FOLDER.'update.php')) {
unlink(ACYM_FOLDER.'update.php');
}
$config = acym_config();
// Get controller. If not found, take it from the page
$ctrl = acym_getVar('cmd', 'ctrl', '');
$task = acym_getVar('cmd', 'task', '');
if ($config->get("migration") == 0 && acym_existsAcyMailing59() && acym_getVar('string', 'task') != 'migrationDone' && !(defined('DOING_AJAX') && DOING_AJAX)) {
$ctrl = 'dashboard';
acym_setVar('ctrl', $ctrl);
}
if (empty($ctrl)) {
$ctrl = str_replace(ACYM_COMPONENT.'_', '', acym_getVar('cmd', 'page', ''));
if (empty($ctrl)) {
echo 'Page not found';
return;
}
acym_setVar('ctrl', $ctrl);
}
if (!file_exists(constant('ACYM_CONTROLLER'.strtoupper($suffix)).$ctrl.'.php')) {
echo 'Controller not found: '.$ctrl;
return;
}
$controller = acym_get('controller'.$suffix.'.'.$ctrl);
if (empty($task)) {
$task = acym_getVar('cmd', 'defaulttask', $controller->defaulttask);
}
if ((!defined('DOING_AJAX') || !DOING_AJAX)) {
$this->writeScripts($ctrl, $task);
$controller->loadScripts($task);
}
$controller->$task();
}
function writeScripts($ctrl, $task)
{
acym_addScript(
true,
'var TOGGLE_URL_ACYM = "admin-ajax.php?action='.ACYM_COMPONENT.'_router&'.acym_noTemplate().'&page='.ACYM_COMPONENT.'_toggle&ctrl=toggle&'.acym_getFormToken().'";
var AJAX_URL_ACYM = "admin-ajax.php?action='.ACYM_COMPONENT.'_router&'.acym_noTemplate().'&'.acym_getFormToken().'";
var MEDIA_URL_ACYM = "'.ACYM_MEDIA_URL.'";
var CMS_ACYM = "'.ACYM_CMS.'";
var FOUNDATION_FOR_EMAIL = "'.ACYM_CSS.'libraries/foundation_email.min.css?v='.filemtime(ACYM_MEDIA.'css'.DS.'libraries'.DS.'foundation_email.min.css').'";
var ACYM_FIXES_FOR_EMAIL = "'.ACYM_CSS.'email.min.css?v='.filemtime(ACYM_MEDIA.'css'.DS.'email.min.css').'";
var ACYM_REGEX_EMAIL = /^'.acym_getEmailRegex(true).'$/i;
var ACYM_JS_TXT = '.acym_getJSMessages().';'
);
// Without this line the image insertion and dtexts button don't work
wp_enqueue_media();
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-draggable');
wp_enqueue_script('jquery-ui-droppable');
wp_enqueue_script('jquery-ui-sortable');
wp_enqueue_script('jquery-effects-slide');
acym_addScript(false, ACYM_JS.'global.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'global.min.js'));
if (acym_isAdmin()) {
acym_addScript(false, ACYM_JS.'libraries/foundation.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'libraries'.DS.'foundation.min.js'));
acym_addScript(false, ACYM_JS.'libraries/select2.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'libraries'.DS.'select2.min.js'));
acym_addStyle(false, 'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css');
acym_addScript(false, ACYM_JS.'back_global.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'back_global.min.js'));
acym_addStyle(false, ACYM_CSS.'back_global.min.css?v='.filemtime(ACYM_MEDIA.'css'.DS.'back_global.min.css'));
acym_addStyle(false, ACYM_CSS.'libraries/introjs.min.css?v='.filemtime(ACYM_MEDIA.'css'.DS.'libraries'.DS.'introjs.min.css'));
acym_addScript(false, ACYM_JS.'libraries/intro.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'libraries'.DS.'intro.min.js'));
if (file_exists(ACYM_MEDIA.'js'.DS.'back'.DS.$ctrl.'.min.js')) {
acym_addScript(false, ACYM_JS.'back/'.$ctrl.'.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'back'.DS.$ctrl.'.min.js'));
}
} else {
acym_addScript(false, ACYM_JS.'front_global.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'front_global.min.js'));
acym_addStyle(false, ACYM_CSS.'front_global.min.css?v='.filemtime(ACYM_MEDIA.'css'.DS.'front_global.min.css'));
if (file_exists(ACYM_MEDIA.'js'.DS.'front'.DS.$ctrl.'.min.js')) {
acym_addScript(false, ACYM_JS.'front/'.$ctrl.'.min.js?v='.filemtime(ACYM_MEDIA.'js'.DS.'front'.DS.$ctrl.'.min.js'));
}
}
}
function loadWidgets()
{
register_widget('acym_profile_widget');
register_widget('acym_subscriptionform_widget');
register_widget('acym_archive_widget');
}
// Add AcyMailing menu to WP left menu and define controllers
function addMenus()
{
$this->loadAcyLibrary();
// Everyone in WordPress can read, the real test is made above
$capability = 'read';
add_menu_page(
acym_translation('ACYM_DASHBOARD'),
'AcyMailing',
$capability,
ACYM_COMPONENT.'_dashboard',
[$this, 'router'],
'data:img/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAB8lBMVEUAeNIAetMAedMAetQAwP8AnfAAuf8Aq/8AjugAmO4Aw/8Ar/8Aof0Aj+kAkekAnvEAx/8Avf8AoP0AjekAme0AoPIAwv8Ayf8Aq/wAkO0An/EA6/8A3v8Av/4AnvIAnfEArfoAtf4AedMAedMAedMAedMAedMAedMAaM0Abs8AedMAedMAedMAedMAc84Acs4AwO0AedMAedMAn+wA//8Awf8A6v8AtP4A6/8Atf4Ax/8Avf8AtP8AluwAm+8AoPIAx/8AtP8Arf8AkOgAluwAoPIAxf8AxP8Apf0AkOoAn/IAn/IAxf8Awv8AnvEAn/IA6/8Axf8Awf8AnfEAn/IAtf4A6/8A3/8Awf8AnfEArvoAtf4A0v8Axf8Awf8AnfEAn/IApvUAe9QAedMAetQAedQAZMoAdNEAd9EAbssAeNMA3vwAneQAbc4Aa8sAcs0Ac84Ai+EArfkA6v8A5f8AuvYAhtwAbMoAdtAAgNkAme0Ar/0AtP4A3v8A0v8A0/8AyP8An+0AbskAc80Ai+QAoPQApvcApvUArvoA3/8Axf8Av/8Awf8Arf4AjOYAgdsAkeoAnPIAnPAAoPIAxv8Avf8As/8Asf8Arf8AlO4AkusAlusAm+8AtP8Apf4AkOoAkOkAluwA6/8Atf4An/IAAADmtUTHAAAAYnRSTlMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXs2Dfc5iNLvWUErSvTX+rqr+/Pzy8vLy44Lt8ITe6hKeoBXi8Qw/QAbq8AwH6ebuDAfm5hWUCwWWFj+wHRevQyzPqKYAAAABYktHRKUuuUovAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4gMBDxMfj/8GxgAAAPJJREFUGNNjYGBUUlZhAgNVNXUGZgYNzaTkZC1tJiYd3eTkFD19BoPUtPSU5GRDIyA3IzPLmMEkOyc3LxkolJycX1BYZMpgVlxSWlaen5JSkV9ZVV1jzmBRW1ff0JjS1JzS0trW3mHJYNFZ19Xd09vXP2HipMlQgSlTp02fMXPW7DkIgbkz5s1fsBAuYGVtAxKwtbOHCjiwODrNm+/swuoKFXBzZ2P38OTg9PIGCSzqrPPx5eLm4eXj9/Nv71jMENBZFxgkICgkLCIaHNLeEcoQFl7XFSEmLiEpxR+5pD0qmkFaJiY2TkxAVk6ePz4hUUERAHayWPxHOSt0AAAAAElFTkSuQmCC',
42
);
$menus = [
'ACYM_USERS' => 'users',
'ACYM_CUSTOM_FIELDS' => 'fields',
'ACYM_LISTS' => 'lists',
'ACYM_CAMPAIGNS' => 'campaigns',
'ACYM_TEMPLATES' => 'mails',
'ACYM_AUTOMATION' => 'automation',
'ACYM_QUEUE' => 'queue',
'ACYM_STATISTICS' => 'stats',
'ACYM_BOUNCE_HANDLING' => 'bounces',
'ACYM_CONFIGURATION' => 'configuration',
];
foreach ($menus as $title => $ctrl) {
add_submenu_page(ACYM_COMPONENT.'_dashboard', acym_translation($title), acym_translation($title), $capability, ACYM_COMPONENT.'_'.$ctrl, [$this, 'router']);
}
// Declare invisible menus
$controllers = ['dynamics', 'file', 'language'];
foreach ($controllers as $oneCtrl) {
add_submenu_page(null, $oneCtrl, $oneCtrl, $capability, ACYM_COMPONENT.'_'.$oneCtrl, [$this, 'router']);
}
// For the front ajax
add_submenu_page(
null,
'front',
'front',
$capability,
ACYM_COMPONENT.'_front',
[$this, 'frontRouter']
);
// In WordPress, the first submenu is called "AcyMailing" instead of "Dashboard" so we rename it manually
global $submenu;
if (isset($submenu[ACYM_COMPONENT.'_dashboard'])) {
$submenu[ACYM_COMPONENT.'_dashboard'][0][0] = acym_translation('ACYM_DASHBOARD');
}
}
function waitHeaders()
{
ob_start();
}
// Add links on the plugins listing
function addPluginLinks($links)
{
$settings_link = ''.__('Settings').'';
$links = array_merge([$settings_link], $links);
return $links;
}
// Install DB and sample data
function install()
{
$file_name = rtrim(__DIR__, DS).DS.'back'.DS.'tables.sql';
$handle = fopen($file_name, 'r');
$queries = fread($handle, filesize($file_name));
fclose($handle);
$this->loadAcyLibrary();
if (is_multisite()) {
$currentBlog = get_current_blog_id();
$sites = function_exists('get_sites') ? get_sites() : wp_get_sites();
foreach ($sites as $site) {
if (is_object($site)) {
$site = get_object_vars($site);
}
switch_to_blog($site['blog_id']);
$this->sampledata($queries);
}
switch_to_blog($currentBlog);
} else {
$this->sampledata($queries);
}
if (file_exists(ACYM_FOLDER.'update.php')) {
unlink(ACYM_FOLDER.'update.php');
}
}
function sampledata($queries)
{
global $wpdb;
$prefix = acym_getPrefix();
$acytables = str_replace('#__', $prefix, $queries);
$tables = explode('CREATE TABLE IF NOT EXISTS', $acytables);
foreach ($tables as $oneTable) {
$oneTable = trim($oneTable);
if (empty($oneTable)) {
continue;
}
$wpdb->query('CREATE TABLE IF NOT EXISTS'.$oneTable);
}
$this->updateAcym();
}
function updateAcym()
{
$config = acym_config();
if (!file_exists(ACYM_FOLDER.'update.php') && $config->get('installcomplete', 0) != 0) {
return;
}
require_once(ACYM_FOLDER.'install.class.php');
if (!class_exists('acymInstall')) {
return;
}
//First we increase the perfs so that we won't have any surprise.
acym_increasePerf();
$installClass = new acymInstall();
$installClass->addPref();
$installClass->updatePref();
$installClass->updateSQL();
$updateHelper = acym_get('helper.update');
$updateHelper->fromLevel = $installClass->fromLevel;
$updateHelper->fromVersion = $installClass->fromVersion;
$updateHelper->installLanguages(false);
$updateHelper->installBounceRules();
$updateHelper->installList();
$updateHelper->installNotifications();
$updateHelper->installFields();
$updateHelper->installAdminNotif();
$newConfig = new stdClass();
$newConfig->installcomplete = 1;
$config->save($newConfig);
// Reload conf
acym_config(true);
//We create the folders for all the media in the media folder of WordPress
//We do that bc WP erase all the files on updates
if (!file_exists(wp_upload_dir()['basedir'].DS.'acymailing')) {
mkdir(wp_upload_dir()['basedir'].DS.'acymailing');
mkdir(wp_upload_dir()['basedir'].DS.'acymailing'.DS.'thumbnails'.DS);
}
}
function frontMessages()
{
$sessionID = session_id();
if (empty($sessionID)) {
@session_start();
}
$output = '';
$types = ['success', 'info', 'warning', 'error', 'notice', 'message'];
foreach ($types as $type) {
if (empty($_SESSION['acymessage'.$type])) {
continue;
}
$messages = $_SESSION['acymessage'.$type];
if (!is_array($messages)) {
$messages = [$messages];
}
$output .= implode(' ', $messages);
unset($_SESSION['acymessage'.$type]);
}
$_SESSION['acymessages'] = $output;
}
function messagingSystem()
{
$sessionID = session_id();
if (empty($sessionID)) {
@session_start();
}
if (empty($_SESSION['acymessages'])) return;
echo '
'.$_SESSION['acymessages'].'
';
$script = '
setCallouts();
function setCallouts(){
var callouts = document.getElementsByClassName("acy_callout");
for(var i = 0; i < callouts.length; i++){
var callout = callouts[i];
var calloutClose = callout.getElementsByClassName("acy_callout_close")[0];
displayCallout(callout, i);
calloutClose.onclick = function(event){
var eventElement = event.target;
var eventCallout = eventElement.closest(".acy_callout");
closeCallout(eventCallout);
}
}
}
function closeCallout(callout){
callout.style["margin-left"] = "640px";
callout.style["margin-right"] = "-640px";
setTimeout(function(){ callout.remove() }, 1000);
}
function displayCallout(callout, i){
setTimeout(function(){
callout.style["margin-left"] = "0px";
callout.style["margin-right"] = "0px";
}, 1000 * i);
}';
echo '';
echo '';
}
}
new acymInit();