65        $this->tpl = 
$DIC->ui()->mainTemplate();
 
   66        $this->ctrl = 
$DIC->ctrl();
 
   67        $this->lng = 
$DIC->language();
 
   68        $this->
user = $DIC->user();
 
   69        $this->tabs = 
$DIC->tabs();
 
   70        $this->toolbar = 
$DIC->toolbar();
 
   71        $this->rbacsystem = 
$DIC->rbac()->system();
 
   77        if (
null === $bodyPurifier) {
 
   80        $this->purifier = $bodyPurifier;
 
   82        if (isset(
$_POST[
'mobj_id']) && (
int) 
$_POST[
'mobj_id']) {
 
   86        if (!(
int) 
$_GET[
'mobj_id']) {
 
   87            $_GET[
'mobj_id'] = $this->mbox->getInboxFolder();
 
   91        $this->ctrl->saveParameter($this, 
'mobj_id');
 
   96        $forward_class = $this->ctrl->getNextClass($this);
 
   97        switch ($forward_class) {
 
   98            case 'ilmailfoldergui':
 
  102            case 'ilmailattachmentgui':
 
  103                $this->ctrl->setReturn($this, 
"returnFromAttachments");
 
  107            case 'ilmailsearchgui':
 
  108                $this->ctrl->setReturn($this, 
"searchResults");
 
  112            case 'ilmailsearchcoursesgui':
 
  113                $this->ctrl->setReturn($this, 
"searchResults");
 
  117            case 'ilmailinglistsgui':
 
  118                $this->ctrl->setReturn($this, 
'searchResults');
 
  122            case 'ilmailsearchgroupsgui':
 
  123                $this->ctrl->setReturn($this, 
"searchResults");
 
  128                if (!($cmd = $this->ctrl->getCmd())) {
 
  143        $decodedFiles = array();
 
  145        foreach (
$files as $value) {
 
  146            if (is_file($this->mfile->getMailPath() . 
'/' . $this->user->getId() . 
'_' . urldecode($value))) {
 
  147                $decodedFiles[] = urldecode($value);
 
  151        return $decodedFiles;
 
  156        $m_type = isset(
$_POST[
"m_type"]) ? 
$_POST[
"m_type"] : array(
"normal");
 
  162        $sanitizedMessage = $mailBody->getContent();
 
  166        $mailer = $this->umail
 
  170        $mailer->setSaveInSentbox(
true);
 
  172        if (
$errors = $mailer->sendMail(
 
  180            (
int) 
$_POST[
'use_placeholders']
 
  186            $mailer->savePostData($this->
user->getId(), array(), 
"", 
"", 
"", 
"", 
"", 
"", 
"", 
"");
 
  188            $this->ctrl->setParameterByClass(
'ilmailgui', 
'type', 
'message_sent');
 
  194                $this->ctrl->redirectByClass(
'ilmailgui');
 
  203        if (!
$_POST[
'm_subject']) {
 
  204            $_POST[
'm_subject'] = 
'No title';
 
  207        $draftFolderId = $this->mbox->getDraftsFolder();
 
  210        if (
$errors = $this->umail->validateRecipients(
 
  225            $draftId = $this->umail->getNewDraftId($this->
user->getId(), $draftFolderId);
 
  228        $this->umail->updateDraft(
 
  239            (
int) 
$_POST[
'use_placeholders'],
 
  249            $this->ctrl->redirectByClass([
'ilmailgui', 
'ilmailfoldergui']);
 
  257        $this->tpl->setTitle($this->lng->txt(
"mail"));
 
  262            if (is_array(
$_POST[
'attachments'])) {
 
  263                foreach (
$_POST[
'attachments'] as $value) {
 
  264                    $files[] = urldecode($value);
 
  269            $this->umail->savePostData(
 
  270                $this->
user->getId(),
 
  286        $form->setId(
'search_rcp');
 
  287        $form->setTitle($this->lng->txt(
'search_recipients'));
 
  288        $form->setFormAction($this->ctrl->getFormAction($this, 
'search'));
 
  290        $inp = 
new ilTextInputGUI($this->lng->txt(
"search_for"), 
'search');
 
  292        $dsDataLink = $this->ctrl->getLinkTarget($this, 
'lookupRecipientAsync', 
'', 
true, 
false);
 
  293        $inp->setDataSource($dsDataLink);
 
  295        if (strlen(trim(
$_SESSION[
"mail_search_search"])) > 0) {
 
  298        $form->addItem($inp);
 
  300        $form->addCommandButton(
'search', $this->lng->txt(
"search"));
 
  301        $form->addCommandButton(
'cancelSearch', $this->lng->txt(
"cancel"));
 
  303        $this->tpl->setContent(
$form->getHtml());
 
  315            $this->ctrl->setParameterByClass(
'ilmailsearchcoursesgui', 
'cmd', 
'showMembers');
 
  318        $this->ctrl->setParameterByClass(
'ilmailsearchcoursesgui', 
'ref', 
'mail');
 
  319        $this->ctrl->redirectByClass(
'ilmailsearchcoursesgui');
 
  329        $this->ctrl->setParameterByClass(
'ilmailsearchgroupsgui', 
'ref', 
'mail');
 
  330        $this->ctrl->redirectByClass(
'ilmailsearchgroupsgui');
 
  336        if (strlen(trim(
$_SESSION[
"mail_search_search"])) == 0) {
 
  340            if (strlen(trim(
$_SESSION[
"mail_search_search"])) < 3) {
 
  341                $this->lng->loadLanguageModule(
'search');
 
  345                $this->ctrl->setParameterByClass(
"ilmailsearchgui", 
"search", urlencode(
$_SESSION[
"mail_search_search"]));
 
  346                $this->ctrl->redirectByClass(
"ilmailsearchgui");
 
  361        if (is_array(
$_POST[
'attachments'])) {
 
  362            foreach (
$_POST[
'attachments'] as $value) {
 
  363                $files[] = urldecode($value);
 
  368        $this->umail->savePostData(
 
  369            $this->
user->getId(),
 
  383        $this->ctrl->redirectByClass(
"ilmailattachmentgui");
 
  388        $_GET[
"type"] = 
"attach";
 
  394        $_GET[
"type"] = 
"search_res";
 
  400        $_GET[
"type"] = 
"new";
 
  406        $_GET[
"type"] = 
"role";
 
  412        $_GET[
"type"] = 
"reply";
 
  418        $_GET[
"type"] = 
"attach";
 
  427        if (!isset(
$_GET[
'template_id'])) {
 
  432            $template = $this->templateService->loadTemplateForId((
int) 
$_GET[
'template_id']);
 
  439        } 
catch (Exception $e) {
 
  446        $this->tpl->addBlockFile(
"ADM_CONTENT", 
"adm_content", 
"tpl.mail_new.html", 
"Services/Mail");
 
  447        $this->tpl->setTitle($this->lng->txt(
"mail"));
 
  449        $this->lng->loadLanguageModule(
"crs");
 
  452            $this->tabs->setBackTarget($this->lng->txt(
'back'), $this->ctrl->getLinkTarget($this, 
'cancelMail'));
 
  455        switch (
$_GET[
"type"]) {
 
  460                $mailData = $this->umail->getMail(
$_GET[
"mail_id"]);
 
  461                $mailData[
"m_subject"] = $this->umail->formatReplySubject();
 
  462                $mailData[
"m_message"] = $this->umail->formatReplyMessage();
 
  463                $mailData[
"m_message"] = $this->umail->prependSignature();
 
  465                $mailData[
"attachments"] = array();
 
  467                $mailData[
"rcp_cc"] = 
'';
 
  468                $mailData[
"rcp_to"] = $this->umail->formatReplyRecipient();
 
  473                $mailData = $this->umail->getSavedData();
 
  482                if (
$_SESSION[
"mail_search_results_to"]) {
 
  483                    $mailData = $this->umail->appendSearchResult(
$_SESSION[
"mail_search_results_to"], 
'to');
 
  485                if (
$_SESSION[
"mail_search_results_cc"]) {
 
  486                    $mailData = $this->umail->appendSearchResult(
$_SESSION[
"mail_search_results_cc"], 
'cc');
 
  488                if (
$_SESSION[
"mail_search_results_bcc"]) {
 
  489                    $mailData = $this->umail->appendSearchResult(
$_SESSION[
"mail_search_results_bcc"], 
'bc');
 
  492                unset(
$_SESSION[
"mail_search_results_to"]);
 
  493                unset(
$_SESSION[
"mail_search_results_cc"]);
 
  494                unset(
$_SESSION[
"mail_search_results_bcc"]);
 
  499                $mailData = $this->umail->getSavedData();
 
  504                $mailData = $this->umail->getMail(
$_GET[
"mail_id"]);
 
  510                $mailData = $this->umail->getMail(
$_GET[
"mail_id"]);
 
  511                $mailData[
"rcp_to"] = $mailData[
"rcp_cc"] = $mailData[
"rcp_bcc"] = 
'';
 
  512                $mailData[
"m_subject"] = $this->umail->formatForwardSubject();
 
  513                $mailData[
"m_message"] = $this->umail->prependSignature();
 
  514                if (is_array($mailData[
"attachments"]) && count($mailData[
"attachments"])) {
 
  515                    if ($error = $this->mfile->adoptAttachments($mailData[
"attachments"], 
$_GET[
"mail_id"])) {
 
  522                if (
$_GET[
'rcp_to']) {
 
  526                    $mailData[
"rcp_to"] = 
$_SESSION[
'rcp_to'];
 
  528                if (
$_GET[
'rcp_cc']) {
 
  532                    $mailData[
"rcp_cc"] = 
$_SESSION[
'rcp_cc'];
 
  534                if (
$_GET[
'rcp_bcc']) {
 
  538                    $mailData[
"rcp_bcc"] = 
$_SESSION[
'rcp_bcc'];
 
  540                $mailData[
'm_message'] = 
'';
 
  542                    $mailData[
'm_message'] = $sig;
 
  543                    $mailData[
'm_message'] .= chr(13) . chr(10) . chr(13) . chr(10);
 
  545                $mailData[
'm_message'] .= $this->umail->appendSignature();
 
  554                if (is_array(
$_POST[
'roles'])) {
 
  557                } elseif (is_array(
$_SESSION[
'mail_roles'])) {
 
  561                $mailData[
'm_message'] = 
'';
 
  563                    $mailData[
'm_message'] = $sig;
 
  564                    $mailData[
'm_message'] .= chr(13) . chr(10) . chr(13) . chr(10);
 
  567                $mailData[
'm_message'] .= 
$_POST[
"additional_message_text"] . chr(13) . chr(10) . $this->umail->appendSignature();
 
  568                $_POST[
"additional_message_text"] = 
"";
 
  573                $mailData[
"rcp_to"] = urldecode(
$_GET[
"rcp"]);
 
  581                foreach ($mailData as 
$key => $value) {
 
  582                    if (is_string($value)) {
 
  591        $form_gui->setTitle($this->lng->txt(
'compose'));
 
  592        $form_gui->setId(
'mail_compose_form');
 
  593        $form_gui->setName(
'mail_compose_form');
 
  594        $form_gui->setFormAction($this->ctrl->getFormAction($this, 
'sendMessage'));
 
  596        $this->tpl->setVariable(
'FORM_ID', $form_gui->getId());
 
  600        $btn->setForm(
'form_' . $form_gui->getName())
 
  601            ->setName(
'searchUsers')
 
  602            ->setCaption(
'search_recipients');
 
  603        $this->toolbar->addStickyItem($btn);
 
  607            ->setName(
'searchCoursesTo')
 
  608            ->setForm(
'form_' . $form_gui->getName())
 
  609            ->setCaption(
'mail_my_courses');
 
  610        $this->toolbar->addButtonInstance($btn);
 
  614            ->setName(
'searchGroupsTo')
 
  615            ->setForm(
'form_' . $form_gui->getName())
 
  616            ->setCaption(
'mail_my_groups');
 
  617        $this->toolbar->addButtonInstance($btn);
 
  622                ->setName(
'searchMailingListsTo')
 
  623                ->setForm(
'form_' . $form_gui->getName())
 
  624                ->setCaption(
'mail_my_mailing_lists');
 
  625            $this->toolbar->addButtonInstance($btn);
 
  628        $dsDataLink = $this->ctrl->getLinkTarget($this, 
'lookupRecipientAsync', 
'', 
true);
 
  631        $inp->setRequired(
true);
 
  633        $inp->setValue($mailData[
"rcp_to"]);
 
  634        $inp->setDataSource($dsDataLink, 
",");
 
  635        $inp->setMaxLength(
null);
 
  636        $form_gui->addItem($inp);
 
  640        $inp->setValue($mailData[
"rcp_cc"]);
 
  641        $inp->setDataSource($dsDataLink, 
",");
 
  642        $inp->setMaxLength(
null);
 
  643        $form_gui->addItem($inp);
 
  647        $inp->setValue($mailData[
"rcp_bcc"]);
 
  648        $inp->setDataSource($dsDataLink, 
",");
 
  649        $inp->setMaxLength(
null);
 
  650        $form_gui->addItem($inp);
 
  652        $inp = 
new ilTextInputGUI($this->lng->txt(
'subject'), 
'm_subject');
 
  654        $inp->setRequired(
true);
 
  655        $inp->setValue($mailData[
"m_subject"]);
 
  656        $form_gui->addItem($inp);
 
  660        if (is_array($mailData[
"attachments"]) && count($mailData[
"attachments"])) {
 
  661            foreach ($mailData[
"attachments"] as 
$data) {
 
  662                if (is_file($this->mfile->getMailPath() . 
'/' . $this->user->getId() . 
"_" . 
$data)) {
 
  664                    $form_gui->addItem($hidden);
 
  665                    $size = filesize($this->mfile->getMailPath() . 
'/' . $this->user->getId() . 
"_" . 
$data);
 
  667                    $att->addItem($label);
 
  668                    $hidden->setValue(urlencode(
$data));
 
  672        $form_gui->addItem($att);
 
  675        if ($this->rbacsystem->checkAccess(
"system_message", $this->umail->getMailObjectReferenceId())) {
 
  677            $chb->setOptionTitle($this->lng->txt(
'system_message'));
 
  678            $chb->setValue(
'system');
 
  679            $chb->setChecked(
false);
 
  680            if (is_array($mailData[
"m_type"]) and in_array(
'system', $mailData[
"m_type"])) {
 
  681                $chb->setChecked(
true);
 
  683            $form_gui->addItem($chb);
 
  689            $mailData[
'use_placeholders'] = 
true;
 
  694                $templates = $this->templateService->loadTemplatesForContextId(
$context->getId());
 
  695                if (count($templates) > 0) {
 
  699                        $this->lng->txt(
'mail_template_client'),
 
  701                        $this->ctrl->getLinkTarget($this, 
'getTemplateDataById', 
'', 
true, 
false),
 
  702                        array(
'm_subject', 
'm_message')
 
  708                        if (!isset($mailData[
'template_id']) && 
$template->isDefault()) {
 
  709                            $template_chb->setValue(
$template->getTplId());
 
  710                            $form_gui->getItemByPostVar(
'm_subject')->setValue(
$template->getSubject());
 
  711                            $mailData[
"m_message"] = 
$template->getMessage();
 
  714                    if (isset($mailData[
'template_id'])) {
 
  715                        $template_chb->setValue((
int) $mailData[
'template_id']);
 
  719                    $template_chb->setInfo($this->lng->txt(
'mail_template_client_info'));
 
  720                    $template_chb->setOptions(array(
'' => $this->lng->txt(
'please_choose')) + 
$options);
 
  721                    $form_gui->addItem($template_chb);
 
  723            } 
catch (Exception $e) {
 
  725                    '%s has been called with invalid context id: %s.',
 
  737        $inp->setValue($mailData[
"m_message"]);
 
  738        $inp->setRequired(
false);
 
  741        $form_gui->addItem($inp);
 
  744        $chb = 
new ilCheckboxInputGUI($this->lng->txt(
'mail_serial_letter_placeholders'), 
'use_placeholders');
 
  745        $chb->setOptionTitle($this->lng->txt(
'activate_serial_letter_placeholders'));
 
  747        if (isset($mailData[
'use_placeholders']) && $mailData[
'use_placeholders']) {
 
  748            $chb->setChecked(
true);
 
  752        $placeholders->setInstructionText($this->lng->txt(
'mail_nacc_use_placeholder'));
 
  753        $placeholders->setAdviseText(sprintf($this->lng->txt(
'placeholders_advise'), 
'<br />'));
 
  754        foreach (
$context->getPlaceholders() as 
$key => $value) {
 
  755            $placeholders->addPlaceholder($value[
'placeholder'], $value[
'label']);
 
  757        $chb->addSubItem($placeholders);
 
  758        $form_gui->addItem($chb);
 
  760        $form_gui->addCommandButton(
'sendMessage', $this->lng->txt(
'send_mail'));
 
  761        $form_gui->addCommandButton(
'saveDraft', $this->lng->txt(
'save_message'));
 
  763            $form_gui->addCommandButton(
'cancelMail', $this->lng->txt(
'cancel'));
 
  766        $this->tpl->parseCurrentBlock();
 
  768        $this->tpl->setVariable(
'FORM', $form_gui->getHTML());
 
  770        $this->tpl->addJavaScript(
'Services/Mail/js/ilMailComposeFunctions.js');
 
  777        if (isset(
$_GET[
"term"]) && is_string(
$_GET[
"term"])) {
 
  778            $search = 
$_GET[
"term"];
 
  780        if (isset(
$_POST[
"term"]) && is_string(
$_POST[
"term"])) {
 
  784        $search = trim($search);
 
  788        require_once 
'Services/Utilities/classes/class.ilStr.php';
 
  796        $quoted = str_replace(
'%', 
'\%', $quoted);
 
  797        $quoted = str_replace(
'_', 
'\_', $quoted);
 
  821        if (is_array(
$_POST[
'attachments'])) {
 
  822            foreach (
$_POST[
'attachments'] as $value) {
 
  823                $files[] = urldecode($value);
 
  827        $this->umail->savePostData(
 
  828            $this->
user->getId(),
 
  850        $this->ctrl->setParameterByClass(
'ilmailinglistsgui', 
'ref', 
'mail');
 
  851        $this->ctrl->redirectByClass(
'ilmailinglistsgui');
 
  860        $formattedErrors = $formatter->format(
$errors);
 
  862        if (strlen($formattedErrors) > 0) {
 
An exception for terminatinating execution or to throw for unit testing.
static getInstanceByGlobalUser()
static getLogger($a_component_id)
Get component logger.
static getTemplateContextById($a_id)
Class ilMailTemplateService.
Mail Box class Base class for creating and handling mail boxes.
This class represents a text area property in a property form.
This class represents a text property in a property form.
static redirect($a_script)
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
static formatSize($size, $a_mode='short', $a_lng=null)
Returns the specified file size value in a human friendly form.
static securePlainString($a_str)
Remove unsecure characters from a plain text string.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms @access public
catch(Exception $e) $message
if(isset($_POST['submit'])) $form