get('migration') == 0 && acym_existsAcyMailing59()) { acym_setVar("layout", "migrate"); parent::display(); return; } $newConfig = new stdClass(); $newConfig->migration = '1'; $config->save($newConfig); if ($config->get('walk_through') == 1) { $step = acym_getVar('int', 'step'); $task = acym_getVar('string', 'task'); if (empty($step)) acym_setVar('step', '1'); if (empty($task)) acym_setVar('task', 'walkThrough'); $this->walkThrough(); return; } $data = []; $campaignClass = acym_get('class.campaign'); $mailStatsClass = acym_get('class.mailstat'); $urlClickClass = acym_get('class.urlclick'); $mails = $mailStatsClass->getAllMailsForStats(); $data['campaignsScheduled'] = $campaignClass->getCampaignForDashboard(); $data['dashboard_stats'] = true; if (empty($mails)) { $data['emptyGlobal'] = 'campaigns'; parent::display($data); return; } $data['mails'] = []; foreach ($mails as $mail) { if (empty($mail->name) || (empty($mail->id) && $mail->sent != 1)) continue; $newMail = new stdClass(); $newMail->name = $mail->name; $newMail->value = $mail->id; $data['mails'][] = $newMail; } $data['selectedMailid'] = empty($selectedMail) ? '' : $selectedMail; $statsMailSelected = $mailStatsClass->getOneByMailId($data['selectedMailid']); if (empty($statsMailSelected)) { $data['emptyGlobal'] = empty($data['selectedMailid']) ? 'campaigns' : 'stats'; } if (empty($statsMailSelected->sent)) { $data['emptyGlobal'] = 'stats'; } $statsMailSelected->totalMail = $statsMailSelected->sent + $statsMailSelected->fail; $statsMailSelected->pourcentageSent = empty($statsMailSelected->totalMail) ? 0 : intval(($statsMailSelected->sent * 100) / $statsMailSelected->totalMail); $statsMailSelected->allSent = empty($statsMailSelected->totalMail) ? acym_translation_sprintf('ACYM_X_MAIL_SUCCESSFULLY_SENT_OF_X', 0, 0) : acym_translation_sprintf('ACYM_X_MAIL_SUCCESSFULLY_SENT_OF_X', $statsMailSelected->sent, $statsMailSelected->totalMail); $openRateCampaign = empty($data['selectedMailid']) ? $campaignClass->getOpenRateAllCampaign() : $campaignClass->getOpenRateOneCampaign($data['selectedMailid']); $statsMailSelected->pourcentageOpen = empty($openRateCampaign->sent) ? 0 : intval(($openRateCampaign->open_unique * 100) / $openRateCampaign->sent); $statsMailSelected->allOpen = empty($openRateCampaign->sent) ? acym_translation_sprintf('ACYM_X_MAIL_OPENED_OF_X', 0, 0) : acym_translation_sprintf('ACYM_X_MAIL_OPENED_OF_X', $openRateCampaign->open_unique, $openRateCampaign->sent); $clickRateCampaign = $urlClickClass->getClickRate($data['selectedMailid']); $statsMailSelected->pourcentageClick = empty($statsMailSelected->sent) ? 0 : intval(($clickRateCampaign->click * 100) / $statsMailSelected->sent); $statsMailSelected->allClick = empty($statsMailSelected->sent) ? acym_translation_sprintf('ACYM_X_MAIL_CLICKED_OF_X', 0, 0) : acym_translation_sprintf('ACYM_X_MAIL_CLICKED_OF_X', $clickRateCampaign->click, $statsMailSelected->sent); $bounceRateCampaign = empty($data['selectedMailid']) ? $campaignClass->getBounceRateAllCampaign() : $campaignClass->getBounceRateOneCampaign($data['selectedMailid']); $statsMailSelected->pourcentageBounce = empty($statsMailSelected->sent) ? 0 : intval(($bounceRateCampaign->bounce_unique * 100) / $statsMailSelected->sent); $statsMailSelected->allBounce = empty($statsMailSelected->sent) ? acym_translation_sprintf('ACYM_X_BOUNCE_OF_X', 0, 0) : acym_translation_sprintf('ACYM_X_BOUNCE_OF_X', $bounceRateCampaign->bounce_unique, $statsMailSelected->sent); $campaignOpenByMonth = $campaignClass->getOpenByMonth($data['selectedMailid']); $campaignOpenByDay = $campaignClass->getOpenByDay($data['selectedMailid']); $campaignOpenByHour = $campaignClass->getOpenByHour($data['selectedMailid']); $campaignClickByMonth = $urlClickClass->getAllClickByMailMonth($data['selectedMailid']); $campaignClickByDay = $urlClickClass->getAllClickByMailDay($data['selectedMailid']); $campaignClickByHour = $urlClickClass->getAllClickByMailHour($data['selectedMailid']); if (empty($campaignOpenByMonth) || empty($campaignOpenByDay) || empty($campaignOpenByHour)) { $statsMailSelected->empty = true; $data['stats_mail_1'] = $statsMailSelected; parent::display($data); return; } #To get all the month between the first open date and the last $begin = new DateTime(empty($campaignClickByMonth) ? $campaignOpenByMonth[0]->open_date : min([$campaignOpenByMonth[0]->open_date, $campaignClickByMonth[0]->date_click])); $end = new DateTime(empty($campaignClickByMonth) ? end($campaignOpenByMonth)->open_date : max([end($campaignOpenByMonth)->open_date, end($campaignClickByMonth)->date_click])); $end->modify('+1 day'); $interval = new DateInterval('P1M'); $daterange = new DatePeriod($begin, $interval, $end); $rangeMonth = []; foreach ($daterange as $date) { $rangeMonth[] = acym_getTime($date->format('Y-m-d H:i:s')); } #To get all the day between the first open date and the last $begin = new DateTime(empty($campaignClickByDay) ? $campaignOpenByDay[0]->open_date : min([$campaignOpenByDay[0]->open_date, $campaignClickByDay[0]->date_click])); $end = new DateTime(empty($campaignClickByDay) ? end($campaignOpenByDay)->open_date : max([end($campaignOpenByDay)->open_date, end($campaignClickByDay)->date_click])); $end->modify('+1 hour'); $interval = new DateInterval('P1D'); $daterange = new DatePeriod($begin, $interval, $end); $rangeDay = []; foreach ($daterange as $date) { $rangeDay[] = acym_getTime($date->format('Y-m-d H:i:s')); } #To get all the hour between the first open date and the last $begin = new DateTime(empty($campaignClickByHour) ? $campaignOpenByHour[0]->open_date : min([$campaignOpenByHour[0]->open_date, $campaignClickByHour[0]->date_click])); $end = new DateTime(empty($campaignClickByHour) ? end($campaignOpenByHour)->open_date : max([end($campaignOpenByHour)->open_date, end($campaignClickByHour)->date_click])); $end->modify('+1 min'); $interval = new DateInterval('PT1H'); $daterange = new DatePeriod($begin, $interval, $end); $rangeHour = []; foreach ($daterange as $date) { $rangeHour[] = acym_getTime($date->format('Y-m-d H:i:s')); } $openMonthArray = []; $openDayArray = []; $openHourArray = []; foreach ($campaignOpenByMonth as $one) { $openMonthArray[acym_date(acym_getTime($one->open_date), 'M Y')] = $one->open; } foreach ($campaignOpenByDay as $one) { $openDayArray[acym_date(acym_getTime($one->open_date), 'd M Y')] = $one->open; } foreach ($campaignOpenByHour as $one) { $openHourArray[acym_date(acym_getTime($one->open_date), 'd M Y H')] = $one->open; } $clickMonthArray = []; $clickDayArray = []; $clickHourArray = []; foreach ($campaignClickByMonth as $one) { $clickMonthArray[acym_date(acym_getTime($one->date_click), 'M Y')] = $one->click; } foreach ($campaignClickByDay as $one) { $clickDayArray[acym_date(acym_getTime($one->date_click), 'd M Y')] = $one->click; } foreach ($campaignClickByHour as $one) { $clickHourArray[acym_date(acym_getTime($one->date_click), 'd M Y H')] = $one->click; } $statsMailSelected->month = []; foreach ($rangeMonth as $one) { $one = acym_date($one, 'M Y'); $currentMonth = []; $currentMonth['open'] = empty($openMonthArray[$one]) ? 0 : $openMonthArray[$one]; $currentMonth['click'] = empty($clickMonthArray[$one]) ? 0 : $clickMonthArray[$one]; $statsMailSelected->month[$one] = $currentMonth; } $statsMailSelected->day = []; foreach ($rangeDay as $one) { $one = acym_date($one, 'd M Y'); $currentDay = []; $currentDay['open'] = empty($openDayArray[$one]) ? 0 : $openDayArray[$one]; $currentDay['click'] = empty($clickDayArray[$one]) ? 0 : $clickDayArray[$one]; $statsMailSelected->day[$one] = $currentDay; } $statsMailSelected->hour = []; foreach ($rangeHour as $one) { $one = acym_date($one, 'd M Y H'); $currentHour = []; $currentHour['open'] = empty($openHourArray[$one]) ? 0 : $openHourArray[$one]; $currentHour['click'] = empty($clickHourArray[$one]) ? 0 : $clickHourArray[$one]; $statsMailSelected->hour[$one.':00'] = $currentHour; } $data['stats_mail_1'] = $statsMailSelected; parent::display($data); } public function walkThrough() { $step = acym_getVar('int', 'step'); $config = acym_config(); $data = []; $data['step'] = $step; $data['from_email'] = $config->get('from_email'); $data['from_name'] = $config->get('from_name'); $data['bounce_email'] = $config->get('bounce_email'); $data['from_as_replyto'] = $config->get('from_as_replyto'); if ($config->get('from_as_replyto') == 1) { $data['replyto_email'] = $config->get('from_email'); $data['replyto_name'] = $config->get('from_name'); } else { $data['replyto_email'] = $config->get('replyto_email'); $data['replyto_name'] = $config->get('replyto_name'); } $data['mailer_method'] = $config->get('mailer_method'); if (!empty($data['mailer_method'])) { if ($data['mailer_method'] == 'phpmail' || $data['mailer_method'] == 'qmail' || $data['mailer_method'] == 'sendmail') { $data['use_server'] = true; } elseif ($data['mailer_method'] == 'mail') { $data['use_server'] = true; $data['mailer_method'] = 'phpmail'; } else { $data['use_server'] = false; } } else { $data['use_server'] = true; $data['mailer_method'] = 'phpmail'; } $data['smtp_auth'] = $config->get('smtp_auth'); $data['smtp_host'] = $config->get('smtp_host'); $data['smtp_keepalive'] = $config->get('smtp_keepalive'); $data['smtp_password'] = $config->get('smtp_password'); $data['smtp_port'] = $config->get('smtp_port'); $data['smtp_secured'] = $config->get('smtp_secured'); $data['smtp_username'] = $config->get('smtp_username'); $data['elasticemail_username'] = $config->get('elasticemail_username'); $data['elasticemail_password'] = $config->get('elasticemail_password'); $data['elasticemail_port'] = $config->get('elasticemail_port'); $data['special_chars'] = $config->get('special_chars'); $data['encoding_format'] = $config->get('encoding_format'); $data['charset'] = $config->get('charset'); $data['use_https'] = $config->get('use_https'); $data['embed_images'] = $config->get('embed_images'); $data['embed_files'] = $config->get('embed_files'); $data['small_display'] = $config->get('small_display', 0); acym_setVar('layout', 'walk_through'); parent::display($data); } public function passWalkThrough() { $newConfig = new stdClass(); $config = acym_config(); $newConfig->walk_through = 0; if ($config->get('templates_installed') == 0) { $updateHelper = acym_get('helper.update'); $updateHelper->installTemplate(); $newConfig->templates_installed = 1; } $config->save($newConfig); $this->listing(); } public function step1() { $information = acym_getVar('array', 'information'); $forReplyTo = acym_getVar('string', 'use_for_reply_to'); $newConfig = new stdClass(); $config = acym_config(); $newConfig->from_name = $information['from_name']; $newConfig->from_email = $information['from_email']; if ($forReplyTo == 'on') { $newConfig->from_as_replyto = 1; } else { $newConfig->from_as_replyto = 0; $newConfig->replyto_name = $information['reply_to_name']; $newConfig->replyto_email = $information['reply_to_email']; } $newConfig->bounce_email = $information['bounce_email']; $config->save($newConfig); $this->walkThrough(); } public function step2() { $mailerMethod = acym_getVar('string', 'mailer_method'); $newConfig = new stdClass(); $config = acym_config(); if (empty($mailerMethod)) { return; } $newConfig->mailer_method = $mailerMethod; if ($mailerMethod == "smtp") { $smtpInfos = acym_getVar('array', 'smtp'); $newConfig->smtp_auth = $smtpInfos['auth']; $newConfig->smtp_host = $smtpInfos['server']; $newConfig->smtp_keepalive = $smtpInfos['keepalive']; $newConfig->smtp_password = $smtpInfos['password']; $newConfig->smtp_port = $smtpInfos['port']; $newConfig->smtp_secured = $smtpInfos['secure']; $newConfig->smtp_username = $smtpInfos['username']; } elseif ($mailerMethod = "elasticemail") { $elasticInfos = acym_getVar('array', 'elastic'); $newConfig->elasticemail_username = $elasticInfos['username']; $newConfig->elasticemail_password = $elasticInfos['password']; $newConfig->elasticemail_port = $elasticInfos['port']; } $config->save($newConfig); $this->walkThrough(); } public function step3() { $serverConfig = acym_getVar('array', 'config'); $newConfig = new stdClass(); $config = acym_config(); $newConfig->special_chars = empty($serverConfig['special_char']) ? 0 : $serverConfig['special_char']; $newConfig->encoding_format = $serverConfig['encoding_format']; $newConfig->charset = $serverConfig['charset']; $newConfig->use_https = empty($serverConfig['https']) ? 0 : $serverConfig['https']; $newConfig->embed_images = empty($serverConfig['images']) ? 0 : $serverConfig['images']; $newConfig->embed_files = empty($serverConfig['attachments']) ? 0 : $serverConfig['attachments']; $config->save($newConfig); $this->walkThrough(); } public function step4() { $config = acym_config(); $newConfig = new stdClass(); $serverConfig = acym_getVar('array', 'interface'); $newConfig->small_display = empty($serverConfig['small_display']) ? 0 : $serverConfig['small_display']; $config->save($newConfig); $this->passWalkThrough(); } public function preMigration() { $elementToMigrate = acym_getVar("string", "element"); $helperMigration = acym_get('helper.migration'); $result = $helperMigration->preMigration($elementToMigrate); if (!empty($result["isOk"])) { echo $result["count"]; } else { echo "ERROR : "; if (!empty($result["errorInsert"])) { echo strtoupper(acym_translation("ACYM_INSERT_ERROR")); } if (!empty($result["errorClean"])) { echo strtoupper(acym_translation("ACYM_CLEAN_ERROR")); } if (!empty($result["errors"])) { echo "
"; foreach ($result["errors"] as $key => $oneError) { echo "
".$key." : ".$oneError; } } } exit; } public function migrate() { $elementToMigrate = acym_getVar("string", "element"); $helperMigration = acym_get('helper.migration'); $functionName = "do".ucfirst($elementToMigrate)."Migration"; $result = $helperMigration->$functionName($elementToMigrate); if (!empty($result["isOk"])) { echo json_encode($result); } else { echo "ERROR : "; if (!empty($result["errorInsert"])) { echo strtoupper(acym_translation("ACYM_INSERT_ERROR")); } if (!empty($result["errorClean"])) { echo strtoupper(acym_translation("ACYM_CLEAN_ERROR")); } if (!empty($result["errors"])) { echo "
"; foreach ($result["errors"] as $key => $oneError) { echo "
".$key." : ".$oneError; } } } exit; } public function migrationDone() { $config = acym_config(); $newConfig = new stdClass(); $newConfig->migration = "1"; $config->save($newConfig); $updateHelper = acym_get('helper.update'); $updateHelper->installNotifications(); $this->listing(); } private function acym_existsAcyMailing59() { $allTables = acym_getTables(); if (in_array(acym_getPrefix().'acymailing_config', $allTables)) { $queryVersion = 'SELECT `value` FROM #__acymailing_config WHERE `namekey` LIKE "version"'; $version = acym_loadResult($queryVersion); if (version_compare($version, '5.9.0') >= 0) { return true; } } return false; } public function upgrade() { acym_setVar('layout', 'upgrade'); $version = acym_getVar('string', 'version', 'enterprise'); $data = ['version' => $version]; parent::display($data); } }