| Server IP : 103.161.17.216 / Your IP : 216.73.216.1 Web Server : nginx/1.18.0 System : Linux tipsysaigoncharming 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 User : www-data ( 33) PHP Version : 7.4.3-4ubuntu2.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/app.houseland.info/application/controllers/admin/ |
Upload File : |
<?php
defined('BASEPATH') or exit('No direct script access allowed');
class Emails extends AdminController
{
public function __construct()
{
parent::__construct();
$this->load->model('emails_model');
}
/* List all email templates */
public function index()
{
if (staff_cant('view', 'email_templates')) {
access_denied('email_templates');
}
$langCheckings = get_option('email_templates_language_checks');
if ($langCheckings == '') {
$langCheckings = [];
} else {
$langCheckings = unserialize($langCheckings);
}
$this->db->where('language', 'english');
$email_templates_english = $this->db->get(db_prefix() . 'emailtemplates')->result_array();
foreach ($this->app->get_available_languages() as $avLanguage) {
if ($avLanguage != 'english') {
foreach ($email_templates_english as $template) {
// Result is cached and stored in database
// This page may perform 1000 queries per request
if (isset($langCheckings[$template['slug'] . '-' . $avLanguage])) {
continue;
}
$notExists = total_rows(db_prefix() . 'emailtemplates', [
'slug' => $template['slug'],
'language' => $avLanguage,
]) == 0;
$langCheckings[$template['slug'] . '-' . $avLanguage] = 1;
if ($notExists) {
$data = [];
$data['slug'] = $template['slug'];
$data['type'] = $template['type'];
$data['language'] = $avLanguage;
$data['name'] = $template['name'] . ' [' . $avLanguage . ']';
$data['subject'] = $template['subject'];
$data['message'] = '';
$data['fromname'] = $template['fromname'];
$data['plaintext'] = $template['plaintext'];
$data['active'] = $template['active'];
$data['order'] = $template['order'];
$this->db->insert(db_prefix() . 'emailtemplates', $data);
}
}
}
}
update_option('email_templates_language_checks', serialize($langCheckings));
$data['staff'] = $this->emails_model->get([
'type' => 'staff',
'language' => 'english',
]);
$data['credit_notes'] = $this->emails_model->get([
'type' => 'credit_note',
'language' => 'english',
]);
$data['tasks'] = $this->emails_model->get([
'type' => 'tasks',
'language' => 'english',
]);
$data['client'] = $this->emails_model->get([
'type' => 'client',
'language' => 'english',
]);
$data['tickets'] = $this->emails_model->get([
'type' => 'ticket',
'language' => 'english',
]);
$data['invoice'] = $this->emails_model->get([
'type' => 'invoice',
'language' => 'english',
]);
$data['estimate'] = $this->emails_model->get([
'type' => 'estimate',
'language' => 'english',
]);
$data['contracts'] = $this->emails_model->get([
'type' => 'contract',
'language' => 'english',
]);
$data['proposals'] = $this->emails_model->get([
'type' => 'proposals',
'language' => 'english',
]);
$data['projects'] = $this->emails_model->get([
'type' => 'project',
'language' => 'english',
]);
$data['leads'] = $this->emails_model->get([
'type' => 'leads',
'language' => 'english',
]);
$data['gdpr'] = $this->emails_model->get([
'type' => 'gdpr',
'language' => 'english',
]);
$data['subscriptions'] = $this->emails_model->get([
'type' => 'subscriptions',
'language' => 'english',
]);
$data['estimate_request'] = $this->emails_model->get([
'type' => 'estimate_request',
'language' => 'english',
]);
$data['notifications'] = $this->emails_model->get([
'type' => 'notifications',
'language' => 'english',
]);
$data['title'] = _l('email_templates');
$data['hasPermissionEdit'] = staff_can('edit', 'email_templates');
$this->load->view('admin/emails/email_templates', $data);
}
/* Edit email template */
public function email_template($id)
{
if (staff_cant('view', 'email_templates')) {
access_denied('email_templates');
}
if (!$id) {
redirect(admin_url('emails'));
}
if ($this->input->post()) {
if (staff_cant('edit', 'email_templates')) {
access_denied('email_templates');
}
$data = $this->input->post();
$tmp = $this->input->post(null, false);
foreach ($data['message'] as $key => $contents) {
$data['message'][$key] = $tmp['message'][$key];
}
foreach ($data['subject'] as $key => $contents) {
$data['subject'][$key] = $tmp['subject'][$key];
}
$data['fromname'] = $tmp['fromname'];
$success = $this->emails_model->update($data, $id);
if ($success) {
set_alert('success', _l('updated_successfully', _l('email_template')));
}
redirect(admin_url('emails/email_template/' . $id));
}
// English is not included here
$data['available_languages'] = $this->app->get_available_languages();
if (($key = array_search('english', $data['available_languages'])) !== false) {
unset($data['available_languages'][$key]);
}
$data['available_merge_fields'] = $this->app_merge_fields->all();
$data['template'] = $this->emails_model->get_email_template_by_id($id);
$title = $data['template']->name;
$data['title'] = $title;
$this->load->view('admin/emails/template', $data);
}
public function enable_by_type($type)
{
if (staff_can('edit', 'email_templates')) {
$this->emails_model->mark_as_by_type($type, 1);
}
redirect(admin_url('emails'));
}
public function disable_by_type($type)
{
if (staff_can('edit', 'email_templates')) {
$this->emails_model->mark_as_by_type($type, 0);
}
redirect(admin_url('emails'));
}
public function enable($id)
{
if (staff_can('edit', 'email_templates')) {
$template = $this->emails_model->get_email_template_by_id($id);
$this->emails_model->mark_as($template->slug, 1);
}
redirect(admin_url('emails'));
}
public function disable($id)
{
if (staff_can('edit', 'email_templates')) {
$template = $this->emails_model->get_email_template_by_id($id);
$this->emails_model->mark_as($template->slug, 0);
}
redirect(admin_url('emails'));
}
/* Since version 1.0.1 - test your smtp settings */
public function sent_smtp_test_email()
{
if ($this->input->post()) {
$this->load->config('email');
// Simulate fake template to be parsed
$template = new StdClass();
$template->message = get_option('email_header') . 'This is test SMTP email. <br />If you received this message that means that your SMTP settings is set correctly.' . get_option('email_footer');
$template->fromname = get_option('companyname') != '' ? get_option('companyname') : 'TEST';
$template->subject = 'SMTP Setup Testing';
$template = parse_email_template($template);
hooks()->do_action('before_send_test_smtp_email');
$this->email->initialize();
if (get_option('mail_engine') == 'phpmailer') {
$this->email->set_debug_output(function ($err) {
if (!isset($GLOBALS['debug'])) {
$GLOBALS['debug'] = '';
}
$GLOBALS['debug'] .= $err . '<br />';
return $err;
});
$this->email->set_smtp_debug(3);
}
$this->email->set_newline(config_item('newline'));
$this->email->set_crlf(config_item('crlf'));
$this->email->from(get_option('smtp_email'), $template->fromname);
$this->email->to($this->input->post('test_email'));
$systemBCC = get_option('bcc_emails');
if ($systemBCC != '') {
$this->email->bcc($systemBCC);
}
$this->email->subject($template->subject);
$this->email->message($template->message);
if ($this->email->send(true)) {
set_alert('success', 'Seems like your SMTP settings is set correctly. Check your email now.');
hooks()->do_action('smtp_test_email_success');
} else {
set_debug_alert('<h1>Your SMTP settings are not set correctly here is the debug log.</h1><br />' . $this->email->print_debugger() . (isset($GLOBALS['debug']) ? $GLOBALS['debug'] : ''));
hooks()->do_action('smtp_test_email_failed');
}
}
}
public function delete_queued_email($id)
{
if (staff_can('edit', 'settings')) {
$this->email->delete_queued_email($id);
set_alert('success', _l('deleted', _l('email_queue')));
}
redirect(admin_url('settings?group=email&tab=email_queue'));
}
}