Page Menu
Home
In-Portal Phabricator
Search
Configure Global Search
Log In
Files
F1331734
emailmessage.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, Jan 11, 11:20 AM
Size
27 KB
Mime Type
text/x-php
Expires
Tue, Jan 13, 11:20 AM (11 h, 20 m)
Engine
blob
Format
Raw Data
Handle
861457
Attached To
rINP In-Portal
emailmessage.php
View Options
<?php
class
clsEmailMessage
extends
clsParsedItem
{
var
$Event
=
""
;
var
$Item
;
var
$headers
=
array
();
var
$subject
=
""
;
var
$body
=
""
;
var
$TemplateParsed
=
FALSE
;
var
$recipient
=
NULL
;
var
$fromuser
=
NULL
;
function
clsEmailMessage
(
$MessageId
=
NULL
,
$Item
=
NULL
)
{
$this
->
clsParsedItem
();
$this
->
tablename
=
GetTablePrefix
().
"EmailMessage"
;
$this
->
Item
=
$Item
;
$this
->
BasePermission
=
"EMAIL"
;
$this
->
id_field
=
"EmailMessageId"
;
$this
->
TagPrefix
=
"email"
;
$this
->
NoResourceId
=
1
;
if
(
$MessageId
)
$this
->
LoadFromDatabase
(
$MessageId
);
}
function
LoadEvent
(
$event
,
$language
=
NULL
)
{
global
$objConfig
,
$objLanguages
;
if
(!
strlen
(
$language
))
$language
=
$objLanguages
->
GetPrimary
();
$sql
=
"SELECT * FROM "
.
$this
->
tablename
.
" WHERE EventId = $event AND LanguageId=$language"
;
$rs
=
$this
->
adodbConnection
->
Execute
(
$sql
);
if
(
$rs
&&
!
$rs
->
EOF
)
{
$data
=
$rs
->
fields
;
$this
->
SetFromArray
(
$data
);
$this
->
Clean
();
return
TRUE
;
}
else
return
FALSE
;
}
function
LoadFromDatabase
(
$MessageId
)
{
global
$Errors
;
$sql
=
sprintf
(
"SELECT * FROM "
.
$this
->
tablename
.
" WHERE "
.
$this
->
IdField
().
" = '%s'"
,
$MessageId
);
$result
=
$this
->
adodbConnection
->
Execute
(
$sql
);
if
(
$result
===
FALSE
)
{
$Errors
->
AddError
(
"error.DatabaseError"
,
NULL
,
$this
->
adodbConnection
->
ErrorMsg
(),
""
,
get_class
(
$this
),
"LoadFromDatabase"
);
return
FALSE
;
}
$data
=
$result
->
fields
;
$this
->
SetFromArray
(
$data
);
return
TRUE
;
}
function
EditTemplate
()
{
}
/* read the template, split into peices */
function
ReadTemplate
()
{
if
(!
$this
->
TemplateParsed
)
{
$this
->
headers
=
Array
();
// add footer: begin
$sql
=
'SELECT em.Template
FROM '
.
$this
->
tablename
.
' em
LEFT JOIN '
.
TABLE_PREFIX
.
'Events e ON e.EventId = em.EventId
WHERE em.LanguageId = '
.
$this
->
Get
(
'LanguageId'
).
' AND e.Event = "COMMON.FOOTER"'
;
$footer
=
explode
(
"
\n\n
"
,
$this
->
Conn
->
GetOne
(
$sql
));
$esender
=&
$this
->
Application
->
recallObject
(
'EmailSender'
);
/* @var $esender kEmailSendingHelper */
$footer
=
$this
->
Get
(
'MessageType'
)
==
'text'
?
$esender
->
ConvertToText
(
$footer
[
1
])
:
'<br/>'
.
$footer
[
1
];
$template
=
$this
->
Get
(
'Template'
).
"
\r\n
"
.
$footer
;
// add footer: end
$template
=
str_replace
(
"
\r
"
,
''
,
$template
);
$lines
=
explode
(
"
\n
"
,
$template
);
$header_end
=
false
;
$i
=
0
;
while
(!
$header_end
&&
$i
<
count
(
$lines
))
{
$h
=
$lines
[
$i
];
if
(
strlen
(
trim
(
$h
))==
0
||
(
$h
==
"."
))
{
$header_end
=
true
;
}
else
{
$parts
=
explode
(
":"
,
$h
,
2
);
if
(
strtolower
(
$parts
[
0
])==
"subject"
)
{
$this
->
subject
=
$h
;
}
else
{
$this
->
headers
[]
=
$h
;
}
}
$i
++;
}
while
(
$i
<
count
(
$lines
))
{
$this
->
body
.=
trim
(
$lines
[
$i
++]).
"
\r\n
"
;
}
// $this->body .= "\r".$footer;
$this
->
TemplateParsed
=
true
;
}
}
function
ParseSection
(
$text
,
$parser
=
null
)
{
global
$objUsers
,
$objTemplate
;
$this
->
Application
->
InitParser
();
$res
=
$this
->
ParseTemplateText
(
$text
);
/* parse email class tags */
if
(!
is_object
(
$this
->
fromuser
))
{
$this
->
fromuser
=
$objUsers
->
GetItem
(
$this
->
Get
(
"FromUserId"
));
$this
->
fromuser
->
TagPrefix
=
"fromuser"
;
}
/* parse from user object */
if
(
is_object
(
$this
->
fromuser
))
{
$res
=
$this
->
fromuser
->
ParseTemplateText
(
$res
);
}
/* parse recipient user object */
if
(
is_object
(
$this
->
recipient
))
{
$res
=
$this
->
recipient
->
ParseTemplateText
(
$res
);
}
//print_pre($this->Item);
if
(
is_object
(
$this
->
Item
))
{
$res
=
$this
->
Item
->
ParseTemplateText
(
$res
);
}
else
{
if
(!
is_object
(
$objTemplate
))
$objTemplate
=
new
clsTemplateList
(
" "
);
$res
=
$objTemplate
->
ParseTemplateText
(
$res
);
}
return
$res
;
}
function
SendToGroup
(
$GroupId
)
{
global
$objUsers
;
$users
=
$objUsers
->
Query_GroupPortalUser
(
"GroupId=$GroupId"
);
if
(
is_array
(
$users
))
{
foreach
(
$users
as
$u
)
{
$this
->
SendToUser
(
$u
->
Get
(
"PortalUserId"
));
}
}
}
function
SendToAddress
(
$EmailAddress
,
$name
=
""
)
{
global
$objUsers
,
$objEmailQueue
,
$objConfig
;
$conn
=
&
GetADODBConnection
();
//$this->recipient = $objUsers->GetUser($UserId);
//$this->recipient->TagPrefix="touser";
if
(
strlen
(
$EmailAddress
))
{
$to_addr
=
$EmailAddress
;
$this
->
ReadTemplate
();
$subject
=
$this
->
ParseSection
(
$this
->
subject
);
$body
=
$this
->
ParseSection
(
$this
->
body
);
if
(
is_object
(
$this
->
fromuser
))
{
$FromAddr
=
$this
->
fromuser
->
Get
(
"Email"
);
$FromName
=
trim
(
$this
->
fromuser
->
Get
(
"FirstName"
).
" "
.
$this
->
fromuser
->
Get
(
"LastName"
));
}
if
(!
strlen
(
$FromAddr
))
{
$FromName
=
strip_tags
(
$objConfig
->
Get
(
'Site_Name'
)
);
$FromAddr
=
$objConfig
->
Get
(
"Smtp_AdminMailFrom"
);
}
$charset
=
"ascii-us"
;
if
(
$this
->
Get
(
"MessageType"
)==
"html"
)
{
$objEmailQueue
->
SendMail
(
$FromAddr
,
$FromName
,
$to_addr
,
$To
,
$subject
,
""
,
$body
,
$charset
,
$this
->
Get
(
"Event"
),
NULL
,
NULL
,
NULL
,
$this
->
headers
);
}
else
{
// $body = nl2br($body);
// $body = str_replace("<br />","\n",$body);
$objEmailQueue
->
SendMail
(
$FromAddr
,
$FromName
,
$to_addr
,
$To
,
$subject
,
$body
,
""
,
$charset
,
$this
->
Get
(
"Event"
),
NULL
,
NULL
,
NULL
,
$this
->
headers
);
}
/*$time = adodb_mktime();
$sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$To', '$subject', $time, '')";
$conn->Execute($sql); */
return
TRUE
;
}
return
FALSE
;
}
function
SendToUser
(
$UserId
)
{
global
$objUsers
,
$objEmailQueue
,
$objConfig
;
$conn
=
&
GetADODBConnection
();
//echo "Handling Event ".$this->Get("Event")." for user $UserId <br>\n";
$this
->
recipient
=
new
clsPortalUser
(
$UserId
);
// $objUsers->GetItem($UserId);
//echo "<PRE>";print_r($this->recipient); echo "</PRE>";
$this
->
recipient
->
TagPrefix
=
"touser"
;
if
(
$this
->
recipient
->
Get
(
"PortalUserId"
)==
$UserId
)
{
$to_addr
=
$this
->
recipient
->
Get
(
"Email"
);
$To
=
trim
(
$this
->
recipient
->
Get
(
"FirstName"
).
" "
.
$this
->
recipient
->
Get
(
"LastName"
));
$this
->
ReadTemplate
();
$subject
=
$this
->
ParseSection
(
$this
->
subject
,
$this
->
recipient
);
$body
=
$this
->
ParseSection
(
$this
->
body
);
if
(!
is_object
(
$this
->
fromuser
))
{
$this
->
fromuser
=
$objUsers
->
GetItem
(
$this
->
Get
(
"FromUserId"
));
}
if
(
is_object
(
$this
->
fromuser
))
{
$FromAddr
=
$this
->
fromuser
->
Get
(
"Email"
);
$FromName
=
trim
(
$this
->
fromuser
->
Get
(
"FirstName"
).
" "
.
$this
->
fromuser
->
Get
(
"LastName"
));
$charset
=
"ascii-us"
;
}
if
(!
strlen
(
$FromAddr
))
{
$FromName
=
strip_tags
(
$objConfig
->
Get
(
'Site_Name'
)
);
$FromAddr
=
$objConfig
->
Get
(
"Smtp_AdminMailFrom"
);
}
// echo $this->Event;
if
(
$this
->
Get
(
"MessageType"
)==
"html"
)
{
$objEmailQueue
->
SendMail
(
$FromAddr
,
$FromName
,
$to_addr
,
$To
,
$subject
,
""
,
$body
,
$charset
,
$this
->
Get
(
"Event"
),
NULL
,
NULL
,
NULL
,
$this
->
headers
);
}
else
{
// $body = str_replace("\r", "", $body);
$objEmailQueue
->
SendMail
(
$FromAddr
,
$FromName
,
$to_addr
,
$To
,
$subject
,
$body
,
""
,
$charset
,
$this
->
Get
(
"Event"
),
NULL
,
NULL
,
NULL
,
$this
->
headers
);
}
/*$time = adodb_mktime();
$sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$To ($to_addr)', '$subject', $time, '')";
$conn->Execute($sql); */
return
TRUE
;
}
return
FALSE
;
}
function
SendAdmin
()
{
global
$objUsers
,
$objConfig
,
$objEmailQueue
;
$conn
=
&
GetADODBConnection
();
$this
->
recipient
=
$objUsers
->
GetUser
(
$this
->
Get
(
"FromUserId"
));
$this
->
recipient
->
TagPrefix
=
"touser"
;
if
(
$this
->
recipient
->
Get
(
"PortalUserId"
)==
$this
->
Get
(
"FromUserId"
)
||
strlen
(
$this
->
recipient
->
Get
(
"PortalUserId"
))
==
0
)
{
$to_addr
=
$this
->
recipient
->
Get
(
"Email"
);
$To
=
trim
(
$this
->
recipient
->
Get
(
"FirstName"
).
" "
.
$this
->
recipient
->
Get
(
"LastName"
));
$this
->
ReadTemplate
();
if
(
strlen
(
$to_addr
)
==
0
)
{
$to_addr
=
$objConfig
->
Get
(
"Smtp_AdminMailFrom"
);
}
$subject
=
$this
->
ParseSection
(
$this
->
subject
);
$body
=
$this
->
ParseSection
(
$this
->
body
);
$FromName
=
strip_tags
(
$objConfig
->
Get
(
'Site_Name'
)
);
$FromAddr
=
$objConfig
->
Get
(
"Smtp_AdminMailFrom"
);
if
(
strlen
(
$FromAddr
))
{
$charset
=
"ascii-us"
;
if
(
$this
->
Get
(
"MessageType"
)==
"html"
)
{
$objEmailQueue
->
SendMail
(
$FromAddr
,
$FromName
,
$to_addr
,
$To
,
$subject
,
""
,
$body
,
$charset
,
$this
->
Get
(
"Event"
),
NULL
,
NULL
,
NULL
,
$this
->
headers
);
}
else
{
// $body = str_replace("\r", "", $body);
$objEmailQueue
->
SendMail
(
$FromAddr
,
$FromName
,
$to_addr
,
$To
,
$subject
,
$body
,
""
,
$charset
,
$this
->
Get
(
"Event"
),
NULL
,
NULL
,
NULL
,
$this
->
headers
);
}
/* $time = adodb_mktime();
$sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '$FromName', '$To ($to_addr)', '$subject', $time, '')";
$conn->Execute($sql);
*/
return
TRUE
;
}
}
return
FALSE
;
}
function
ParseTemplateText
(
$text
)
{
$html
=
$text
;
$search
=
"<inp:"
;
//$search = "<inp:".$this->TagPrefix;
//$next_tag = strpos($html,"<inp:");
$next_tag
=
strpos
(
$html
,
$search
);
while
(
$next_tag
)
{
$closer
=
strpos
(
strtolower
(
$html
),
">"
,
$next_tag
);
$end_tag
=
strpos
(
$html
,
"/>"
,
$next_tag
);
if
(
$end_tag
<
$closer
||
$closer
==
0
)
{
$tagtext
=
substr
(
$html
,
$next_tag
,(
$end_tag
-
$next_tag
)+
2
);
$pre
=
substr
(
$html
,
0
,
$next_tag
);
$post
=
substr
(
$html
,
$end_tag
+
2
);
$inner
=
$this
->
ParseElement
(
$tagtext
);
$html
=
$pre
.
$inner
.
$post
;
}
else
{
$OldTagStyle
=
"</inp>"
;
## Try to find end of TagName
$TagNameEnd
=
strpos
(
$html
,
" "
,
$next_tag
);
## Support Old version
// $closer = strpos(strtolower($html),"</inp>",$next_tag);
if
(
$TagNameEnd
)
{
$Tag
=
strtolower
(
substr
(
$html
,
$next_tag
,
$TagNameEnd
-
$next_tag
));
$TagName
=
explode
(
":"
,
$Tag
);
if
(
strlen
(
$TagName
[
1
]))
$CloserTag
=
"</inp:"
.
$TagName
[
1
].
">"
;
}
else
{
$CloserTag
=
$OldTagStyle
;
}
$closer
=
strpos
(
strtolower
(
$html
),
$CloserTag
,
$next_tag
);
## Try to find old tag closer
if
(!
$closer
&&
(
$CloserTag
!=
$OldTagStyle
))
{
$CloserTag
=
$OldTagStyle
;
$closer
=
strpos
(
strtolower
(
$html
),
$CloserTag
,
$next_tag
);
}
$end_tag
=
strpos
(
$html
,
">"
,
$next_tag
);
$tagtext
=
substr
(
$html
,
$next_tag
,(
$end_tag
-
$next_tag
)+
1
);
$pre
=
substr
(
$html
,
0
,
$next_tag
);
$inner
=
substr
(
$html
,
$end_tag
+
1
,
$closer
-(
$end_tag
+
1
));
$post
=
substr
(
$html
,
$end_tag
+
1
+
strlen
(
$inner
)
+
strlen
(
$CloserTag
));
//echo "PRE:". htmlentities($pre,ENT_NOQUOTES);
//echo "INNER:". htmlentities($inner,ENT_NOQUOTES);
//echo "POST:". htmlentities($post,ENT_NOQUOTES);
$parsed
=
$this
->
ParseElement
(
$tagtext
);
if
(
strlen
(
$parsed
))
{
$html
=
$pre
.
$this
->
ParseTemplateText
(
$inner
).
$post
;
}
else
$html
=
$pre
.
$post
;
}
$next_tag
=
strpos
(
$html
,
$search
);
}
return
$html
;
}
function
ParseElement
(
$raw
,
$inner_html
=
""
)
{
$tag
=
new
clsHtmlTag
(
$raw
);
$tag
->
inner_html
=
$inner_html
;
if
(
$tag
->
parsed
)
{
if
(
$tag
->
name
==
"include"
||
$tag
->
name
==
"perm_include"
||
$tag
->
name
==
"lang_include"
)
{
$output
=
$this
->
Parser
->
IncludeTemplate
(
$tag
);
}
else
{
if
(
is_object
(
$this
->
Item
))
{
$this
->
Item
->
TagPrefix
=
$tag
->
name
;
$output
=
$this
->
Item
->
ParseObject
(
$tag
);
}
else
{
$output
=
$this
->
ParseObject
(
$tag
);
}
if
(
substr
(
$output
,
0
,
9
)==
"Undefined"
)
{
$output
=
$tag
->
Execute
();
// if(substr($output,0,8)="{Unknown")
// $output = $raw;
}
return
$output
;
}
}
else
return
""
;
}
}
class
clsEmailMessageList
extends
clsItemCollection
{
function
clsEmailMessageList
()
{
$this
->
clsItemCollection
();
$this
->
classname
=
"clsEmailMessage"
;
$this
->
SourceTable
=
GetTablePrefix
().
"EmailMessage"
;
$this
->
PerPageVar
=
"Perpage_EmailEvents"
;
$this
->
AdminSearchFields
=
array
(
"Template"
,
"Description"
,
"Module"
,
"Event"
);
}
function
LoadLanguage
(
$LangId
=
NULL
)
{
global
$objLanguages
;
if
(!
$LangId
)
$LangId
=
$objLanguages
->
GetPrimary
();
$sql
=
"SELECT * FROM "
.
$this
->
SourceTable
.
" WHERE LanguageId=$LangId"
;
$this
->
Clear
();
return
$this
->
Query_Item
(
$sql
);
}
function
&
AddEmailEvent
(
$Template
,
$Type
,
$LangId
,
$EventId
)
{
$e
=
new
clsEmailMessage
();
$e
->
tablename
=
$this
->
SourceTable
;
$e
->
Set
(
array
(
"Template"
,
"MessageType"
,
"LanguageId"
,
"EventId"
),
array
(
$Template
,
$Type
,
$LangId
,
$EventId
));
$e
->
Dirty
();
$e
->
Create
();
return
$e
;
}
function
DeleteLanguage
(
$LangId
)
{
$sql
=
"DELETE FROM "
.
$this
->
SourceTable
.
" WHERE LanguageId=$LangId OR LanguageId = 0"
;
if
(
$GLOBALS
[
'debuglevel'
]
)
echo
$sql
.
"<br>
\n
"
;
$this
->
adodbConnection
->
Execute
(
$sql
);
}
function
&
GetMessage
(
$EventId
,
$LangId
,
$LoadFromDB
=
TRUE
)
{
$found
=
FALSE
;
if
(
is_array
(
$this
->
Items
))
{
for
(
$x
=
0
;
$x
<
count
(
$this
->
Items
);
$x
++)
{
$i
=&
$this
->
GetItemRefByIndex
(
$x
);
if
(
is_object
(
$i
))
{
if
(
$i
->
Get
(
"EventId"
)==
$EventId
&&
$i
->
Get
(
"LanguageId"
)==
$LangId
)
{
$found
=
TRUE
;
break
;
}
}
}
}
if
(!
$found
)
{
if
(
$LoadFromDB
)
{
$n
=
NULL
;
$n
=
new
$this
->
classname
();
$n
->
tablename
=
$this
->
SourceTable
;
if
(
$n
->
LoadEvent
(
$EventId
,
$LangId
))
{
array_push
(
$this
->
Items
,
$n
);
$i
=&
$this
->
Items
[
count
(
$this
->
Items
)-
1
];
}
else
$i
=
FALSE
;
}
else
$i
=
FALSE
;
}
return
$i
;
}
function
CreateEmptyEditTable
(
$IdList
,
$use_parent
=
false
)
{
global
$objSession
;
if
(!
$use_parent
)
{
$edit_table
=
$objSession
->
GetEditTable
(
$this
->
SourceTable
);
@
$this
->
adodbConnection
->
Execute
(
"DROP TABLE IF EXISTS $edit_table"
);
$query
=
"SELECT * FROM "
.
$this
->
SourceTable
.
" WHERE 0"
;
$insert
=
"CREATE TABLE "
.
$edit_table
.
" "
.
$query
;
if
(
$objSession
->
HasSystemPermission
(
"DEBUG.LIST"
))
echo
htmlentities
(
$insert
,
ENT_NOQUOTES
).
"<br>
\n
"
;
$this
->
adodbConnection
->
Execute
(
$insert
);
$this
->
LoadLanguage
();
$idvalue
=
-
1
;
for
(
$i
=
0
;
$i
<
$this
->
NumItems
();
$i
++)
{
$e
=&
$this
->
Items
[
$i
];
$e
->
SourceTable
=
$edit_table
;
if
(
is_array
(
$IdList
))
{
foreach
(
$IdList
as
$id
)
{
$e
->
UnsetIdField
();
$e
->
Set
(
"EmailMessageId"
,
$idvalue
--);
$e
->
Set
(
"LanguageId"
,
$id
);
// $e->Set("Description",admin_language("la_desc_emailevent_".$e->Get("Event"),$id));
$e
->
Create
();
}
}
else
{
$e
->
UnsetIdField
();
$e
->
Set
(
"EmailMessageId"
,
$idvalue
--);
$e
->
Set
(
"LanguageId"
,
$IdList
);
// $e->Set("Description",admin_language("la_desc_emailevent_".$e->Get("Event"),$LangId));
$e
->
Create
();
}
}
$this
->
Clear
();
}
else
{
parent
::
CreateEmptyEditTable
(
$IdList
);
}
}
function
CopyFromEditTable
()
{
global
$objSession
;
$GLOBALS
[
'_CopyFromEditTable'
]=
1
;
$idfield
=
"EmailMessageId"
;
$edit_table
=
$objSession
->
GetEditTable
(
$this
->
SourceTable
);
$sql
=
"SELECT * FROM $edit_table WHERE LanguageId <> 0"
;
$rs
=
$this
->
adodbConnection
->
Execute
(
$sql
);
while
(
$rs
&&
!
$rs
->
EOF
)
{
$data
=
$rs
->
fields
;
$c
=
new
$this
->
classname
;
$c
->
SetFromArray
(
$data
);
//$c->idfield = $idfield;
if
(
$c
->
Get
(
$idfield
)<
1
)
{
$old_id
=
$c
->
Get
(
$idfield
);
$c
->
Dirty
();
$c
->
UnsetIdField
();
$c
->
Create
();
}
else
{
$c
->
Dirty
();
$c
->
Update
();
}
$rs
->
MoveNext
();
}
@
$this
->
adodbConnection
->
Execute
(
"DROP TABLE IF EXISTS $edit_table"
);
unset
(
$GLOBALS
[
'_CopyFromEditTable'
]);
}
function
PurgeEditTable
()
{
global
$objSession
;
$edit_table
=
$objSession
->
GetEditTable
(
$this
->
SourceTable
);
@
$this
->
adodbConnection
->
Execute
(
"DROP TABLE IF EXISTS $edit_table"
);
}
function
&
GetEmailEventObject
(
$EventName
,
$Type
=
0
,
$LangId
=
NULL
)
{
global
$objLanguages
;
if
(!
$LangId
)
$LangId
=
$objLanguages
->
GetPrimary
();
$EmailTable
=
$this
->
SourceTable
;
$EventTable
=
GetTablePrefix
().
"Events"
;
$sql
=
"SELECT * FROM $EventTable INNER JOIN $EmailTable ON ($EventTable.EventId = $EmailTable.EventId) "
;
$sql
.=
"WHERE Event='$EventName' AND LanguageId=$LangId AND Type=$Type"
;
$result
=
$this
->
adodbConnection
->
Execute
(
$sql
);
if
(
$result
===
FALSE
)
{
//$Errors->AddError("error.DatabaseError",NULL,$this->adodbConnection->ErrorMsg(),"","clsEvent","GetEmailEventObject");
return
FALSE
;
}
$data
=
$result
->
fields
;
$e
=
new
clsEmailMessage
();
$e
->
SetFromArray
(
$data
);
$e
->
Clean
();
return
$e
;
}
function
ReadImportTable
(
$TableName
,
$Overwrite
=
FALSE
,
$MaxInserts
=
100
,
$Offset
=
0
)
{
$eml
=
new
clsEmailMessageList
();
$this
->
Clear
();
$Inserts
=
0
;
$sql
=
"SELECT * FROM $TableName LIMIT $Offset,$MaxInserts"
;
$this
->
Query_Item
(
$sql
);
if
(
$this
->
NumItems
()>
0
)
{
foreach
(
$this
->
Items
as
$i
)
{
$e
=
$eml
->
GetMessage
(
$i
->
Get
(
"EventId"
),
$i
->
Get
(
"LanguageId"
));
if
(
is_object
(
$e
))
{
if
(
$Overwrite
)
{
$e
->
Set
(
"MessageType"
,
$i
->
Get
(
"MessageType"
));
$e
->
Set
(
"Template"
,
$i
->
Get
(
"Template"
));
$e
->
Update
();
}
}
else
{
$i
->
Create
();
}
$Inserts
++;
}
}
$Offset
=
$Offset
+
$Inserts
;
return
$Offset
;
}
}
function
EventEnabled
(
$e
)
{
global
$objConfig
;
$var
=
"Email_"
.
$e
.
"_Enabled"
;
return
(
$objConfig
->
Get
(
$var
)==
"1"
);
}
class
clsEmailQueue
{
var
$SourceTable
;
var
$MessagesAtOnce
;
var
$MessagesSent
=
0
;
var
$LogLevel
=
0
;
var
$HLB
=
"
\n
"
;
// Headers Line Break
var
$BLB
=
"
\n
"
;
// Body Line Break
function
clsEmailQueue
(
$SourceTable
=
NULL
,
$MessagesAtOnce
=
NULL
)
{
global
$objConfig
;
$this
->
HLB
=
chr
(
10
);
$this
->
BLB
=
chr
(
10
);
if
(
$SourceTable
)
{
$this
->
SourceTable
=
$SourceTable
;
}
else
$this
->
SourceTable
=
GetTablePrefix
().
"EmailQueue"
;
if
(!
$MessagesAtOnce
)
$MessagesAtOnce
=
(
int
)
$objConfig
->
Get
(
"Email_MaxSend"
);
if
(
$MessagesAtOnce
<
1
)
$MessagesAtOnce
=
1
;
$this
->
MessagesAtOnce
=
$MessagesAtOnce
;
$this
->
LogLevel
=
(
int
)
$objConfig
->
Get
(
"Smtp_LogLevel"
);
}
function
WriteToMailLog
(
$text
)
{
global
$pathtoroot
,
$admin
;
//echo htmlentities($text)."<br>\n";
if
(
$this
->
LogLevel
>
0
)
{
$Logfile
=
$pathtoroot
.
$admin
.
"/email/log.txt"
;
if
(
is_writable
(
$Logfile
))
{
$fp
=
fopen
(
$Logfile
,
"a"
);
if
(
$fp
)
{
fputs
(
$fp
,
$text
.
"
\n
"
);
fclose
(
$fp
);
}
}
}
}
function
AllowSockets
()
{
$minver
=
explode
(
"."
,
"4.3.0"
);
$curver
=
explode
(
"."
,
phpversion
());
if
((
$curver
[
0
]
<
$minver
[
0
])
||
((
$curver
[
0
]
==
$minver
[
0
])
&&
(
$curver
[
1
]
<
$minver
[
1
]))
||
((
$curver
[
0
]
==
$minver
[
0
])
&&
(
$curver
[
1
]
==
$minver
[
1
])
&&
(
$curver
[
2
][
0
]
<
$minver
[
2
][
0
])))
return
false
;
else
return
true
;
}
function
DeliverMail
(
$To
,
$From
,
$Subject
,
$Msg
,
$headers
,
$ForceSend
=
0
)
{
global
$MessagesSent
,
$objConfig
;
if
((
$this
->
MessagesSent
>
$this
->
MessagesAtOnce
)
&&
!
$ForceSend
)
{
$this
->
EnqueueMail
(
$To
,
$From
,
$Subject
,
$Msg
,
$headers
);
return
TRUE
;
}
else
{
$this
->
MessagesSent
++;
$time
=
adodb_mktime
();
$conn
=
&
GetADODBConnection
();
/* $sql = "INSERT INTO ".GetTablePrefix()."EmailLog VALUES ('', '".htmlspecialchars($From)."', '".htmlspecialchars($To)."', '$Subject', $time, '')";
$conn->Execute($sql);*/
$headers
=
"Date: "
.
adodb_date
(
"r"
).
"
\n
"
.
$headers
;
$headers
=
"Return-Path: "
.
$objConfig
->
Get
(
"Smtp_AdminMailFrom"
).
"
\n
"
.
$headers
;
/* ensure headers are using \r\n instead of \n */
$headers
=
str_replace
(
"
\n\n
"
,
"
\r\n\r\n
"
,
$headers
);
$headers
=
str_replace
(
"
\r\n
"
,
"
\n
"
,
$headers
);
$headers
=
str_replace
(
"
\n
"
,
"
\r\n
"
,
$headers
);
// if (strtoupper(substr(PHP_OS, 0, 3) == 'WIN')) {
$Msg
=
str_replace
(
"
\n\n
"
,
"
\r\n\r\n
"
,
$Msg
);
$Msg
=
str_replace
(
"
\r\n
"
,
"
\n
"
,
$Msg
);
$Msg
=
str_replace
(
"
\n
"
,
"
\r\n
"
,
$Msg
);
// }
//echo "<PRE>"; print_r(htmlentities($headers)); echo "</PRE>";
//echo "<PRE>"; print_r(htmlentities($Msg)); echo "</PRE>";
$ver
=
phpversion
();
if
(
substr
(
$Subject
,
0
,
9
)==
"Subject: "
)
$Subject
=
substr
(
$Subject
,
9
);
if
(!
strlen
(
$objConfig
->
Get
(
"Smtp_Server"
))
||
!
$this
->
AllowSockets
())
{
return
mail
(
$To
,
trim
(
$Subject
),
$Msg
,
$headers
);
}
$headers
=
"To: <"
.
$To
.
">"
.
"
\r\n
"
.
$headers
;
$headers
=
"Subject: "
.
trim
(
$Subject
).
"
\r\n
"
.
$headers
;
if
(
strpos
(
$To
,
','
)
!==
false
)
{
$To
=
str_replace
(
' '
,
''
,
$this
->
To
);
$send_params
[
'recipients'
]
=
explode
(
','
,
$this
->
To
);
}
else
{
$send_params
[
'recipients'
]
=
array
(
$To
);
// The recipients (can be multiple)
}
$send_params
[
'from'
]
=
$From
;
// This is used as in the MAIL FROM: cmd
$send_params
[
'headers'
]
=
explode
(
"
\r\n
"
,
$headers
);
// It should end up as the Return-Path: header
$send_params
[
'body'
]
=
$Msg
;
// The body of the email
$params
[
'host'
]
=
$objConfig
->
Get
(
"Smtp_Server"
);
// The smtp server host/ip
$params
[
'port'
]
=
25
;
// The smtp server port
$params
[
'hello'
]
=
'INPORTAL'
;
// What to use when sending the helo command. Typically, your domain/hostname
if
(
$objConfig
->
Get
(
"Smtp_Authenticate"
))
// Whether to use basic authentication or not
{
$params
[
'auth'
]
=
TRUE
;
$params
[
'user'
]
=
$objConfig
->
Get
(
"Smtp_User"
);
$params
[
'pass'
]
=
$objConfig
->
get
(
"Smtp_Pass"
);
}
else
$params
[
'auth'
]
=
FALSE
;
$this
->
LogLevel
=
0
;
$SmtpServer
=
new
smtp
(
$params
);
if
(
$this
->
LogLevel
>
0
)
{
$SmtpServer
->
debug
=
1
;
foreach
(
$params
as
$key
=>
$value
)
{
$this
->
WriteToMailLog
(
$key
.
"="
.
$value
);
}
}
else
{
//$SmtpServer->debug = 1;
}
$connected
=
$SmtpServer
->
connect
();
if
(
$connected
)
{
if
(
$this
->
LogLevel
>
1
)
{
$this
->
WriteToMailLog
(
"Connected to "
.
$params
[
'host'
]);
}
$res
=
$SmtpServer
->
send
(
$send_params
);
}
$SmtpServer
->
disconnect
();
if
(
$this
->
LogLevel
>
1
)
{
foreach
(
$SmtpServer
->
buffer
as
$l
)
{
$this
->
WriteToMailLog
(
$l
);
}
}
if
(
$this
->
LogLevel
>
0
)
{
if
(
count
(
$SmtpServer
->
errors
)>
0
)
{
foreach
(
$SmtpServer
->
errors
as
$e
)
{
$this
->
WriteToMailLog
(
$e
);
}
}
else
$this
->
WriteToMailLog
(
"Message to $From Delivered Successfully"
);
}
unset
(
$SmtpServer
);
return
$res
;
}
}
function
EnqueueMail
(
$To
,
$From
,
$Subject
,
$Msg
,
$headers
)
{
global
$objSession
;
$ado
=
&
GetADODBConnection
();
$To
=
mysql_escape_string
(
$To
);
$From
=
mysql_escape_string
(
$From
);
$Msg
=
mysql_escape_string
(
$Msg
);
$headers
=
mysql_escape_string
(
$headers
);
$Subject
=
mysql_escape_string
(
$Subject
);
$sql
=
"INSERT INTO "
.
$this
->
SourceTable
.
" (toaddr,fromaddr,subject,message,headers) VALUES ('$To','$From','$Subject','$Msg','$headers')"
;
$ado
->
Execute
(
$sql
);
}
/**
* Depricated
*
*/
function
SendMailQeue
()
{
return
;
}
function
SendMail
(
$From
,
$FromName
,
$ToAddr
,
$ToName
,
$Subject
,
$Text
,
$Html
,
$charset
,
$SendEvent
,
$FileName
=
""
,
$FileLoc
=
""
,
$QueueOnly
=
0
,
$extra_headers
=
array
())
{
// $QueueOnly - {true = put in queue, false = nd now}
$application
=&
kApplication
::
Instance
();
$esender
=&
$application
->
recallObject
(
'EmailSender'
);
/* @var $esender kEmailSendingHelper */
$esender
->
SetFrom
(
$From
,
$FromName
);
$esender
->
AddTo
(
$ToAddr
,
$ToName
);
$esender
->
SetSubject
(
$Subject
);
$esender
->
SetBody
(
stripslashes
(
$Html
),
$Text
);
// set additional headers
if
(
is_array
(
$extra_headers
))
{
foreach
(
$extra_headers
as
$header
)
{
$header
=
explode
(
':'
,
$header
,
2
);
$esender
->
SetEncodedHeader
(
trim
(
$header
[
0
]),
trim
(
$header
[
1
]));
}
}
// add attachment if any
if
(
strlen
(
$FileName
)
>
0
)
{
if
(!
strlen
(
$FileLoc
))
{
$FileLoc
=
$FileName
;
}
$esender
->
AddAttachment
(
$FileLoc
,
basename
(
$FileName
));
}
$status
=
$esender
->
Deliver
(
null
,
$QueueOnly
?
false
:
true
);
if
(
$status
)
{
// write to log
$fields_hash
=
Array
(
'fromuser'
=>
$FromName
,
'addressto'
=>
$ToName
?
$ToName
.
' ('
.
$ToAddr
.
')'
:
$ToAddr
,
'subject'
=>
str_replace
(
'Subject:'
,
''
,
$Subject
),
'timestamp'
=>
adodb_mktime
(),
'event'
=>
$SendEvent
,
);
$db
=&
$application
->
GetADODBConnection
();
$db
->
doInsert
(
$fields_hash
,
TABLE_PREFIX
.
'EmailLog'
);
}
}
}
?>
Event Timeline
Log In to Comment