function fn_settings_actions_addons_webmail(&$new_value, $old_value) { if ($new_value == 'A') { // Copy data directory to "var" $dir_data = DIR_ROOT . '/var/webmail'; if (fn_copy(DIR_ADDONS . 'webmail/lib/webmail/data', $dir_data) == false) { $msg = fn_get_lang_var('text_cannot_write_directory'); fn_set_notification('E', fn_get_lang_var('error'), str_replace('[directory]', $dir_data, $msg)); $new_value = 'D'; return false; } $config = Registry::get('config'); $_settings = $dir_data . '/settings/settings.xml'; // 1 step, generate config file $xml = simplexml_load_file($_settings); $xml->Common->DBLogin = $config['db_user']; $xml->Common->DBPassword = $config['db_password']; $xml->Common->DBName = $config['db_name']; $xml->Common->DBHost = $config['db_host']; if (fn_put_contents($_settings, $xml->asXML()) == false) { $msg = fn_get_lang_var('cannot_write_file'); fn_set_notification('E', fn_get_lang_var('error'), str_replace('[file]', $_settings, $msg)); $new_value = 'D'; return false; } include DIR_ADDONS . 'webmail/lib/webmail/web/class_settings.php'; include DIR_ADDONS . 'webmail/lib/webmail/web/class_dbstorage.php'; // Init mailbee core $null = null; $settings =& Settings::CreateInstance(); $dbStorage =& DbStorageCreator::CreateDatabaseStorage($null); $dbStorage->Connect(); $dbStorage->CreateTables($settings->DbPrefix); } }
/** * @access private * @param resource $link * @param Account $account * @param CLog $log * @return bool */ function Connect(&$link, &$account, &$log) { $setings =& Settings::CreateInstance(); if ($account->MailProtocol == MAILPROTOCOL_WMSERVER) { } else { $outHost = strlen($account->MailOutHost) > 0 ? $account->MailOutHost : $account->MailIncHost; $errno = $errstr = null; $log->WriteLine('[Connecting to server ' . $outHost . ' on port ' . $account->MailOutPort . ']'); $isSsl = strlen($outHost) > 6 && strtolower(substr($outHost, 0, 6)) == 'ssl://'; if (function_exists('openssl_open') && ($isSsl || $account->MailOutPort == 465)) { if (!$isSsl) { $outHost = 'ssl://' . $outHost; } } else { if ($isSsl) { $outHost = substr($outHost, 6); } } $link = @fsockopen($outHost, $account->MailOutPort, $errno, $errstr, 10); if (!$link) { setGlobalError('SMTP Error: ' . $errstr); $log->WriteLine(getGlobalError()); return false; } else { @socket_set_timeout($link, 10); return CSmtp::IsSuccess($link, $log); } } }
function CalendarUser() { $wm_settings =& Settings::CreateInstance(); if (!$wm_settings || !$wm_settings->isLoad) { return false; } $this->_settings = new CalSettings($wm_settings); }
/** * Class Constructor * * @return CommandCreator */ function CommandCreator($escapeType, $settings = null) { if (null === $settings) { $this->_settings =& Settings::CreateInstance(); } else { $this->_settings =& $settings; } $this->_escapeType = $escapeType; }
/** * @access private * @return WMSettings */ function WMSettings($param = true) { if (!is_null($param)) { die('error: WMSettings::CreateInstance()'); } $this->Settings =& Settings::CreateInstance(); $this->IsLoad = $this->Settings->isLoad; $this->Host = $this->Settings->WmServerHost; $this->IsLoad &= $this->_parse($this->Settings->WmServerRootPath); }
/** * @access private * @param bool $param[optional] = true * @return CLog */ function CLog($param = true) { if (!is_null($param)) { die(CANT_CALL_CONSTRUCTOR); } $settings =& Settings::CreateInstance(); $this->Enabled = $settings->EnableLogging; $this->LogFilePath = INI_DIR . '/' . LOG_PATH . '/' . LOG_FILENAME; if ($this->Enabled && !is_dir(INI_DIR . '/' . LOG_PATH)) { @mkdir(INI_DIR . '/' . LOG_PATH); } }
function CreateDatabaseStorage() { $wm_settings =& Settings::CreateInstance(); $settings = new CalSettings($wm_settings); static $instance; if (is_object($instance)) { return $instance; } switch ($settings->DbType) { default: case DB_MSSQLSERVER: $instance = MsSqlStorage($settings->DbHost, $settings->DbLogin, $settings->DbPassword); break; case DB_MYSQL: $instance = MySqlStorage($settings->DbHost, $settings->DbLogin, $settings->DbPassword); break; } return $instance; }
/** * @return bool */ public function InitManager() { require_once WM_ROOTPATH . 'common/class_settings.php'; $settings =& Settings::CreateInstance(); try { $factory = new DbDriverFactory($settings); $dbDriver = $factory->GetDriver(); $dbPrefix = $settings->DbPrefix; $escapeType = $factory->GetEscapeType(); } catch (BaseException $e) { $this->_registerException($e); return false; } if (isset($this->_defaultCommandeCreatorNames[$settings->DbType])) { require_once $this->_defaultCommandCreatorPath; $comandCreator = new $this->_defaultCommandeCreatorNames[$settings->DbType]($dbPrefix, $escapeType); //TODO the following refactoring is needed: //add possibility to use multiple models simultaneously $this->_initModel($dbDriver, $comandCreator); return $this->IsReady(); } return false; }
/** * @param Account $account * @return MySqlStorage */ function &CreateDatabaseStorage(&$account, $settings = null) { /** * @var DbStorage */ static $instance; if (is_object($instance)) { if ($account) { $instance->Account = $account; } return $instance; } require_once WM_ROOTPATH . 'common/class_dbstorage.php'; if (null === $settings) { $settings =& Settings::CreateInstance(); } switch ($settings->DbType) { case DB_MSSQLSERVER: $instance = new MsSqlStorage($account, $settings); break; default: case DB_MYSQL: $instance = new MySqlStorage($account, $settings); break; } if ($account) { $instance->Account = $account; } return $instance; }
function CLog($settings = null) { if (null === $settings) { $settings =& Settings::CreateInstance(); } $this->Enabled = $settings->EnableLogging; $this->LoggingSpecialUsers = $settings->LoggingSpecialUsers; $this->LoggingSpecialUsers = @file_exists(WM_ROOTPATH . '.LOG'); $this->IsLoggingSpecialUsersOn = isset($_SESSION['awm_logging_on']); $this->EnabledEventsLog = $settings->EnableEventsLogging; $this->LogLevel = $settings->LogLevel; $this->_driver = false ? new CLogDataBaseDriver($settings) : new CLogFileDriver($settings); }
/** * @param Account $account * @param short $pop3InboxSyncType optional * @return bool */ function CreateAccount(&$account, $inboxSyncType = FOLDERSYNC_NewEntireMessages) { $account->IdUser = $this->Id; $result = false; setGlobalError(PROC_ERROR_ACCT_CREATE); $dbStorage =& DbStorageCreator::CreateDatabaseStorage($account); if ($dbStorage->Connect()) { $defaultAccount =& $dbStorage->SelectAccountDataByLogin($account->Email, $account->MailIncLogin, true); if ($account->DefaultAccount && $defaultAccount != null && $defaultAccount[2] == 1) { setGlobalError(ACCT_CANT_ADD_DEF_ACCT); return false; } $settings =& Settings::CreateInstance(); //Load or create folder tree here switch ($account->MailProtocol) { case MAILPROTOCOL_WMSERVER: if (!$settings->EnableWmServer) { setGlobalError(PROC_ERROR_ACCT_CREATE); return false; } $emailArray = ConvertUtils::ParseEmail($account->Email); if (!$emailArray) { setGlobalError(JS_LANG_WarningCorrectEmail); return false; } $WMConsole = new CWmServerConsole(); if (!$WMConsole->Connect()) { setGlobalError(PROC_ERROR_ACCT_CREATE . '<br />' . $WMConsole->GetError()); return false; } if ($settings->WmAllowManageXMailAccounts) { if ($WMConsole->DomainExist($emailArray[1])) { if (!$WMConsole->UserExist($emailArray[1], $account->MailIncLogin)) { if (!$WMConsole->AddUser($emailArray[1], EmailAddress::GetAccountNameFromEmail($account->MailIncLogin), $account->MailIncPassword)) { setGlobalError(PROC_ERROR_ACCT_CREATE . '<br />' . $WMConsole->GetError()); return false; } } if (!$WMConsole->ChangeUserMaxMailBoxSize($emailArray[1], EmailAddress::GetAccountNameFromEmail($account->MailIncLogin), $account->MailboxLimit)) { setGlobalError(PROC_ERROR_ACCT_CREATE . '<br />' . $WMConsole->GetError()); return false; } } else { setGlobalError(DomainDosntExist . '<br />' . $WMConsole->GetError()); return false; } } $result = $dbStorage->InsertAccountData($account); $folders =& new FolderCollection(); if ($result) { $inboxFolder =& new Folder($account->Id, -1, FOLDERNAME_Inbox, FOLDERNAME_Inbox); if ($settings->AllowDirectMode && $settings->DirectModeIsDefault) { $inboxSyncType = FOLDERSYNC_DirectMode; } $inboxFolder->SyncType = $inboxSyncType; $folders->Add($inboxFolder); $folders->Add(new Folder($account->Id, -1, FOLDERNAME_SentItems, FOLDERNAME_SentItems, FOLDERSYNC_DontSync)); $folders->Add(new Folder($account->Id, -1, FOLDERNAME_Drafts, FOLDERNAME_Drafts, FOLDERSYNC_DontSync)); $folders->Add(new Folder($account->Id, -1, FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_DontSync)); } break; case MAILPROTOCOL_POP3: $result = $dbStorage->InsertAccountData($account); $folders =& new FolderCollection(); if ($result) { $inboxFolder =& new Folder($account->Id, -1, FOLDERNAME_Inbox, FOLDERNAME_Inbox); if ($settings->AllowDirectMode && $settings->DirectModeIsDefault) { $inboxSyncType = FOLDERSYNC_DirectMode; } $inboxFolder->SyncType = $inboxSyncType; $folders->Add($inboxFolder); $folders->Add(new Folder($account->Id, -1, FOLDERNAME_SentItems, FOLDERNAME_SentItems, FOLDERSYNC_DontSync)); $folders->Add(new Folder($account->Id, -1, FOLDERNAME_Drafts, FOLDERNAME_Drafts, FOLDERSYNC_DontSync)); $folders->Add(new Folder($account->Id, -1, FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_DontSync)); } break; case MAILPROTOCOL_IMAP4: setGlobalError(ACCT_CANT_CREATE_IMAP_ACCT); $mailStorage =& new ImapStorage($account); if ($mailStorage->Connect()) { $result = $dbStorage->InsertAccountData($account); if (!$result) { return false; } $folders =& $mailStorage->GetFolders(); $folders->SetSyncTypeToAll($inboxSyncType); if ($folders && $settings->AllowDirectMode && $settings->DirectModeIsDefault) { $folders->SetSyncTypeToAll(FOLDERSYNC_DirectMode); } $result &= $account->Update(); $result &= $folders != null; $mailStorage->Disconnect(); if (!$result) { return false; } $hasSentItems = false; $hasDrafts = false; $hasTrash = false; $s = $d = $t = null; $s =& $folders->GetFolderByType(FOLDERTYPE_SentItems); $d =& $folders->GetFolderByType(FOLDERTYPE_Drafts); if (USEIMAPTRASH) { $t =& $folders->GetFolderByType(FOLDERTYPE_Trash); } /* for ($i = 0, $c = $folders->Count(); $i < $c; $i++) { $folder = &$folders->Get($i); if (strtolower($folder->FullName) == strtolower(FOLDERNAME_Inbox) && $folder->SubFolders != null) { for ($j = 0, $k = $folder->SubFolders->Count(); $j < $k; $j++) { $inboxFolder =& $folder->SubFolders->Get($j); switch(strtolower($inboxFolder->Name)) { case strtolower(FOLDERNAME_Sent): case strtolower(FOLDERNAME_SentItems): $hasSentItems = true; break; case strtolower(FOLDERNAME_Drafts): $hasDrafts = true; break; case strtolower(FOLDERNAME_Trash): $hasTrash = true; break; } } } switch(strtolower($folder->FullName)) { case strtolower(FOLDERNAME_Sent): case strtolower(FOLDERNAME_SentItems): $hasSentItems = true; break; case strtolower(FOLDERNAME_Drafts): $hasDrafts = true; break; case strtolower(FOLDERNAME_Trash): $hasTrash = true; break; } if ($hasSentItems && $hasDrafts) { if (USEIMAPTRASH) { if ($hasTrash) { break; } } else { break; } } } if (!$hasSentItems) { $sentFolder =& new Folder($account->Id, -1, FOLDERNAME_SentItems, FOLDERNAME_SentItems, FOLDERSYNC_DontSync); $folders->Add($sentFolder); } if (!$hasDrafts) { $draftsFolder =& new Folder($account->Id, -1, FOLDERNAME_Drafts, FOLDERNAME_Drafts, FOLDERSYNC_DontSync); $folders->Add($draftsFolder); } if (USEIMAPTRASH && !$hasTrash) { $draftsFolder =& new Folder($account->Id, -1, FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_DontSync); $folders->Add($draftsFolder); }*/ if ($s === null) { $sentFolder =& new Folder($account->Id, -1, FOLDERNAME_SentItems, FOLDERNAME_SentItems, FOLDERSYNC_DontSync); $folders->Add($sentFolder); } if ($d === null) { $draftsFolder =& new Folder($account->Id, -1, FOLDERNAME_Drafts, FOLDERNAME_Drafts, FOLDERSYNC_DontSync); $folders->Add($draftsFolder); } if (USEIMAPTRASH && $t === null) { $trashFolder =& new Folder($account->Id, -1, FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_DontSync); $folders->Add($trashFolder); } } else { return false; } break; default: return false; } if ($result) { $folders = $folders->SortRootTree(); $result &= $dbStorage->CreateFolders($folders); } } if ($result) { setGlobalError(''); } return $result; }
/** * @return BaseProcessor */ function BaseProcessor() { if (!Session::has(ACCOUNT_ID)) { $this->SetError(1); } $accountId = Session::val(ACCOUNT_ID); $this->sArray = Session::val(SARRAY, array()); $this->settings =& Settings::CreateInstance(); if (!$this->settings || !$this->settings->isLoad) { $this->SetError(3); } if ($accountId) { if (Get::has(CHANGE_ACCID)) { $oldaccount =& Account::LoadFromDb(Session::val(ACCOUNT_ID, -1)); $accountId = Get::val(CHANGE_ACCID); if (!isset($_SESSION['attachtempdir'])) { $_SESSION['attachtempdir'] = md5(session_id()); } $fs =& new FileSystem(INI_DIR . '/temp', $oldaccount->Email, $oldaccount->Id); $attfolder =& new Folder($oldaccount->Id, -1, $_SESSION['attachtempdir']); $fs->DeleteDir($attfolder); unset($fs, $attfolder); $this->sArray[ACCOUNT_ID] = $accountId; $this->account =& Account::LoadFromDb($accountId); if (!$this->account || $this->account->IdUser != $oldaccount->IdUser) { $this->account = null; } else { $_SESSION[ACCOUNT_ID] = $accountId; unset($_SESSION[SARRAY]); $this->sArray = array(); } } else { $this->sArray[ACCOUNT_ID] = $accountId; $this->account =& Account::LoadFromDb($accountId); } if (!$this->account) { $this->SetError(2); } } else { $this->SetError(1); } if (!isset($this->sArray[ACCOUNT_ID]) || $this->sArray[ACCOUNT_ID] != $accountId) { $this->sArray[EDIT_ACCOUNT_ID] = $accountId; } $this->processor =& new MailProcessor($this->account); if (!$this->processor->DbStorage || !$this->processor->DbStorage->Connect()) { $this->SetError(5); } $this->db =& $this->processor->DbStorage; $this->accounts =& $this->GetAccounts(); $skins =& FileSystem::GetSkinsList(); $hasDefSettingsSkin = false; $normalSkin = false; foreach ($skins as $skinName) { if ($skinName == $this->settings->DefaultSkin) { $hasDefSettingsSkin = true; } if ($skinName == $this->account->DefaultSkin) { $normalSkin = true; break; } } if (!$normalSkin) { $this->account->DefaultSkin = $hasDefSettingsSkin ? $this->settings->DefaultSkin : ($this->account->DefaultSkin = $skins[0]); } $_SESSION[ATTACH_DIR] = Session::val(ATTACH_DIR, md5(session_id())); if (isset($this->sArray[SCREEN])) { $screen = Get::val(SCREEN, $this->sArray[SCREEN]); $this->sArray[SCREEN] = $screen; if ($this->account->AllowChangeSettings == false && ($screen == SET_ACCOUNT_PROF || $screen == SET_ACCOUNT_ADDACC)) { $this->sArray[SCREEN] = SCREEN_MAILBOX; } if (!$this->settings->AllowContacts && $screen == SCREEN_CONTACTS) { $this->sArray[SCREEN] = SCREEN_MAILBOX; } } else { $this->sArray[SCREEN] = Get::val(SCREEN, SCREEN_MAILBOX); } if (isset($this->sArray[FOLDER_ID])) { $this->sArray[FOLDER_ID] = Get::val(FOLDER_ID, $this->sArray[FOLDER_ID]); } else { $this->sArray[FOLDER_ID] = Get::val(FOLDER_ID, -1); } if (Get::has(FOLDER_ID) || Get::has(SCREEN)) { if (isset($this->sArray[SEARCH_ARRAY])) { unset($this->sArray[SEARCH_ARRAY]); } } if (Session::has(GOTOFOLDER)) { $this->sArray[GOTOFOLDER] = Session::val(GOTOFOLDER, ''); unset($_SESSION[GOTOFOLDER]); } if (isset($this->sArray[PAGE])) { $this->sArray[PAGE] = Get::val(PAGE, $this->sArray[PAGE]); } else { $this->sArray[PAGE] = 1; } if (Get::has(S_GETMODE)) { $this->sArray[SEARCH_ARRAY][S_TEXT] = Get::val(S_GETMODE, 'mini') == 'mini' ? Post::val('smallLookFor', '') : Post::val('bigLookFor', ''); if (!empty($this->sArray[SEARCH_ARRAY][S_TEXT])) { $this->sArray[SEARCH_ARRAY][S_FOLDER] = Post::val('qfolder', -2); $this->sArray[SEARCH_ARRAY][S_MODE] = Post::val('qmmode', 'onlyheaders'); $this->sArray[FOLDER_ID] = $this->sArray[SEARCH_ARRAY][S_FOLDER]; $this->sArray[PAGE] = 1; } else { if (Post::val('qfolder', -2) < 1) { $this->sArray[FOLDER_ID] = -1; } unset($this->sArray[SEARCH_ARRAY]); $this->sArray[PAGE] = 1; } } if (Get::has(S_GETMODECONTACT)) { $this->sArray[SEARCH_ARRAY][S_TEXT] = Get::val(S_GETMODECONTACT, 'mini') == 'mini' ? Post::val('smallLookFor', '') : Post::val('bigLookFor', ''); $this->sArray[CONTACT_ID] = Post::val(CONTACT_ID, -1); $this->sArray[CONTACT_PAGE] = 1; } if (isset($this->sArray[SEARCH_ARRAY][S_FOLDER])) { $this->sArray[FOLDER_ID] = $this->sArray[SEARCH_ARRAY][S_FOLDER]; } if (isset($this->sArray[EDIT_ACCOUNT_ID])) { $this->sArray[EDIT_ACCOUNT_ID] = Get::val(EDIT_ACCOUNT_ID, $this->sArray[EDIT_ACCOUNT_ID]); } else { $this->sArray[EDIT_ACCOUNT_ID] = $accountId; } if (Get::has(EDIT_ACCOUNT_ID)) { $this->sArray[SCREEN] = $this->sArray[SCREEN] == SET_ACCOUNT_ADDACC ? SET_ACCOUNT_PROF : $this->sArray[SCREEN]; } $this->sArray[CONTACT_PAGE] = isset($this->sArray[CONTACT_PAGE]) ? Get::val(CONTACT_PAGE, $this->sArray[CONTACT_PAGE]) : Get::val(CONTACT_PAGE, 1); $this->sArray[CONTACT_ORD] = isset($this->sArray[CONTACT_ORD]) ? Get::val(CONTACT_ORD, $this->sArray[CONTACT_ORD]) : Get::val(CONTACT_ORD, 0); if (isset($this->sArray[CONTACT_FLD])) { if (Get::val(CONTACT_FLD, $this->sArray[CONTACT_FLD]) != $this->sArray[CONTACT_FLD]) { $this->sArray[CONTACT_ORD] = 0; } $this->sArray[CONTACT_FLD] = Get::val(CONTACT_FLD, $this->sArray[CONTACT_FLD]); } else { $this->sArray[CONTACT_FLD] = Get::val(CONTACT_FLD, 0); } if (isset($_COOKIE['wm_vert_resizer']) || isset($_COOKIE['wm_horiz_resizer']) || isset($_COOKIE['wm_hide_folders'])) { if (isset($_COOKIE['wm_vert_resizer']) && strlen($_COOKIE['wm_vert_resizer']) > 0) { $this->account->VertResizer = (int) $_COOKIE['wm_vert_resizer']; setcookie('wm_vert_resizer', '0', time() - 24 * 3600); } if (isset($_COOKIE['wm_horiz_resizer']) && strlen($_COOKIE['wm_horiz_resizer']) > 0) { $this->account->HorizResizer = (int) $_COOKIE['wm_horiz_resizer']; setcookie('wm_horiz_resizer', '0', time() - 24 * 3600); } if (isset($_COOKIE['wm_hide_folders']) && strlen($_COOKIE['wm_hide_folders']) > 0) { $this->account->HideFolders = (bool) $_COOKIE['wm_hide_folders']; setcookie('wm_hide_folders', '0', time() - 24 * 3600); } $this->account->Update(); } $this->FillData(); $this->UpdateSession(); }
/** * @param string $email * @param string $login * @param int $startPage * @param string $password optional * @return bool */ function UserLoginByEmail($email, $login, $startPage = START_PAGE_IS_MAILBOX, $password = null, $toEmail = null, $separated = false) { $newAccount = new Account(); $settings =& Settings::CreateInstance(); if (!$settings || !$settings->isLoad) { $this->SetError(PROC_CANT_GET_SETTINGS); return false; } $url = 'webmail.php?check=1'; switch ($startPage) { default: $url .= '&start=' . START_PAGE_IS_MAILBOX; break; case START_PAGE_IS_NEW_MESSAGE: $url .= '&start=' . START_PAGE_IS_NEW_MESSAGE; if ($toEmail && strlen($toEmail) > 0) { $url .= '&to=' . $toEmail; } break; case START_PAGE_IS_MAILBOX: case START_PAGE_IS_SETTINGS: case START_PAGE_IS_CONTACTS: $url .= '&start=' . $startPage; break; case START_PAGE_IS_CALENDAR: if ($separated) { $url = 'calendar.php'; } else { $url .= '&start=' . $startPage; } break; } $loginArray =& Account::LoadFromDbByLogin($email, $login); if ($loginArray != null) { if ($loginArray[2] == '1') { if ($password === null) { $this->SetLoginInfo($loginArray[0], $loginArray[3], null, $separated); $this->ChangeLocation($url); return true; } else { if ($password == ConvertUtils::DecodePassword($loginArray[1], $newAccount)) { $this->SetLoginInfo($loginArray[0], $loginArray[3], null, $separated); $this->ChangeLocation($url); return true; } else { $account =& Account::LoadFromDb($loginArray[0]); $account->MailIncPassword = $password; $newprocessor = new MailProcessor($account); if ($newprocessor->MailStorage->Connect(true)) { if ($account->Update()) { $this->SetLoginInfo($account->Id, $account->IdUser, $account->DefaultLanguage, $separated); $this->ChangeLocation($url); return true; } else { $this->SetError(getGlobalError()); } } else { $this->SetError(PROC_WRONG_ACCT_PWD); } } } } else { $this->SetError(PROC_CANT_LOG_NONDEF); } } else { $this->SetError(ErrorPOP3IMAP4Auth); } return false; }
/** * @param Array $messageIdUidSet * @param Folder $folder optional * @return bool */ function DeleteMessages(&$messageIdUidSet, &$folder, $noMove = false) { ConvertUtils::SetLimits(); $messageIdSet = array_keys($messageIdUidSet); $messageUidSet = array_values($messageIdUidSet); $settings =& Settings::CreateInstance(); $result = true; switch ($this->_account->MailProtocol) { default: return false; case MAILPROTOCOL_POP3: if ($folder->Type == FOLDERTYPE_Trash || $noMove) { if ($folder->SyncType != FOLDERSYNC_DirectMode) { if ($this->DbStorage->Connect()) { $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $folder); $result &= $this->DbStorage->UpdateMailboxSize(); } } if ($this->_account->MailMode == MAILMODE_DeleteMessageWhenItsRemovedFromTrash || $this->_account->MailMode == MAILMODE_KeepMessagesOnServerAndDeleteMessageWhenItsRemovedFromTrash) { $result &= $this->MailStorage->Connect() && $this->MailStorage->DeleteMessages($messageUidSet, true, $folder); } return $result; } else { if ($folder->SyncType == FOLDERSYNC_DirectMode) { return $result && $this->MailStorage->Connect() && $this->MailStorage->DeleteMessages($messageUidSet, true, $folder); } } $folderList =& $this->GetFolders(); $trashFolder =& $folderList->GetFolderByType(FOLDERTYPE_Trash); return $noMove ? true : $this->MoveMessages($messageIdUidSet, $folder, $trashFolder); case MAILPROTOCOL_WMSERVER: if ($folder->Type == FOLDERTYPE_Trash || $folder->Type == FOLDERTYPE_Spam || $noMove) { if ($folder->SyncType != FOLDERSYNC_DirectMode) { if ($this->DbStorage->Connect()) { $result &= $this->DbStorage->DeleteMessages($messageIdSet, false, $folder); $result &= $this->DbStorage->UpdateMailboxSize(); } } return $result && $this->MailStorage->Connect() && $this->MailStorage->DeleteMessages($messageUidSet, true, $folder); } else { if ($folder->SyncType == FOLDERSYNC_DirectMode) { return $result && $this->MailStorage->Connect() && $this->MailStorage->DeleteMessages($messageUidSet, true, $folder); } } $folderList =& $this->GetFolders(); $trashFolder =& $folderList->GetFolderByType(FOLDERTYPE_Trash); if (!$trashFolder) { $trashFolder = new Folder($this->_account->Id, -1, FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_AllHeadersOnly); if (!$this->CreateFolder($trashFolder)) { return false; } } return $noMove ? true : $this->MoveMessages($messageIdUidSet, $folder, $trashFolder); case MAILPROTOCOL_IMAP4: //if ($settings->Imap4DeleteLikePop3 && $folder->SyncType != FOLDERSYNC_DirectMode) if ($settings->Imap4DeleteLikePop3) { $trashFolder = null; $folderList =& $this->GetFolders(); if ($folderList) { $trashFolderType =& $folderList->GetFolderByType(FOLDERTYPE_Trash); if (!$trashFolderType) { $trashFolderName =& $folderList->GetFolderByName(FOLDERNAME_Trash); if ($trashFolderName) { $trashFolderName->Type = FOLDERTYPE_Trash; $trashFolder = $trashFolderName; if (USE_DB && $this->DbStorage->Connect()) { $result &= $this->DbStorage->UpdateFolder($trashFolderName); } } else { $inboxFolderType =& $folderList->GetFolderByType(FOLDERTYPE_Inbox); if ($inboxFolderType && $inboxFolderType->SubFolders && $inboxFolderType->SubFolders->Count() > 0) { $trashFolderName2 =& $inboxFolderType->SubFolders->GetFolderByName(FOLDERNAME_Trash); if ($trashFolderName2) { $trashFolderName2->Type = FOLDERTYPE_Trash; $trashFolder = $trashFolderName2; if (USE_DB && $this->DbStorage->Connect()) { $result &= $this->DbStorage->UpdateFolder($trashFolderName2); } } } if (!$trashFolder) { $trashFolder = new Folder($this->_account->Id, -1, FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_DontSync); /* $trashFolder = new Folder($this->_account->Id, -1, FOLDERNAME_Trash, FOLDERNAME_Trash, $this->_account->GetDefaultFolderSync($settings)); */ if (!$this->CreateFolder($trashFolder)) { $trashFolder = null; } } } } else { $trashFolder = $trashFolderType; } if ($trashFolder) { if ($folder->Type == FOLDERTYPE_Trash || $noMove) { $result = true; $result &= $this->SetFlags($messageIdUidSet, $folder, MESSAGEFLAGS_Deleted, ACTION_Set); $result &= $this->PurgeFolder($folder); return $result; } return $noMove ? true : $this->MoveMessages($messageIdUidSet, $folder, $trashFolder); } return false; } } return $this->SetFlags($messageIdUidSet, $folder, MESSAGEFLAGS_Deleted, ACTION_Set) && $this->PurgeFolder($folder); } }
/** * @param string $email * @param string $login * @param int $startPage * @param string $password optional * @return bool */ function UserLoginByEmail($email, $login, $startPage = START_PAGE_IS_MAILBOX, $password = null, $toEmail = null) { $newAccount = new Account(); $settings =& Settings::CreateInstance(); if (!$settings || !$settings->isLoad) { $this->SetError(PROC_CANT_GET_SETTINGS); return false; } $getTemp = ''; switch ($startPage) { default: $getTemp = '&start=' . START_PAGE_IS_MAILBOX; break; case START_PAGE_IS_NEW_MESSAGE: if ($toEmail && strlen($toEmail) > 0) { $getTemp = '&start=' . START_PAGE_IS_NEW_MESSAGE . '&to=' . $toEmail; } else { $getTemp = '&start=' . START_PAGE_IS_NEW_MESSAGE; } break; case START_PAGE_IS_MAILBOX: case START_PAGE_IS_SETTINGS: case START_PAGE_IS_CONTACTS: case START_PAGE_IS_CALENDAR: $getTemp = '&start=' . $startPage; break; } $loginArray =& Account::LoadFromDbByLogin($email, $login); if ($loginArray != null) { if ($loginArray[2] == '1') { if ($password == null) { $_SESSION[ACCOUNT_ID] = $loginArray[0]; $_SESSION[USER_ID] = $loginArray[3]; $this->ChangeLocation($settings, $getTemp); return true; } else { if ($password == ConvertUtils::DecodePassword($loginArray[1], $newAccount)) { $_SESSION[ACCOUNT_ID] = $loginArray[0]; $_SESSION[USER_ID] = $loginArray[3]; $this->ChangeLocation($settings, $getTemp); return true; } else { $account =& Account::LoadFromDb($loginArray[0]); $account->MailIncPassword = $password; $newprocessor =& new MailProcessor($account); if ($newprocessor->MailStorage->Connect()) { $_SESSION['id_account'] = $loginArray[0]; $_SESSION[SESSION_LANG] = $account->DefaultLanguage; if ($account->Update()) { $this->ChangeLocation($settings, $getTemp); return true; } else { $this->SetError(getGlobalError()); return false; } } else { $this->SetError(PROC_WRONG_ACCT_PWD); return false; } } } } else { $this->SetError(PROC_CANT_LOG_NONDEF); return false; } } if ($this->_errorMessage == '') { $this->SetError(); } return false; }
/** * Class Constructor * * @return CommandCreator */ function CommandCreator($escapeType) { $this->_settings =& Settings::CreateInstance(); $this->_escapeType = $escapeType; }
/** * @return string */ function PrintDate() { $_settings =& Settings::CreateInstance(); $date =& $this->msg->GetDate(); $date->FormatString = $this->account->DefaultDateFormat; $date->TimeFormat = $this->account->DefaultTimeFormat; $_accountOffset = $_settings->AllowUsersChangeTimeZone ? $this->account->GetDefaultTimeOffset() : $this->account->GetDefaultTimeOffset($_settings->DefaultTimeZone); return $date->GetFormattedFullDate($_accountOffset); }
/** * @param string $email * @return int */ protected function _CheckCountOfUserAccounts($email) { require_once WM_ROOTPATH . 'common/class_account.php'; require_once WM_ROOTPATH . 'common/class_dbstorage.php'; $settings =& Settings::CreateInstance(); if (!$settings || !$settings->isLoad) { throw new WebMailModelException('settings error'); } if (!$settings->IncludeLang()) { throw new WebMailModelException('lang error'); } $acct = null; $dbStorage =& DbStorageCreator::CreateDatabaseStorage($acct, $settings); if ($dbStorage->Connect()) { return $dbStorage->CheckCountOfUserAccounts($email); } throw new WebMailModelException(getGlobalError()); }
/** * @return Logger */ function Logger() { $settings =& Settings::CreateInstance(); $this->Enabled = $settings->EnableLogging; $this->LogFilePath = INI_DIR . '/' . LOG_FILENAME; }
/** * @param Account $account * @return MySqlStorage */ function &CreateDatabaseStorage(&$account) { $settings =& Settings::CreateInstance(); /** * @var DbStorage */ static $instance; if (is_object($instance)) { $instance->Account =& $account; return $instance; } require_once WM_ROOTPATH . 'class_dbstorage.php'; switch ($settings->DbType) { default: case DB_MSSQLSERVER: $instance =& new MsSqlStorage($account); break; case DB_MYSQL: $instance =& new MySqlStorage($account); break; } return $instance; }
<?php header('Content-type: text/html; charset=utf-8'); if (!defined('WM_ROOTPATH')) { define('WM_ROOTPATH', dirname(__FILE__) . '/'); } require_once WM_ROOTPATH . 'common/inc_constants.php'; require_once WM_ROOTPATH . 'class_mailprocessor.php'; require_once WM_ROOTPATH . 'class_settings.php'; $errorDesc = ''; @session_name('PHPWEBMAILSESSID'); @session_start(); $settings =& Settings::CreateInstance(); if (!$settings || !$settings->isLoad || !$settings->IncludeLang()) { ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" /> <html> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <body onload="parent.CheckEndCheckMailHandler();"> <script type="text/javascript">parent.EndCheckMailHandler("Can't Load Language file");</script> </body> </html><?php @ob_end_flush(); exit; } @ob_start(); @ob_end_flush(); if (!isset($_SESSION[ACCOUNT_ID])) { ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" /> <html>
/** * @param Account $account * @param int $inboxSyncType = FOLDERSYNC_NewEntireMessages * @param bool $integrCall = false * @return bool */ function CreateAccount(&$account, $inboxSyncType = FOLDERSYNC_NewEntireMessages, $integrCall = false, $mailStorage = null) { $null = $folders = null; $account->IdUser = $this->Id; $result = false; setGlobalError(PROC_ERROR_ACCT_CREATE); $dbStorage =& DbStorageCreator::CreateDatabaseStorage($account); if ($dbStorage->Connect()) { if (USE_DB && !$account->IsInternal) { $defaultAccount =& $dbStorage->SelectAccountDataByLogin($account->Email, $account->MailIncLogin, true); if ($account->DefaultAccount && $defaultAccount != null && $defaultAccount[2] == 1) { setGlobalError(ACCT_CANT_ADD_DEF_ACCT); return false; } } $settings =& Settings::CreateInstance(); if ($settings->AllowDirectMode && $settings->DirectModeIsDefault) { $inboxSyncType = FOLDERSYNC_DirectMode; } $addFolders = null; /* load or create folder tree here */ switch ($account->MailProtocol) { case MAILPROTOCOL_POP3: $result = $account->IsInternal ? $dbStorage->UpdateOnlyAccoutnData($account) : $dbStorage->InsertAccountData($account); if ($result) { $folders = new FolderCollection(); $inboxFolder = new Folder($account->Id, -1, FOLDERNAME_Inbox, FOLDERNAME_Inbox); $inboxFolder->SyncType = $inboxSyncType; $folders->Add($inboxFolder); $createSystemFoldersInInbox = false; /* custom class */ wm_Custom::StaticUseMethod('ChangeValueOfSystemFoldersInInbox', array(&$createSystemFoldersInInbox)); $folderPrefix = ''; if ($createSystemFoldersInInbox) { $folderPrefix = $inboxFolder->FullName . $account->Delimiter; $inboxFolder->SubFolders = $inboxFolder->SubFolders ? $inboxFolder->SubFolders : new FolderCollection(); $addFolders =& $inboxFolder->SubFolders; } else { $addFolders =& $folders; } $addFolders->Add(new Folder($account->Id, -1, $folderPrefix . FOLDERNAME_SentItems, FOLDERNAME_SentItems, FOLDERSYNC_DontSync)); $addFolders->Add(new Folder($account->Id, -1, $folderPrefix . FOLDERNAME_Drafts, FOLDERNAME_Drafts, FOLDERSYNC_DontSync)); $addFolders->Add(new Folder($account->Id, -1, $folderPrefix . FOLDERNAME_Spam, FOLDERNAME_Spam, FOLDERSYNC_DontSync)); $addFolders->Add(new Folder($account->Id, -1, $folderPrefix . FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_DontSync)); } break; case MAILPROTOCOL_IMAP4: setGlobalError(ACCT_CANT_CREATE_IMAP_ACCT); if (null === $mailStorage) { $mailStorage = new ImapStorage($account, $null); } if ($mailStorage->Connect()) { if ($settings->TakeImapQuota) { if ($mailStorage->IsQuotaSupport()) { if ($account->ImapQuota === 1) { $mbl = $mailStorage->GetQuota(); if (false !== $mbl) { $account->MailboxLimit = GetGoodBigInt($mbl); } else { $account->ImapQuota = -1; } } } else { $account->ImapQuota = -1; } } if (USE_DB) { $result = $account->IsInternal ? $dbStorage->UpdateOnlyAccoutnData($account) : $dbStorage->InsertAccountData($account); if (!$result) { return false; } } else { $result = true; } $folders =& $mailStorage->GetFolders(); if ($folders == null) { if (USE_DB) { $dbStorage->DeleteAccountData($account->Id); } setGlobalError(PROC_ERROR_ACCT_CREATE); return false; } $inb =& $folders->GetFolderByType(FOLDERTYPE_Inbox); if ($inb === null) { if (USE_DB) { $dbStorage->DeleteAccountData($account->Id); } setGlobalError(PROC_ERROR_ACCT_CREATE); return false; } $folders->SetSyncTypeToAll($inboxSyncType); if (!$result) { return false; } $s = $d = $t = $sp = null; $s =& $folders->GetFolderByType(FOLDERTYPE_SentItems); $d =& $folders->GetFolderByType(FOLDERTYPE_Drafts); $sp =& $folders->GetFolderByType(FOLDERTYPE_Spam); if ($settings->Imap4DeleteLikePop3) { $t =& $folders->GetFolderByType(FOLDERTYPE_Trash); } $account->NameSpace = $mailStorage->GetNameSpacePrefix(); $account->UpdateNameSpace(); $createSystemFoldersInInbox = 0 === strpos($account->NameSpace, $inb->FullName); $createFoldersIfNotExist = $account->IsInternal ? true : CREATE_FOLDERS_IF_NOT_EXIST; /* custom class */ wm_Custom::StaticUseMethod('ChangeValueOfSystemFoldersInInbox', array(&$createSystemFoldersInInbox)); wm_Custom::StaticUseMethod('ChangeValueOfCreateFolderIfNotExist', array(&$createFoldersIfNotExist)); $folderPrefix = ''; if ($createSystemFoldersInInbox) { $folderPrefix = $inb->FullName . $account->Delimiter; $inb->SubFolders = $inb->SubFolders ? $inb->SubFolders : new FolderCollection(); $addFolders =& $inb->SubFolders; } else { $addFolders =& $folders; } if ($s === null) { $sentFolder = new Folder($account->Id, -1, $folderPrefix . FOLDERNAME_SentItems, FOLDERNAME_SentItems, FOLDERSYNC_DontSync); if ($createFoldersIfNotExist) { $sentFolder->SetFolderSync($inboxSyncType); $mailStorage->CreateFolder($sentFolder); } $addFolders->Add($sentFolder); } if ($d === null) { $draftsFolder = new Folder($account->Id, -1, $folderPrefix . FOLDERNAME_Drafts, FOLDERNAME_Drafts, FOLDERSYNC_DontSync); if ($createFoldersIfNotExist) { $draftsFolder->SetFolderSync($inboxSyncType); $mailStorage->CreateFolder($draftsFolder); } $addFolders->Add($draftsFolder); } if ($sp === null) { $spamFolder = new Folder($account->Id, -1, $folderPrefix . FOLDERNAME_Spam, FOLDERNAME_Spam, FOLDERSYNC_DontSync); if ($createFoldersIfNotExist) { $spamFolder->SetFolderSync($inboxSyncType); $mailStorage->CreateFolder($spamFolder); } $addFolders->Add($spamFolder); } if ($settings->Imap4DeleteLikePop3 && $t === null) { $trashFolder = new Folder($account->Id, -1, $folderPrefix . FOLDERNAME_Trash, FOLDERNAME_Trash, FOLDERSYNC_DontSync); if ($createFoldersIfNotExist) { $trashFolder->SetFolderSync($inboxSyncType); $mailStorage->CreateFolder($trashFolder); } $addFolders->Add($trashFolder); } $mailStorage->Disconnect(); } else { return false; } break; default: return false; } if ($result && $folders) { $folders = $folders->SortRootTree(); if (USE_DB) { $result &= $dbStorage->CreateFolders($folders); } } } if ($result) { setGlobalError(''); if ($account && $account->MailProtocol == MAILPROTOCOL_IMAP4 && $account->ImapQuota === 1) { $account->UpdateMailBoxLimit(); } } return $result; }