/** * Add email account * * @access public * @param void * @return null */ function add_account() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } $this->setTemplate('add_account'); if (!MailAccount::canAdd(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $mailAccount = new MailAccount(); tpl_assign('mailAccount', $mailAccount); $mailAccount_data = array_var($_POST, 'mailAccount'); tpl_assign('mailAccount_data', $mailAccount_data); // get mail account users $mau = array(logged_user()->getId() => array('name' => logged_user()->getDisplayName(), 'can_edit' => true)); tpl_assign('mailAccountUsers', $mau); $is_admin = logged_user()->isAdministrator(); tpl_assign('is_admin', $is_admin); if (is_array(array_var($_POST, 'mailAccount'))) { $email_address = array_var(array_var($_POST, 'mailAccount'), 'email_addr'); /*if (MailAccounts::findOne(array('conditions' => "`email` = '$email_address'")) != null) { flash_error(lang('email address already exists')); ajx_current("empty"); return; }*/ try { $selected_user = array_var($_POST, 'users_select_box'); if (!$is_admin) { $mail_account_user = logged_user(); } else { $mail_account_user = Users::findById($selected_user); } $mailAccount_data['user_id'] = $mail_account_user->getId(); if (!array_var($mailAccount_data, 'del_mails_from_server', false)) { $mailAccount_data['del_from_server'] = 0; } $mailAccount->setFromAttributes($mailAccount_data); $mailAccount->setPassword(MailUtilities::ENCRYPT_DECRYPT($mailAccount->getPassword())); $mailAccount->setSmtpPassword(MailUtilities::ENCRYPT_DECRYPT($mailAccount->getSmtpPassword())); $outbox_folder = array_var($_POST, 'outbox_select_box'); if (config_option("sent_mails_sync") && isset($outbox_folder)) { $mailAccount->setSyncPass(MailUtilities::ENCRYPT_DECRYPT($mailAccount_data['sync_pass'])); $mailAccount->setSyncFolder($outbox_folder); } DB::beginWork(); $mailAccount->save(); // process users $account_users = $mail_account_user->getCompany()->getUsers(); $user_access = array_var($_POST, 'user_access'); foreach ($account_users as $account_user) { $user_id = $account_user->getId(); $access = $user_access[$user_id]; if ($access != 'none' || $user_id == $mail_account_user->getId()) { $account_user = new MailAccountUser(); $account_user->setAccountId($mailAccount->getId()); $account_user->setUserId($user_id); $account_user->setCanEdit($access == 'write'); $account_user->save(); } } if ($mailAccount->getIsImap() && is_array(array_var($_POST, 'check'))) { $real_folders = MailUtilities::getImapFolders($mailAccount); foreach ($real_folders as $folder_name) { if (!MailAccountImapFolders::findById(array('account_id' => $mailAccount->getId(), 'folder_name' => $folder_name))) { $acc_folder = new MailAccountImapFolder(); $acc_folder->setAccountId($mailAccount->getId()); $acc_folder->setFolderName($folder_name); $acc_folder->setCheckFolder($folder_name == 'INBOX'); // By default only INBOX is checked $acc_folder->save(); } } $imap_folders = MailAccountImapFolders::getMailAccountImapFolders($mailAccount->getId()); $checks = array_var($_POST, 'check'); if (is_array($imap_folders) && count($imap_folders)) { foreach ($imap_folders as $folder) { $folder->setCheckFolder(false); foreach ($checks as $name => $cf) { $name = str_replace(array('¡', '!'), array('[', ']'), $name); //to avoid a mistaken array if name contains [ if (strcasecmp($name, $folder->getFolderName()) == 0) { $folder->setCheckFolder($cf == 'checked'); break; } } $folder->save(); } } } // personal settings if (array_var($_POST, 'is_default')) { $user_accounts = MailAccountUsers::getByUser(logged_user()); foreach ($user_accounts as $acc) { if ($acc->getAccountId() != $mailAccount->getId()) { $acc->setIsDefault(false); $acc->save(); } else { $acc->setIsDefault(true); $acc->save(); } } } $logged_user_settings = MailAccountUsers::getByAccountAndUser($mailAccount, logged_user()); $logged_user_settings->setSignature(array_var($_POST, 'signature')); $logged_user_settings->setSenderName(array_var($_POST, 'sender_name')); $logged_user_settings->save(); if ($mailAccount->canView(logged_user())) { evt_add("mail account added", array("id" => $mailAccount->getId(), "name" => $mailAccount->getName(), "email" => $mailAccount->getEmail())); } // Restore old emails, if account was deleted and its emails weren't $old_emails = MailContents::findAll(array('conditions' => '`created_by_id` = ' . $mail_account_user->getId() . " AND `account_email` = '" . $mailAccount->getEmail() . "' AND `account_id` NOT IN (SELECT `id` FROM `" . TABLE_PREFIX . "mail_accounts`)")); if (isset($old_emails) && is_array($old_emails) && count($old_emails)) { foreach ($old_emails as $email) { $email->setAccountId($mailAccount->getId()); $email->save(); } } DB::commit(); flash_success(lang('success add mail account', $mailAccount->getName())); ajx_current("back"); // Error... } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } // try } // if }
/** * Add email account * * @access public * @param void * @return null */ function add_account() { if (logged_user()->isGuest()) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } if (!MailAccount::canAdd(logged_user())) { flash_error(lang('no access permissions')); ajx_current("empty"); return; } // if $mailAccount = new MailAccount(); tpl_assign('mailAccount', $mailAccount); $mailAccount_data = array_var($_POST, 'mailAccount'); tpl_assign('mailAccount_data', $mailAccount_data); // get mail account users $mau = array(logged_user()->getId() => array('name' => logged_user()->getObjectName(), 'can_edit' => true)); tpl_assign('mailAccountUsers', $mau); $is_admin = logged_user()->isAdministrator(); tpl_assign('is_admin', $is_admin); if (is_array(array_var($_POST, 'mailAccount'))) { $email_address = array_var(array_var($_POST, 'mailAccount'), 'email_addr'); /*if (MailAccounts::findOne(array('conditions' => "`email` = '$email_address'")) != null) { flash_error(lang('email address already exists')); ajx_current("empty"); return; }*/ try { $selected_user = array_var($_POST, 'users_select_box'); if (!$is_admin) { $mail_account_user = logged_user(); } else { $mail_account_user = Contacts::findById($selected_user); } $mailAccount_data['sync_ssl'] = array_var($mailAccount_data, 'sync_ssl') == "checked"; $mailAccount_data['contact_id'] = $mail_account_user->getId(); if (!array_var($mailAccount_data, 'del_mails_from_server', false)) { $mailAccount_data['del_from_server'] = 0; } if (!array_var($mailAccount_data, 'mark_read_on_server', false)) { $mailAccount_data['mark_read_on_server'] = 0; } $mailAccount->setFromAttributes($mailAccount_data); $mailAccount->setServer(trim($mailAccount->getServer())); $mailAccount->setPassword(MailUtilities::ENCRYPT_DECRYPT($mailAccount->getPassword())); $mailAccount->setSmtpPassword(MailUtilities::ENCRYPT_DECRYPT($mailAccount->getSmtpPassword())); $outbox_folder = array_var($_POST, 'outbox_select_box'); if (config_option("sent_mails_sync") && isset($outbox_folder)) { $mailAccount->setSyncPass(MailUtilities::ENCRYPT_DECRYPT($mailAccount_data['sync_pass'])); $mailAccount->setSyncFolder($outbox_folder); } $member_ids = json_decode(array_var($_POST, 'members')); $member_ids_str = ""; foreach ($member_ids as $mid) { if (is_numeric($mid)) { $member_ids_str .= ($member_ids_str == "" ? "" : ",") . $mid; } } $mailAccount->setMemberId($member_ids_str); DB::beginWork(); $mailAccount->save(); // process users $account_users = Contacts::getAllUsers(); $user_access = array_var($_POST, 'user_access'); foreach ($account_users as $account_user) { $user_id = $account_user->getId(); $access = array_var($user_access, $user_id); if (!is_null($access) && $access != 'none' || $user_id == $mail_account_user->getId()) { $account_user = new MailAccountContact(); $account_user->setAccountId($mailAccount->getId()); $account_user->setContactId($user_id); $account_user->setCanEdit($access == 'write'); $account_user->save(); } } if ($mailAccount->getIsImap() && is_array(array_var($_POST, 'check'))) { $real_folders = MailUtilities::getImapFolders($mailAccount); foreach ($real_folders as $folder_name) { if (!MailAccountImapFolders::findById(array('account_id' => $mailAccount->getId(), 'folder_name' => $folder_name))) { $acc_folder = new MailAccountImapFolder(); $acc_folder->setAccountId($mailAccount->getId()); $acc_folder->setFolderName($folder_name); $acc_folder->setCheckFolder($folder_name == 'INBOX'); // By default only INBOX is checked $acc_folder->save(); } } $imap_folders = MailAccountImapFolders::getMailAccountImapFolders($mailAccount->getId()); $checks = array_var($_POST, 'check'); if (is_array($imap_folders) && count($imap_folders)) { foreach ($imap_folders as $folder) { $folder->setCheckFolder(false); foreach ($checks as $name => $cf) { $name = str_replace(array('¡', '!'), array('[', ']'), $name); //to avoid a mistaken array if name contains [ if (strcasecmp($name, $folder->getFolderName()) == 0) { $folder->setCheckFolder($cf == 'checked'); break; } } $folder->save(); } } } // personal settings if (array_var($_POST, 'is_default')) { $user_accounts = MailAccountContacts::getByContact(logged_user()); foreach ($user_accounts as $acc) { if ($acc->getAccountId() != $mailAccount->getId()) { $acc->setIsDefault(false); $acc->save(); } else { $acc->setIsDefault(true); $acc->save(); } } } $logged_user_settings = MailAccountContacts::getByAccountAndContact($mailAccount, logged_user()); if ($logged_user_settings instanceof MailAccountContact) { $logged_user_settings->setSignature(array_var($_POST, 'signature')); $logged_user_settings->setSenderName(array_var($_POST, 'sender_name')); $logged_user_settings->save(); } if ($mailAccount->canView(logged_user())) { evt_add("mail account added", array("id" => $mailAccount->getId(), "name" => $mailAccount->getName(), "email" => $mailAccount->getEmail())); } // Restore old emails, if account was deleted and its emails weren't DB::executeAll("\r\n\t\t\t\t\t\tUPDATE " . TABLE_PREFIX . "mail_contents mc INNER JOIN " . TABLE_PREFIX . "objects o ON mc.object_id = o.id\r\n\t\t\t\t\t\t\tSET mc.account_id=" . $mailAccount->getId() . " \r\n\t\t\t\t\t\t\tWHERE o.`created_by_id` = " . $mail_account_user->getId() . " \r\n\t\t\t\t\t\t\t\t\tAND mc.`account_email` = '" . $mailAccount->getEmail() . "' \r\n\t\t\t\t\t\t\t\t\tAND mc.`account_id` NOT IN (SELECT `id` FROM `" . TABLE_PREFIX . "mail_accounts`)"); DB::commit(); flash_success(lang('success add mail account', $mailAccount->getName())); ajx_current("back"); // Error... } catch (Exception $e) { DB::rollback(); ajx_current("empty"); flash_error($e->getMessage()); } } }