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']) {
83 $_GET[
'mobj_id'] = $_POST[
'mobj_id'];
86 if (!(
int)
$_GET[
'mobj_id']) {
87 $_GET[
'mobj_id'] = $this->mbox->getInboxFolder();
89 $_GET[
'mobj_id'] = (int) $_GET[
'mobj_id'];
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']
183 $_POST[
'attachments'] =
$files;
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']);
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);
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())) {
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')
706 $options[$template->getTplId()] = $template->getTitle();
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);
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) {
static prepareFormOutput($a_str, $a_strip=false)
prepares string output for html forms public
static securePlainString($a_str)
Remove unsecure characters from a plain text string.
static getInstanceByGlobalUser()
static getTemplateContextById($a_id)
Class ilMailTemplateService.
setValue($a_value)
Set Value.
static sendInfo($a_info="", $a_keep=false)
Send Info Message to Screen.
catch(Exception $e) $message
if(isset($_POST['submit'])) $form
Mail Box class Base class for creating and handling mail boxes.
setSize($a_size)
Set Size.
This class represents a text property in a property form.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
static sendFailure($a_info="", $a_keep=false)
Send Failure Message to Screen.
This class represents a text area property in a property form.
static getLogger($a_component_id)
Get component logger.
static formatSize($size, $a_mode='short', $a_lng=null)
Returns the specified file size value in a human friendly form.
static redirect($a_script)