ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilSoapMailXmlParser.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4
5include_once './Services/Xml/classes/class.ilSaxParser.php';
6include_once './Services/User/classes/class.ilObjUser.php';
7
17{
21 public function __construct($a_xml)
22 {
23 parent::__construct('',true);
24 $this->setThrowException(true);
25 $this->setXMLContent($a_xml);
26 }
27
32 public function getMails()
33 {
34 return (array) $this->mails;
35 }
36
44 public function start ()
45 {
46 $this->startParsing();
47 return true;
48 }
49
50
57 public function setHandlers($a_xml_parser)
58 {
59 xml_set_object($a_xml_parser,$this);
60 xml_set_element_handler($a_xml_parser,'handlerBeginTag','handlerEndTag');
61 xml_set_character_data_handler($a_xml_parser,'handlerCharacterData');
62 }
63
71 public function handlerBeginTag($a_xml_parser,$a_name,$a_attribs)
72 {
73 switch($a_name)
74 {
75 case 'Mail':
76 $this->mail = array();
77 $this->mail['usePlaceholders'] = $a_attribs['usePlaceholders'] ? true : false;
78 $this->mail['type'] = $a_attribs['type'] == 'System' ? 'system' : 'normal';
79 break;
80
81 case 'To':
82 $this->mail['to'] = $this->parseName($a_attribs);
83 break;
84
85 case 'Cc':
86 $this->mail['cc'] = $this->parseName($a_attribs);
87 break;
88
89 case 'Bcc':
90 $this->mail['bcc'] = $this->parseName($a_attribs);
91 break;
92
93 case 'Subject':
94 break;
95
96 case 'Message':
97 $this->lines = array();
98 break;
99
100 case 'Attachment':
101 $this->attachment = array();
102 $this->attachment['name'] = $a_attribs['name'];
103 break;
104
105 }
106 }
107
114 public function handlerEndTag($a_xml_parser,$a_name)
115 {
116 switch($a_name)
117 {
118 case 'Mail':
119 $this->mails[] = $this->mail;
120 break;
121
122 case 'Subject':
123 $this->mail['subject'] = $this->cdata;
124 break;
125
126 case 'Message':
127 $this->mail['body'] = (array) $this->lines;
128 break;
129
130 case 'P':
131 $this->lines[] = trim($this->cdata);
132 break;
133
134 case 'Attachment':
135 $this->attachment['content'] = base64_decode(trim($this->cdata));
136 $this->mail['attachments'][] = $this->attachment;
137 break;
138 }
139
140 $this->cdata = '';
141 }
142
149 public function handlerCharacterData($a_xml_parser,$a_data)
150 {
151 if($this->in_metadata)
152 {
153 parent::handlerCharacterData($a_xml_parser,$a_data);
154 }
155
156 if($a_data != "\n")
157 {
158 // Replace multiple tabs with one space
159 $a_data = preg_replace("/\t+/"," ",$a_data);
160 $this->cdata .= $a_data;
161 }
162 }
163
170 protected function parseName($a_attribs)
171 {
172 include_once './Services/Object/classes/class.ilObjectFactory.php';
173
174 if($a_attribs['obj_id'])
175 {
176 $il_id = explode('_',$a_attribs['obj_id']);
177 $GLOBALS['ilLog']->write('il ID:'.print_r($il_id,true));
178 if(!$user = ilObjectFactory::getInstanceByObjId($il_id[3],false))
179 {
180 throw new InvalidArgumentException("Invalid user id given: obj_id => ".$a_attribs['obj_id']);
181 }
182 return $user->getLogin();
183 }
184 else
185 {
186 return $a_attribs['name'];
187 }
188 }
189}
190?>
getInstanceByObjId($a_obj_id, $stop_on_error=true)
get an instance of an Ilias object by object id
Base class for sax-based expat parsing extended classes need to overwrite the method setHandlers and ...
setThrowException($throwException)
set error handling
setXMLContent($a_xml_content)
startParsing()
stores xml data in array
XML parser for soap mails.
handlerEndTag($a_xml_parser, $a_name)
handler for end of element
handlerBeginTag($a_xml_parser, $a_name, $a_attribs)
handler for begin of element
__construct($a_xml)
Constructor.
setHandlers($a_xml_parser)
set event handlers
handlerCharacterData($a_xml_parser, $a_data)
handler for character data
parseName($a_attribs)
extract user name
$GLOBALS['PHPCAS_CLIENT']
This global variable is used by the interface class phpCAS.
Definition: CAS.php:276