/** * @param XmlDomNode $xmlTree * @param array $mainArray */ protected function initFromXmlRoot(&$xmlTree) { if ($xmlTree && $xmlTree->Children && count($xmlTree->Children) > 0) { if ('Folders' === $xmlTree->TagName) { foreach ($xmlTree->Children as $node) { if ('Folder' == $node->TagName) { $this->_main[] = ConvertUtils::WMBackHtmlSpecialChars($node->Value); } } } else { foreach ($xmlTree->Children as $node) { $this->initFromXmlRoot($node); } } } }
/** * @param Account $_account * @param XmlDocument $_xmlObj * @return WebMailMessage */ function &CreateMessage(&$_account, &$_xmlObj, &$_xmlRes) { $_messageNode =& $_xmlObj->XmlRoot->GetChildNodeByTagName('message'); $_headersNode =& $_messageNode->GetChildNodeByTagName('headers'); $_message = new WebMailMessage(); $GLOBALS[MailDefaultCharset] = $_account->GetUserCharset(); $GLOBALS[MailInputCharset] = $_account->GetUserCharset(); $GLOBALS[MailOutputCharset] = $_account->GetDefaultOutCharset(); $_message->Headers->SetHeaderByName(MIMEConst_MimeVersion, '1.0'); $_message->Headers->SetHeaderByName(MIMEConst_XMailer, XMAILERHEADERVALUE); $ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : null; if (null !== $ip) { $_message->Headers->SetHeaderByName(MIMEConst_XOriginatingIp, $ip); } $_fromAcctId = $_messageNode->GetAttribute('from_acct_id', -1); $_message->IdMsg = $_messageNode->GetAttribute('id', -1); $_message->SetPriority($_messageNode->GetAttribute('priority', 3)); $_message->SetSensivity($_messageNode->GetAttribute('sensivity', MIME_SENSIVITY_NOTHING)); $_message->Uid = $_messageNode->GetChildValueByTagName('uid'); $_serverAddr = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['SERVER_NAME'] : 'cantgetservername'; $_message->Headers->SetHeaderByName(MIMEConst_MessageID, '<' . substr(session_id(), 0, 7) . '.' . md5(time()) . '@' . $_serverAddr . '>'); if ($_fromAcctId > 0) { $_fromAcct = null; if ($_account->Id == $_fromAcctId) { $_fromAcct = $_account; } else { CXmlProcessing::CheckAccountAccess($_fromAcctId, $_xmlRes); $_fromAcct = CXmlProcessing::AccountCheckAndLoad($_xmlRes, $_fromAcctId, false, false); } if ($_fromAcct) { $email = $_fromAcct->GetFriendlyEmail(); /* custom class */ wm_Custom::StaticUseMethod('ChangeAccountEmailToFake', array(&$email)); $_message->SetFromAsString(ConvertUtils::WMBackHtmlSpecialChars($email)); } } else { $_temp = $_headersNode->GetChildValueByTagName('from'); if ($_temp) { /* custom class */ wm_Custom::StaticUseMethod('ChangeAccountEmailToFake', array(&$_temp)); $_message->SetFromAsString(ConvertUtils::WMBackHtmlSpecialChars($_temp)); } } $_temp = $_headersNode->GetChildValueByTagName('to'); if ($_temp) { $_message->SetToAsString(ConvertUtils::WMBackHtmlSpecialChars($_temp)); } $_temp = $_headersNode->GetChildValueByTagName('cc'); if ($_temp) { $_message->SetCcAsString(ConvertUtils::WMBackHtmlSpecialChars($_temp)); } $_temp = $_headersNode->GetChildValueByTagName('bcc'); if ($_temp) { $_message->SetBccAsString(ConvertUtils::WMBackHtmlSpecialChars($_temp)); } $_temp = $_headersNode->GetChildValueByTagName('mailconfirmation'); if ($_temp) { /* custom class */ wm_Custom::StaticUseMethod('ChangeAccountEmailToFake', array(&$_temp)); $_message->SetReadMailConfirmationAsString(ConvertUtils::WMBackHtmlSpecialChars($_temp)); } $_message->SetSubject(ConvertUtils::WMBackHtmlSpecialChars($_headersNode->GetChildValueByTagName('subject'))); $_message->SetDate(new CDateTime(time())); $_bodyNode =& $_messageNode->GetChildNodeByTagName('body'); if (isset($_bodyNode->Attributes['is_html']) && $_bodyNode->Attributes['is_html']) { $_message->TextBodies->HtmlTextBodyPart = ConvertUtils::AddHtmlTagToHtmlBody(str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::BackImagesToHtmlBody(ConvertUtils::WMBackHtmlNewCode($_bodyNode->Value))))); $_message->TextBodies->PlainTextBodyPart = $_message->TextBodies->HtmlToPlain(); } else { $_message->TextBodies->PlainTextBodyPart = str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::WMBackHtmlNewCode($_bodyNode->Value))); } $_attachmentsNode =& $_messageNode->GetChildNodeByTagName('attachments'); if ($_attachmentsNode != null) { $tempFiles =& CTempFiles::CreateInstance($_account); $_log =& CLog::CreateInstance(); $_attachmentsKeys = array_keys($_attachmentsNode->Children); foreach ($_attachmentsKeys as $_key) { $_attachNode =& $_attachmentsNode->Children[$_key]; $_tempName = $_attachNode->GetChildValueByTagName('temp_name'); $_fileName = $_attachNode->GetChildValueByTagName('name'); $_attachCid = 'attach.php?img&tn=' . $_tempName . '&filename=' . $_fileName; $_replaceCid = md5(time() . $_fileName); $_mime_type = $_attachNode->GetChildValueByTagName('mime_type'); if ($_mime_type === '') { $_mime_type = ConvertUtils::GetContentTypeFromFileName($_fileName); } $_isInline = (bool) $_attachNode->GetAttribute('inline', false); if (!$_message->Attachments->AddFromBinaryBody($tempFiles->LoadFile($_attachNode->GetChildValueByTagName('temp_name')), $_fileName, $_mime_type, $_isInline)) { $_log->WriteLine('Error Add tempfile in message: ' . getGlobalError(), LOG_LEVEL_ERROR); } if (isset($_bodyNode->Attributes['is_html']) && $_bodyNode->Attributes['is_html']) { if (strpos($_message->TextBodies->HtmlTextBodyPart, $_attachCid) !== false) { $_attachment =& $_message->Attachments->GetLast(); if ($_attachment) { $_attachment->MimePart->Headers->SetHeaderByName(MIMEConst_ContentID, '<' . $_replaceCid . '>'); $_message->TextBodies->HtmlTextBodyPart = str_replace($_attachCid, 'cid:' . $_replaceCid, $_message->TextBodies->HtmlTextBodyPart); $_attachname = ConvertUtils::EncodeHeaderString($_attachNode->GetChildValueByTagName('name'), $_account->GetUserCharset(), $GLOBALS[MailOutputCharset]); $_attachment->MimePart->Headers->SetHeaderByName(MIMEConst_ContentDisposition, MIMEConst_InlineLower . ';' . CRLF . "\t" . MIMEConst_FilenameLower . '="' . $_attachname . '"', false); } unset($_attachment); } else { if ($_isInline) { $_message->Attachments->DeleteLast(); } } } unset($_attachNode); } } return $_message; }
/** * @param Account $account * @param XmlDocument $xmlObj * @return WebMailMessage */ function &CreateMessage(&$account, &$xmlObj) { global $log; $messageNode =& $xmlObj->XmlRoot->GetChildNodeByTagName('message'); $headersNode =& $messageNode->GetChildNodeByTagName('headers'); $message =& new WebMailMessage(); $GLOBALS[MailDefaultCharset] = $account->GetUserCharset(); $GLOBALS[MailInputCharset] = $account->GetUserCharset(); $GLOBALS[MailOutputCharset] = $account->GetDefaultOutCharset(); $message->Headers->SetHeaderByName(MIMEConst_MimeVersion, '1.0'); $message->Headers->SetHeaderByName(MIMEConst_XMailer, 'MailBee WebMail Pro PHP'); $message->Headers->SetHeaderByName(MIMEConst_XOriginatingIp, isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '0.0.0.0'); $message->IdMsg = $messageNode->GetAttribute('id', -1); $message->SetPriority($messageNode->GetAttribute('priority', 3)); $message->Uid = $messageNode->GetChildValueByTagName('uid'); $serverAddr = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['SERVER_NAME'] : 'cantgetservername'; $message->Headers->SetHeaderByName(MIMEConst_MessageID, '<' . substr(session_id(), 0, 7) . '.' . md5(time()) . '@' . $serverAddr . '>'); $temp = $headersNode->GetChildValueByTagName('from'); if ($temp) { $message->SetFromAsString(ConvertUtils::WMBackHtmlSpecialChars($temp)); } $temp = $headersNode->GetChildValueByTagName('to'); if ($temp) { $message->SetToAsString(ConvertUtils::WMBackHtmlSpecialChars($temp)); } $temp = $headersNode->GetChildValueByTagName('cc'); if ($temp) { $message->SetCcAsString(ConvertUtils::WMBackHtmlSpecialChars($temp)); } $temp = $headersNode->GetChildValueByTagName('bcc'); if ($temp) { $message->SetBccAsString(ConvertUtils::WMBackHtmlSpecialChars($temp)); } $message->SetSubject(ConvertUtils::WMBackHtmlSpecialChars($headersNode->GetChildValueByTagName('subject'))); $message->SetDate(new CDateTime(time())); $bodyNode =& $messageNode->GetChildNodeByTagName('body'); if ($bodyNode->Attributes['is_html']) { $message->TextBodies->HtmlTextBodyPart = str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::WMBackHtmlNewCode($bodyNode->Value))); } else { $message->TextBodies->PlainTextBodyPart = str_replace("\n", CRLF, str_replace("\r", '', ConvertUtils::WMBackHtmlNewCode($bodyNode->Value))); } $attachmentsNode =& $messageNode->GetChildNodeByTagName('attachments'); if ($attachmentsNode != null) { $fs =& new FileSystem(INI_DIR . '/temp', $account->Email, $account->Id); $attfolder =& new Folder($_SESSION[ACCOUNT_ID], -1, $_SESSION['attachtempdir']); foreach (array_keys($attachmentsNode->Children) as $key) { $attachNode =& $attachmentsNode->Children[$key]; $attachCid = 'attach.php?tn=' . $attachNode->GetChildValueByTagName('temp_name'); $replaceCid = md5(time() . $attachNode->GetChildValueByTagName('name')); $mime_type = $attachNode->GetChildValueByTagName('mime_type'); if ($mime_type == '') { $mime_type = ConvertUtils::GetContentTypeFromFileName($attachNode->GetChildValueByTagName('name')); } if (!$message->Attachments->AddFromFile($fs->GetFolderFullPath($attfolder) . '/' . $attachNode->GetChildValueByTagName('temp_name'), $attachNode->GetChildValueByTagName('name'), $mime_type, (bool) $attachNode->Attributes['inline'])) { $log->WriteLine('Error Get tempfile for Attachment: ' . getGlobalError()); } if ($bodyNode->Attributes['is_html']) { if (strpos($message->TextBodies->HtmlTextBodyPart, $attachCid) !== false) { $attachment =& $message->Attachments->GetLast(); $attachment->MimePart->Headers->SetHeaderByName(MIMEConst_ContentID, '<' . $replaceCid . '>'); $message->TextBodies->HtmlTextBodyPart = str_replace($attachCid, 'cid:' . $replaceCid, $message->TextBodies->HtmlTextBodyPart); $attachname = ConvertUtils::EncodeHeaderString($attachNode->GetChildValueByTagName('name'), $account->GetUserCharset(), $GLOBALS[MailOutputCharset]); $attachment->MimePart->Headers->SetHeaderByName(MIMEConst_ContentDisposition, MIMEConst_InlineLower . ';' . CRLF . "\t" . MIMEConst_FilenameLower . '="' . $attachname . '"', false); } } } } return $message; }
/** * @param string $name * @param bool $isCDATA optional * @return string */ function GetParamTagValueByName($name, $decode = false) { $keys = array_keys($this->XmlRoot->Children); foreach ($keys as $nodeKey) { if ($this->XmlRoot->Children[$nodeKey]->TagName == 'param' && isset($this->XmlRoot->Children[$nodeKey]->Attributes['name']) && $this->XmlRoot->Children[$nodeKey]->Attributes['name'] == $name) { return $decode ? $this->XmlRoot->Children[$nodeKey]->Value : ConvertUtils::WMBackHtmlSpecialChars($this->XmlRoot->Children[$nodeKey]->Value); } } return ''; }
/** * @param XmlDomNode $xmlTree * @param array $mainArray */ protected function initFromXmlRoot(&$xmlTree) { if ($xmlTree && $xmlTree->Children && count($xmlTree->Children) > 0) { if ('Domain' === $xmlTree->TagName) { $name = ''; $domain = array(); foreach ($xmlTree->Children as $node) { if ('Name' == $node->TagName) { $name = ConvertUtils::WMBackHtmlSpecialChars($node->Value); } else { $domain[$node->TagName] = ConvertUtils::WMBackHtmlSpecialChars($node->Value); } } if (strlen($name) > 0) { $this->_main[$name] = $domain; } } else { foreach ($xmlTree->Children as $node) { $this->initFromXmlRoot($node); } } } }
/** * @access private * @param XmlDomNode $xmlTree */ function _loadFromXML(&$xmlTree) { foreach ($xmlTree->Children as $node) { switch ($node->TagName) { case 'Common': case 'WebMail': case 'Calendar': if (count($node->Children) > 0) { $this->_loadFromXML($node); } break; case 'SiteName': $this->WindowTitle = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'WindowTitle': $this->WindowTitle = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'LicenseKey': $this->LicenseKey = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'AdminPassword': $this->AdminPassword = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DBType': $this->DbType = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DBLogin': $this->DbLogin = trim(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'DBPassword': $this->DbPassword = trim(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'DBName': $this->DbName = trim(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'UseDsn': $this->UseDsn = (bool) $node->Value; case 'DBDSN': $this->DbDsn = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DBHost': $this->DbHost = trim(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'UseCustomConnectionString': $this->UseCustomConnectionString = (bool) $node->Value; break; case 'DBCustomConnectionString': $this->DbCustomConnectionString = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DBPrefix': $this->DbPrefix = ConvertUtils::ClearPrefix(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'IncomingMailProtocol': $this->IncomingMailProtocol = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'IncomingMailServer': $this->IncomingMailServer = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'IncomingMailPort': $this->IncomingMailPort = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'OutgoingMailServer': $this->OutgoingMailServer = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'OutgoingMailPort': $this->OutgoingMailPort = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'ReqSmtpAuth': $this->ReqSmtpAuth = (bool) $node->Value; break; case 'AllowAdvancedLogin': $this->AllowAdvancedLogin = (bool) $node->Value; break; case 'HideLoginMode': $this->HideLoginMode = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DefaultDomainOptional': $this->DefaultDomainOptional = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'UseMultipleDomainsSelection': $this->UseMultipleDomainsSelection = (bool) $node->Value; break; case 'UseCaptcha': $this->UseCaptcha = (bool) $node->Value; break; case 'ShowTextLabels': $this->ShowTextLabels = (bool) $node->Value; break; case 'AutomaticCorrectLoginSettings': $this->AutomaticCorrectLoginSettings = (bool) $node->Value; break; case 'EnableLogging': $this->EnableLogging = (bool) (0 < (int) $node->Value); $this->LoggingSpecialUsers = (bool) (2 === (int) $node->Value); break; case 'LogLevel': $this->LogLevel = (int) $node->Value; break; case 'EnableEventsLogging': $this->EnableEventsLogging = (bool) $node->Value; break; case 'DisableErrorHandling': $this->DisableErrorHandling = (bool) $node->Value; break; case 'AllowAjax': $this->AllowAjax = true; break; case 'MailsPerPage': $this->MailsPerPage = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'EnableAttachmentSizeLimit': $this->EnableAttachmentSizeLimit = (bool) $node->Value; break; case 'AttachmentSizeLimit': $this->AttachmentSizeLimit = GetGoodBigInt(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'EnableMailboxSizeLimit': $this->EnableMailboxSizeLimit = (bool) $node->Value; break; case 'MailboxSizeLimit': $this->MailboxSizeLimit = GetGoodBigInt(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'TakeImapQuota': $this->TakeImapQuota = (bool) $node->Value; break; case 'AllowUsersChangeTimeZone': $this->AllowUsersChangeTimeZone = (bool) $node->Value; break; case 'DefaultUserCharset': $this->DefaultUserCharset = ConvertUtils::GetCodePageName($node->Value); break; case 'AllowUsersChangeCharset': $this->AllowUsersChangeCharset = (bool) ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DefaultSkin': $this->DefaultSkin = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'AllowUsersChangeSkin': $this->AllowUsersChangeSkin = (bool) $node->Value; break; case 'DefaultLanguage': $this->DefaultLanguage = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'AllowUsersChangeLanguage': $this->AllowUsersChangeLanguage = (bool) $node->Value; break; case 'AllowDHTMLEditor': $this->AllowDhtmlEditor = (bool) $node->Value; break; case 'AllowUsersChangeEmailSettings': $this->AllowUsersChangeEmailSettings = (bool) $node->Value; break; case 'AllowDirectMode': $this->AllowDirectMode = (bool) $node->Value; break; case 'DirectModeIsDefault': $this->DirectModeIsDefault = (bool) $node->Value; break; case 'AllowNewUsersRegister': $this->AllowNewUsersRegister = true; break; case 'AllowUsersAddNewAccounts': $this->AllowUsersAddNewAccounts = false; break; case 'AllowUsersChangeAccountsDef': $this->AllowUsersChangeAccountsDef = (bool) $node->Value; break; case 'StoreMailsInDb': $this->StoreMailsInDb = (bool) $node->Value; break; case 'Imap4DeleteLikePop3': $this->Imap4DeleteLikePop3 = (bool) $node->Value; break; case 'EnableWmServer': $this->EnableWmServer = (bool) $node->Value; break; case 'WmServerRootPath': $this->WmServerRootPath = rtrim(ConvertUtils::WMBackHtmlSpecialChars($node->Value), '\\/'); break; case 'WmServerHost': $this->WmServerHost = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'WmAllowManageXMailAccounts': $this->WmAllowManageXMailAccounts = (bool) $node->Value; break; case 'AllowContacts': $this->AllowContacts = (bool) $node->Value; break; case 'AllowCalendar': $this->AllowCalendar = false; break; case 'DefaultTimeZone': if ($xmlTree->TagName == 'Calendar') { $this->Cal_DefaultTimeZone = (int) $node->Value; } else { $this->DefaultTimeZone = (int) $node->Value; } break; case 'DefaultTimeFormat': $this->Cal_DefaultTimeFormat = (int) $node->Value; break; case 'DefaultDateFormat': $this->Cal_DefaultDateFormat = (int) $node->Value; break; case 'ShowWeekends': $this->Cal_ShowWeekends = (int) $node->Value; break; case 'WorkdayStarts': $this->Cal_WorkdayStarts = (int) $node->Value; break; case 'WorkdayEnds': $this->Cal_WorkdayEnds = (int) $node->Value; break; case 'ShowWorkDay': $this->Cal_ShowWorkDay = (int) $node->Value; break; case 'WeekStartsOn': $this->Cal_WeekStartsOn = (int) $node->Value; break; case 'DefaultTab': $this->Cal_DefaultTab = (int) $node->Value; break; case 'DefaultCountry': $this->Cal_DefaultCountry = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'AllTimeZones': $this->Cal_AllTimeZones = (int) $node->Value; break; case 'AllowReminders': $this->Cal_AllowReminders = (bool) $node->Value; break; case 'AutoAddInvitation': $this->Cal_AutoAddInvitation = (int) $node->Value; break; case 'AllowLanguageOnLogin': $this->AllowLanguageOnLogin = (bool) $node->Value; break; case 'IdleSessionTimeout': $this->IdleSessionTimeout = (int) $node->Value; break; case 'AllowInsertImage': $this->AllowInsertImage = (bool) $node->Value; break; case 'AllowBodySize': $this->AllowBodySize = (bool) $node->Value; break; case 'MaxBodySize': $this->MaxBodySize = (int) $node->Value; break; case 'MaxSubjectSize': $this->MaxSubjectSize = (int) $node->Value; break; case 'AllowRegistration': $this->AllowRegistration = (int) $node->Value; break; case 'AllowPasswordReset': $this->AllowPasswordReset = (int) $node->Value; break; case 'GlobalAddressBook': $this->GlobalAddressBook = GLOBAL_ADDRESS_BOOK_OFF; break; case 'EnableMobileSync': $this->EnableMobileSync = (bool) $node->Value; break; case 'MobileSyncUrl': $this->MobileSyncUrl = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'MobileSyncContactDataBase': $this->MobileSyncContactDataBase = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'MobileSyncCalendarDataBase': $this->MobileSyncCalendarDataBase = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'FlagsLangSelect': $this->FlagsLangSelect = (bool) $node->Value; break; case 'ViewMode': $this->ViewMode = (int) $node->Value; break; case 'SaveInSent': $this->SaveInSent = (int) $node->Value; break; case 'Dev': $this->Dev = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; } } }
/** * @param XmlDomNode $xmlTree * @param array $mainArray */ protected function initFromXmlRoot(&$xmlTree, &$mainArray) { if ($xmlTree) { if ($xmlTree->Children && count($xmlTree->Children) > 0) { $mainArray[$xmlTree->TagName] = array(); foreach ($xmlTree->Children as $node) { $this->initFromXmlRoot($node, $mainArray[$xmlTree->TagName]); } } else { if (isset($mainArray[$xmlTree->TagName])) { if (is_array($mainArray[$xmlTree->TagName])) { $mainArray[$xmlTree->TagName][] = ConvertUtils::WMBackHtmlSpecialChars($xmlTree->Value); } else { $mainArray[$xmlTree->TagName] = array($mainArray[$xmlTree->TagName], ConvertUtils::WMBackHtmlSpecialChars($xmlTree->Value)); } } else { $mainArray[$xmlTree->TagName] = ConvertUtils::WMBackHtmlSpecialChars($xmlTree->Value); } } } }
foreach ($foreachArray as $folderid => $data) { $folder =& new Folder($Account->Id, $folderid, ConvertUtils::WMBackHtmlSpecialChars($data[0])); $Processor->GetFolderInfo($folder); if (!$Processor->DeleteMessages($data[1], $folder)) { SetError(PROC_CANT_DEL_MSGS); } } header('Location: ' . BASEFILE); break; case 'undelete_messages': if (!Post::has('d_messages')) { SetError(PROC_CANT_UNDEL_MSGS); } $foreachArray = Post::val('d_messages', array()); foreach ($foreachArray as $folderid => $data) { $folder =& new Folder($Account->Id, $folderid, ConvertUtils::WMBackHtmlSpecialChars($data[0])); $Processor->GetFolderInfo($folder); if (!$Processor->SetFlags($data[1], $folder, MESSAGEFLAGS_Deleted, ACTION_Remove)) { SetError(PROC_CANT_UNDEL_MSGS); } } header('Location: ' . BASEFILE); break; default: case 'none': header('Location: ' . BASEFILE . '?' . SCREEN . '=' . SCREEN_MAILBOX); break; } break; case 'set': switch ($REQ) {
function DoOperationMessagesFunction() { $_dbStorage = $_settings = $_xmlObj = $_xmlRes = $_accountId = null; $this->_initFuncArgs($_dbStorage, $_settings, $_xmlObj, $_xmlRes, $_accountId); $_account =& CXmlProcessing::AccountCheckAndLoad($_xmlRes, $_accountId, false, false); $_processor = new MailProcessor($_account); $_messagesRequestNode =& $_xmlObj->XmlRoot->GetChildNodeByTagName('messages'); if (!$_messagesRequestNode) { CXmlProcessing::PrintErrorAndExit(WebMailException, $_xmlRes); } $_getmsg = isset($_messagesRequestNode->Attributes['getmsg']) && $_messagesRequestNode->Attributes['getmsg'] == '1'; $_folderNodeRequest =& $_messagesRequestNode->GetChildNodeByTagName('folder'); if (isset($_folderNodeRequest->Attributes['id'])) { $_folder = new Folder($_accountId, $_folderNodeRequest->Attributes['id'], ConvertUtils::WMBackHtmlSpecialChars($_folderNodeRequest->GetChildValueByTagName('full_name'))); } else { CXmlProcessing::PrintErrorAndExit(WebMailException, $_xmlRes); } $_processor->GetFolderInfo($_folder, true); $_toFolderNodeRequest =& $_messagesRequestNode->GetChildNodeByTagName('to_folder'); if (isset($_toFolderNodeRequest->Attributes['id'])) { $_toFolder = new Folder($_accountId, $_toFolderNodeRequest->Attributes['id'], ConvertUtils::WMBackHtmlSpecialChars($_toFolderNodeRequest->GetChildValueByTagName('full_name'))); } else { CXmlProcessing::PrintErrorAndExit(WebMailException, $_xmlRes); } $_processor->GetFolderInfo($_toFolder, true); $_operationNode = new XmlDomNode('operation_messages'); $_toFolderNode = new XmlDomNode('to_folder', $_toFolder->FullName, true); $_toFolderNode->AppendAttribute('id', $_toFolder->IdDb); $_operationNode->AppendChild($_toFolderNode); $_folderNode = new XmlDomNode('folder', $_folder->FullName, true); $_folderNode->AppendAttribute('id', $_folder->IdDb); $_operationNode->AppendChild($_folderNode); $_messagesNode = new XmlDomNode('messages'); $_messagesNode->AppendAttribute('getmsg', $_getmsg ? '1' : '0'); $_messageIdUidSet = array(); $_folders = array(); $_messagesKeys = array_keys($_messagesRequestNode->Children); foreach ($_messagesKeys as $_nodeKey) { $_messageNode =& $_messagesRequestNode->Children[$_nodeKey]; if ($_messageNode->TagName != 'message') { continue; } if (!isset($_messageNode->Attributes['id']) || !isset($_messageNode->Attributes['charset']) || !isset($_messageNode->Attributes['size'])) { continue; } $_msgId = $_messageNode->Attributes['id']; $_msgCharset = $_messageNode->Attributes['charset']; $_msgSize = $_messageNode->Attributes['size']; $_msgUid = $_messageNode->GetChildValueByTagName('uid', true); $_msgFolder =& $_messageNode->GetChildNodeByTagName('folder'); if (!isset($_msgFolder->Attributes['id'])) { continue; } $_msgFolderId = $_msgFolder->Attributes['id']; $_folders[$_msgFolderId] = $_msgFolder->GetChildValueByTagName('full_name', true); if (!isset($_messageIdUidSet[$_msgFolderId])) { $_messageIdUidSet[$_msgFolderId] = array(); } $_messageIdUidSet[$_msgFolderId][$_msgId] = $_msgUid; $_message = new XmlDomNode('message'); $_message->AppendAttribute('id', $_msgId); $_message->AppendAttribute('charset', $_msgCharset); $_message->AppendAttribute('size', $_msgSize); $_message->AppendChild(new XmlDomNode('uid', $_msgUid, true)); $_msgFolderNode = new XmlDomNode('folder', $_folders[$_msgFolderId], true); $_msgFolderNode->AppendAttribute('id', $_msgFolderId); $_message->AppendChild($_msgFolderNode); $_messagesNode->AppendChild($_message); unset($_messageNode, $_msgFolder, $_message, $_msgFolderNode); } $_operationNode->AppendChild($_messagesNode); $_errorString = $_typeString = ''; $_request = $_xmlObj->GetParamValueByName('request'); switch ($_request) { case 'mark_all_read': $_messageIdUidSet = null; if ($_processor->SetFlags($_messageIdUidSet, $_folder, MESSAGEFLAGS_Seen, ACTION_Set)) { $_typeString = 'mark_all_read'; } else { $_errorString = PROC_CANT_MARK_ALL_MSG_READ; } break; case 'mark_all_unread': $_messageIdUidSet = null; if ($_processor->SetFlags($_messageIdUidSet, $_folder, MESSAGEFLAGS_Seen, ACTION_Remove)) { $_typeString = 'mark_all_unread'; } else { $_errorString = PROC_CANT_MARK_ALL_MSG_UNREAD; } break; case 'purge': if (!$_settings->Imap4DeleteLikePop3 && $_account->MailProtocol == MAILPROTOCOL_IMAP4) { if ($_processor->PurgeFolder($_folder)) { $_typeString = 'purge'; } else { $_errorString = PROC_CANT_PURGE_MSGS; } } else { if ($_processor->EmptyTrash()) { $_typeString = 'purge'; } else { $_errorString = PROC_CANT_PURGE_MSGS; } } break; case 'clear_spam': if ($_processor->EmptySpam()) { $_typeString = 'clear_spam'; } else { $_errorString = PROC_CANT_PURGE_MSGS; } break; } $_deleteFolderAppendError = false; $_foldersArray = array(); foreach ($_folders as $_idFolder => $_fullNameFolder) { if (isset($_foldersArray[$_idFolder])) { $_folder =& $_foldersArray[$_idFolder]; } else { $_folder = new Folder($_accountId, $_idFolder, $_fullNameFolder); $_processor->GetFolderInfo($_folder, true); $_foldersArray[$_idFolder] =& $_folder; } switch ($_request) { case 'no_move_delete': if ($_processor->DeleteMessages($_messageIdUidSet[$_idFolder], $_folder, true)) { $_typeString = 'no_move_delete'; } else { $_errorString = PROC_CANT_DEL_MSGS; } break; case 'delete': if ($_processor->DeleteMessages($_messageIdUidSet[$_idFolder], $_folder)) { $_typeString = 'delete'; } else { if ($_processor->IsMoveError) { $_typeString = 'delete'; $_deleteFolderAppendError = true; } $_errorString = PROC_CANT_DEL_MSGS; } break; case 'undelete': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Deleted, ACTION_Remove)) { $_typeString = 'undelete'; } else { $_errorString = PROC_CANT_UNDEL_MSGS; } break; case 'mark_read': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Seen, ACTION_Set)) { $_typeString = 'mark_read'; } else { $_errorString = PROC_CANT_MARK_MSGS_READ; } break; case 'mark_unread': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Seen, ACTION_Remove)) { $_typeString = 'mark_unread'; } else { $_errorString = PROC_CANT_MARK_MSGS_UNREAD; } break; case 'flag': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Flagged, ACTION_Set)) { $_typeString = 'flag'; } else { $_errorString = PROC_CANT_SET_MSG_FLAGS; } break; case 'unflag': if ($_processor->SetFlags($_messageIdUidSet[$_idFolder], $_folder, MESSAGEFLAGS_Flagged, ACTION_Remove)) { $_typeString = 'unflag'; } else { $_errorString = PROC_CANT_REMOVE_MSG_FLAGS; } break; case 'copy_to_folder': // TODO if ($_processor->MoveMessages($_messageIdUidSet[$_idFolder], $_folder, $_toFolder)) { $_typeString = 'copy_to_folder'; } else { $_errorString = PROC_CANT_CHANGE_MSG_FLD; } break; case 'move_to_folder': if ($_processor->MoveMessages($_messageIdUidSet[$_idFolder], $_folder, $_toFolder)) { $_typeString = 'move_to_folder'; } else { $_errorString = PROC_CANT_CHANGE_MSG_FLD; } break; case 'spam': if ($_processor->SpamMessages($_messageIdUidSet[$_idFolder], $_folder, true)) { $_typeString = 'spam'; } else { $_errorString = PROC_CANT_SET_MSG_AS_SPAM; } break; case 'not_spam': if ($_processor->SpamMessages($_messageIdUidSet[$_idFolder], $_folder, false)) { $_typeString = 'not_spam'; } else { $_errorString = PROC_CANT_SET_MSG_AS_NOTSPAM; } break; } unset($_folder); if (strlen($_errorString) > 0) { break; } } if (strlen($_errorString) == 0 && strlen($_typeString) > 0) { $_operationNode->AppendAttribute('type', $_typeString); $_xmlRes->XmlRoot->AppendChild($_operationNode); } else { if ($_deleteFolderAppendError) { $_operationNode->AppendAttribute('type', $_typeString); $_messagesNode->AppendAttribute('no_move', '1'); $_xmlRes->XmlRoot->AppendChild($_operationNode); } else { if (strlen($_errorString) == 0) { $_errorString = WebMailException; } $_xmlRes->XmlRoot->AppendChild(new XmlDomNode('error', $_errorString, true)); } } }
/** * @access private * @param XmlDomNode $xmlTree */ function _loadFromXML(&$xmlTree) { foreach ($xmlTree->Children as $node) { switch ($node->TagName) { case 'Common': case 'WebMail': case 'Calendar': if (count($node->Children) > 0) { $this->_loadFromXML($node); } break; case 'SiteName': $this->WindowTitle = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'WindowTitle': $this->WindowTitle = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'AdminPassword': $this->AdminPassword = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DBType': $this->DbType = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DBLogin': $this->DbLogin = trim(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'DBPassword': $this->DbPassword = trim(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'DBName': $this->DbName = trim(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'DBDSN': $this->DbDsn = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DBHost': $this->DbHost = trim(ConvertUtils::WMBackHtmlSpecialChars($node->Value)); break; case 'UseCustomConnectionString': $this->UseCustomConnectionString = (bool) $node->Value; break; case 'DBCustomConnectionString': $this->DbCustomConnectionString = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DBPrefix': $this->DbPrefix = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'IncomingMailProtocol': $this->IncomingMailProtocol = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'IncomingMailServer': $this->IncomingMailServer = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'IncomingMailPort': $this->IncomingMailPort = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'OutgoingMailServer': $this->OutgoingMailServer = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'OutgoingMailPort': $this->OutgoingMailPort = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'ReqSmtpAuth': $this->ReqSmtpAuth = (bool) $node->Value; break; case 'AllowAdvancedLogin': $this->AllowAdvancedLogin = (bool) $node->Value; break; case 'HideLoginMode': $this->HideLoginMode = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DefaultDomainOptional': $this->DefaultDomainOptional = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'ShowTextLabels': $this->ShowTextLabels = (bool) $node->Value; break; case 'AutomaticCorrectLoginSettings': $this->AutomaticCorrectLoginSettings = (bool) $node->Value; break; case 'EnableLogging': $this->EnableLogging = (bool) $node->Value; break; case 'DisableErrorHandling': $this->DisableErrorHandling = (bool) $node->Value; break; case 'AllowAjax': $this->AllowAjax = (bool) $node->Value; break; case 'MailsPerPage': $this->MailsPerPage = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'EnableAttachmentSizeLimit': $this->EnableAttachmentSizeLimit = (bool) $node->Value; break; case 'AttachmentSizeLimit': $this->AttachmentSizeLimit = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'EnableMailboxSizeLimit': $this->EnableMailboxSizeLimit = (bool) $node->Value; break; case 'MailboxSizeLimit': $this->MailboxSizeLimit = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'AllowUsersChangeTimeZone': $this->AllowUsersChangeTimeZone = (bool) $node->Value; break; case 'DefaultUserCharset': $this->DefaultUserCharset = ConvertUtils::GetCodePageName($node->Value); break; case 'AllowUsersChangeCharset': $this->AllowUsersChangeCharset = (bool) ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'DefaultSkin': $this->DefaultSkin = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'AllowUsersChangeSkin': $this->AllowUsersChangeSkin = (bool) $node->Value; break; case 'DefaultLanguage': $this->DefaultLanguage = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'AllowUsersChangeLanguage': $this->AllowUsersChangeLanguage = (bool) $node->Value; break; case 'AllowDHTMLEditor': $this->AllowDhtmlEditor = (bool) $node->Value; break; case 'AllowUsersChangeEmailSettings': $this->AllowUsersChangeEmailSettings = (bool) $node->Value; break; case 'AllowDirectMode': $this->AllowDirectMode = (bool) $node->Value; break; case 'DirectModeIsDefault': $this->DirectModeIsDefault = (bool) $node->Value; break; case 'AllowNewUsersRegister': $this->AllowNewUsersRegister = (bool) $node->Value; break; case 'AllowUsersAddNewAccounts': $this->AllowUsersAddNewAccounts = (bool) $node->Value; break; case 'StoreMailsInDb': $this->StoreMailsInDb = (bool) $node->Value; break; case 'EnableWmServer': $this->EnableWmServer = (bool) $node->Value; break; case 'WmServerRootPath': $this->WmServerRootPath = rtrim(ConvertUtils::WMBackHtmlSpecialChars($node->Value), '\\/'); break; case 'WmServerHost': $this->WmServerHost = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'WmAllowManageXMailAccounts': $this->WmAllowManageXMailAccounts = (bool) $node->Value; break; case 'AllowContacts': $this->AllowContacts = (bool) $node->Value; break; case 'AllowCalendar': $this->AllowCalendar = (bool) $node->Value; break; case 'DefaultTimeZone': if ($xmlTree->TagName == 'Calendar') { $this->Cal_DefaultTimeZone = (int) $node->Value; } else { $this->DefaultTimeZone = (int) $node->Value; } break; case 'DefaultTimeFormat': $this->Cal_DefaultTimeFormat = (int) $node->Value; break; case 'DefaultDateFormat': $this->Cal_DefaultDateFormat = (int) $node->Value; break; case 'ShowWeekends': $this->Cal_ShowWeekends = (int) $node->Value; break; case 'WorkdayStarts': $this->Cal_WorkdayStarts = (int) $node->Value; break; case 'WorkdayEnds': $this->Cal_WorkdayEnds = (int) $node->Value; break; case 'ShowWorkDay': $this->Cal_ShowWorkDay = (int) $node->Value; break; case 'WeekStartsOn': $this->Cal_WeekStartsOn = (int) $node->Value; break; case 'DefaultTab': $this->Cal_DefaultTab = (int) $node->Value; break; case 'DefaultCountry': $this->Cal_DefaultCountry = ConvertUtils::WMBackHtmlSpecialChars($node->Value); break; case 'AllTimeZones': $this->Cal_AllTimeZones = (int) $node->Value; break; } } }