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();