Source for file functions.php
Documentation is available at functions.php
* SquirrelMail NewMail plugin
* @copyright © 2001-2006 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id: functions.php,v 1.14 2006/07/15 12:01:18 tokul Exp $
define('SM_NEWMAIL_FILETYPE_WAV',2);
define('SM_NEWMAIL_FILETYPE_MP3',3);
define('SM_NEWMAIL_FILETYPE_OGG',4);
define('SM_NEWMAIL_FILETYPE_SWF',5);
define('SM_NEWMAIL_FILETYPE_SVG',6);
/** load default config */
include_once(SM_PATH .
'plugins/newmail/config_default.php');
include_once(SM_PATH .
'config/newmail_config.php');
include_once(SM_PATH .
'plugins/newmail/config.php');
// ----- hooked functions -----
* Register newmail option block
// Gets added to the user's OPTIONS page.
/* Register Squirrelspell with the $optionpages array. */
$optpage_blocks[] =
array(
'name' =>
_("NewMail Options"),
'url' =>
sqm_baseuri() .
'plugins/newmail/newmail_opt.php',
'desc' =>
_("This configures settings for playing sounds and/or showing popup windows when new mail arrives."),
* Save newmail plugin settings
// sanitize height and width
$popup_width = (int)
$popup_width;
if ($popup_width<=
0) $popup_width=
200;
$popup_height = (int)
$popup_height;
if ($popup_height<=
0) $popup_height=
130;
setPref($data_dir,$username,'newmail_enable',$media_enable);
setPref($data_dir,$username,'newmail_popup', $media_popup);
setPref($data_dir,$username,'newmail_recent',$media_recent);
setPref($data_dir,$username,'newmail_changetitle',$media_changetitle);
setPref($data_dir,$username,'newmail_popup_width',$popup_width);
setPref($data_dir,$username,'newmail_popup_height',$popup_height);
$newmail_unseen_notify = (int)
$newmail_unseen_notify;
setPref($data_dir,$username,'newmail_unseen_notify',$newmail_unseen_notify);
$media_sel ==
'(none)' ) {
setPref($data_dir,$username,'newmail_media',$media_sel);
if ($newmail_uploadsounds && isset
($_FILES['media_file']['tmp_name']) &&
$_FILES['media_file']['tmp_name']!=
'') {
// set temp file and get media file name
$newmail_tempmedia=
getHashedDir($username, $data_dir) .
"/$username.tempsound";
$newmail_mediafile=
getHashedFile($username, $data_dir, $username .
'.sound');
// new media file is in $newmail_tempmedia
if (! rename($newmail_tempmedia,$newmail_mediafile)) {
// remove (userfile), if file rename fails
if (isset
($_FILES['media_file']['type']) && isset
($_FILES['media_file']['name'])) {
setPref($data_dir,$username,'newmail_userfile_type',
removePref($data_dir,$username,'newmail_userfile_type');
if (isset
($_FILES['media_file']['name'])) {
setPref($data_dir,$username,'newmail_userfile_name',basename($_FILES['media_file']['name']));
setPref($data_dir,$username,'newmail_userfile_name','mediafile.unknown');
* Load newmail plugin settings
global $username,$data_dir;
global $newmail_media,$newmail_media_enable,$newmail_popup;
global $newmail_recent, $newmail_changetitle;
global $newmail_userfile_type, $newmail_userfile_name;
global $newmail_popup_width, $newmail_popup_height;
global $newmail_unseen_notify;
$newmail_recent =
getPref($data_dir,$username,'newmail_recent');
$newmail_media_enable =
getPref($data_dir,$username,'newmail_enable');
$newmail_media =
getPref($data_dir, $username, 'newmail_media', '(none)');
// remove full location from setting (since SM 1.5.1 plugin uses only filename).
if ($newmail_media!=
'(none)')
$newmail_media =
basename($newmail_media);
$newmail_popup =
getPref($data_dir, $username, 'newmail_popup');
$newmail_popup_width =
getPref($data_dir, $username, 'newmail_popup_width',200);
$newmail_popup_height =
getPref($data_dir, $username, 'newmail_popup_height',130);
$newmail_changetitle =
getPref($data_dir, $username, 'newmail_changetitle');
$newmail_userfile_type =
getPref($data_dir, $username, 'newmail_userfile_type');
$newmail_userfile_name =
getPref($data_dir,$username,'newmail_userfile_name','');
$newmail_unseen_notify =
getPref($data_dir,$username,'newmail_unseen_notify',0);
* Used by option page when saving settings.
global $optpage, $optpage_name;
if ($optpage==
'newmail') {
$optpage_name=
_("NewMail Options");
/* Receive the status of the folder and do something with it */
global $newmail_media_enable,$newmail_popup,$newmail_changetitle,$trash_folder,
$sent_folder,$totalNewArr, $newmail_unseen_notify, $unseen_notify, $newmail_recent;
/* if $newmail_unseen_notify is set to zero, plugin follows $unseen_notify */
if ($newmail_unseen_notify ==
0)
$newmail_unseen_notify =
$unseen_notify;
$mailbox=
$statusarr['MAILBOX'];
if (($newmail_media_enable ==
'on' ||
$newmail_popup ==
'on' ||
$newmail_changetitle ==
'on') &&
* make sure that $newmail_unseen_notify is set to supported value,
* currently (1.5.2cvs) SMPREF_UNSEEN_NORMAL has highest integer value
* in SMPREF_UNSEEN constants
// Skip folders for Sent and Trash
// TODO: make this optional
if ($statusarr['MAILBOX'] ==
$sent_folder ||
$statusarr['MAILBOX'] ==
$trash_folder) {
if (($newmail_recent ==
'on') &&
(!empty($statusarr['RECENT']))) {
$totalNewArr[$mailbox] =
$statusarr['RECENT'];
} elseif ($newmail_recent !=
'on' &&
!empty($statusarr['UNSEEN'])) {
$totalNewArr[$mailbox] =
$statusarr['UNSEEN'];
* Insert needed data in left_main
global $username, $newmail_media, $newmail_media_enable, $newmail_popup,
$newmail_recent, $newmail_changetitle, $imapConnection, $PHP_SELF;
global $newmail_userfile_type;
global $newmail_popup_width, $newmail_popup_height;
if ($newmail_media_enable ==
'on' ||
$newmail_popup ==
'on' ||
if (!empty($totalNewArr)) { $totalNew=
array_sum($totalNewArr); }
// If we found unseen messages, then we
// will play the sound as follows:
if ($newmail_changetitle) {
echo
"<script type=\"text/javascript\">\n" .
"function ChangeTitleLoad() {\n";
echo
'window.parent.document.title = "' .
sprintf(ngettext("%s New Message","%s New Messages",$totalNew), $totalNew) .
echo
"if (BeforeChangeTitle != null)\n".
"BeforeChangeTitle();\n".
"BeforeChangeTitle = window.onload;\n".
"window.onload = ChangeTitleLoad;\n".
// create media output if there are new email messages
if ($newmail_allowsound &&
$totalNew >
0
&&
$newmail_media_enable ==
'on'
&&
$newmail_media !=
'' ) {
if ($totalNew >
0 &&
$newmail_popup ==
'on') {
// Web URL: http://fineline.xs.mw
// More code from Tyler Akins
echo
"<script type=\"text/javascript\">\n".
"function PopupScriptLoad() {\n".
'window.open("'.
sqm_baseuri().
'plugins/newmail/newmail.php?numnew='.
$totalNew.
"\"width=$newmail_popup_width,height=$newmail_popup_height,scrollbars=no\");\n".
"if (BeforePopupScript != null)\n".
"BeforePopupScript();\n".
"BeforePopupScript = window.onload;\n".
"window.onload = PopupScriptLoad;\n".
// ----- end of hooked functions -----
* Function tries to detect if file contents match declared file type
* Function returns default extension for detected mime type or 'false'
* TODO: use $contents to check if file is in specified type
* @param string $contents file contents
* @param string $type file mime type
// convert $type to lower case
case 'application/x-shockwave-flash':
* Function tries to detect uploaded file type
* @param string $filename
* @return integer One of SM_NEWMAIL_FILETYPE_* defines or false.
// fix for browser's that upload file as application/octet-stream
case 'application/octet-stream':
case 'application/x-shockwave-flash':
* Function provides filetype detection for browsers, that
* upload files with application/octet-stream file type.
* Ex. some version of Opera.
* @param string $filename
* @return integer One of SM_NEWMAIL_FILETYPE_* defines or false.
* Creates html object tags of multimedia object
* Main function that creates multimedia object tags
* @param string $object object name
* @param integer $type media object type
* @param string $path URL to media object
* @param array $args media object attributes
* @param string $extra tags that have to buried deep inside object tags
* @param bool $addsuffix controls addition of suffix to media object url
* @return string object html tags and attributes required by selected media type.
// first prepare single object for IE
$ret.=
"<!--[if !IE]> <-->\n"; // not for IE
foreach ($types as $type) {
if (isset
($newmail_mediacompat_mode) &&
$newmail_mediacompat_mode)
// add $extra code inside objects
if (isset
($newmail_mediacompat_mode) &&
$newmail_mediacompat_mode)
// close w3.org nested objects
$ret.=
"<!--> <![endif]-->\n"; // end non-IE mode
* Creates object tags of multimedia object for browsers that comply to w3.org
* <li>Returned string does not contain html closing tag.
* <li>This is internal function, use newmail_media_objects() instead
* @link http://www.w3.org/TR/html4/struct/objects.html#edef-OBJECT W3.org specs
* @param string $object object name
* @param integer $type media object type
* @param string $path URL to media object
* @param array $args media object attributes
* @param bool $addsuffix controls addition of suffix to media object url
* @return string object html tags and attributes required by selected media type.
if ($addsuffix) $suffix=
'.swf';
$ret_w3 =
'<object data="' .
$path .
$object .
$suffix .
'" '
.
'type="application/x-shockwave-flash">' .
"\n";
if ($addsuffix) $suffix=
'.wav';
$ret_w3 =
'<object data="' .
$path .
$object .
$suffix .
'" '
.
'type="audio/x-wav">' .
"\n";
if ($addsuffix) $suffix=
'.ogg';
$ret_w3 =
'<object data="' .
$path .
$object .
$suffix .
'" '
.
'type="application/ogg">' .
"\n";
if ($addsuffix) $suffix=
'.mp3';
$ret_w3 =
'<object data="' .
$path .
$object .
$suffix .
'" '
.
'type="audio/mpeg">' .
"\n";
if ($addsuffix) $suffix=
'.svg';
$ret_w3 =
'<object data="' .
$path .
$object .
$suffix .
'" '
.
'type="image/svg+xml">' .
"\n";
* Creates multimedia object tags for Internet Explorer (Win32)
* * Returned string does not contain html closing tag, because
* this multimedia object can include other media objects.
* * This is internal function, use newmail_media_objects() instead
* @param string $object object name
* @param integer $type media object type
* @param string $path URL to media object
* @param array $args media object attributes
* @param bool $addsuffix controls addition of suffix to media object url
* @return string object html tags and attributes required by selected media type.
* @todo add ogg and svg support
if ($addsuffix) $suffix=
'.swf';
$ret_ie =
'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" '
.
'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" '
.
$sArgs .
'id="' .
$object .
"\">\n"
.
'<param name="movie" value="' .
$path .
$object .
$suffix .
"\">\n"
.
'<param name="hidden" value="true">' .
"\n";
if ($addsuffix) $suffix=
'.wav';
$ret_ie =
'<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" '
.
'codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,0,02,0902" '
.
$sArgs .
'id="' .
$object .
"\" \n"
.
'type="audio/x-wav">' .
"\n"
.
'<param name="FileName" value="' .
$path .
$object .
$suffix .
"\">\n";
if ($addsuffix) $suffix=
'.mp3';
$ret_ie =
'<object classid="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" '
.
'codebase="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,0,02,0902" '
.
$sArgs .
'id="' .
$object .
"\" \n"
.
'type="audio/mpeg">' .
"\n"
.
'<param name="FileName" value="' .
$path .
$object .
$suffix .
"\">\n";
* Creates embed tags of multimedia object
* Apple: http://www.apple.com/quicktime/authoring/embed.html
* * Returned string does not contain html closing tag.
* * embed tags will be created by newmail_media_objects() only
* when $newmail_mediacompat_mode option is enabled. Option is not
* enabled by default in order to comply to w3.org specs.
* * This is internal function, use newmail_media_objects() instead
* @link http://www.apple.com/quicktime/authoring/embed.html Info about embed tag
* @param string $object object name
* @param integer $type media object type
* @param string $path URL to media object
* @param array $args media object attributes
* @param bool $addsuffix controls addition of suffix to media object url
* @return string embed html tags and attributes required by selected media type.
if ($addsuffix) $suffix=
'.swf';
$ret_embed=
'<embed src="' .
$path .
$object .
$suffix .
'" '.
"\n"
.
'hidden="true" autostart="true" '.
"\n"
.
'name="' .
$object .
'" ' .
"\n"
.
'type="application/x-shockwave-flash" ' .
"\n"
.
'pluginspage="http://www.macromedia.com/go/getflashplayer">' .
"\n";
if ($addsuffix) $suffix=
'.wav';
$ret_embed=
'<embed src="' .
$path .
$object .
$suffix .
'" '.
"\n"
.
' hidden="true" autostart="true" '.
"\n"
.
' name="' .
$object .
'" ' .
"\n"
.
' type="audio/x-wav">' .
"\n";
if ($addsuffix) $suffix=
'.svg';
$ret_embed=
'<embed src="' .
$path .
$object .
$suffix .
'" '.
"\n"
.
'hidden="true" autostart="true" '.
"\n"
.
'name="' .
$object .
'" ' .
"\n"
.
'type="image/svg-xml" ' .
"\n"
.
'pluginspage="http://www.adobe.com/svg/viewer/install/">' .
"\n";
if ($addsuffix) $suffix=
'.ogg';
$ret_embed=
'<embed src="' .
$path .
$object .
$suffix .
'" '.
"\n"
.
' hidden="true" autostart="true" '.
"\n"
.
' name="' .
$object .
'" ' .
"\n"
.
' type="application/ogg">' .
"\n";
if ($addsuffix) $suffix=
'.mp3';
$ret_embed=
'<embed src="' .
$path .
$object .
$suffix .
'" '.
"\n"
.
' hidden="true" autostart="true" '.
"\n"
.
' name="' .
$object .
'" ' .
"\n"
.
' type="audio/mpeg">' .
"\n";
* Adds closing tags for ie object
* * This is internal function, use newmail_media_objects() instead
* @param integer $type media object type
* @return string closing tag of media object
* Adds closing tags for object
* * This is internal function, use newmail_media_objects() instead
* @param integer $type media object type
* @return string closing tag of media object
* Adds closing tags for object
* * This is internal function, use newmail_media_objects() instead
* @param integer $type media object type
* @return string closing tag of media object
* Converts media attributes to string
* * attribute values are automatically sanitized by htmlspecialchars()
* * This is internal function, use newmail_media_objects() instead
* @param array $args array with object attributes
* @return string string with object attributes
foreach ($args as $arg =>
$value) {
* Detects used media type and creates all need tags
* @param string $newmail_media
* @return string html tags with media objects
$ret_media =
"<!-- newmail mmedia option -->\n";
$newmail_mmedia_short=
preg_replace("/^mmedia_/",'',$newmail_media);
// check if media option is not removed
if (isset
($newmail_mmedia[$newmail_mmedia_short])) {
$newmail_mmedia[$newmail_mmedia_short]['types'],
$newmail_mmedia[$newmail_mmedia_short]['args']);
$ret_media.=
"<!-- end of newmail mmedia option -->\n";
} elseif ($newmail_media==
'(userfile)') {
$ret_media =
"<!-- newmail usermedia option -->\n";
array($newmail_userfile_type),
array('width'=>
0,'height'=>
0),
$ret_media.=
"<!-- end of newmail usermedia option -->\n";
$ret_media =
"<!-- newmail sounds from sounds/*.wav -->\n";
array('width'=>
0,'height'=>
0),
$ret_media.=
"<!-- end of newmail sounds from sounds/*.wav -->\n";
Documentation generated on Sat, 07 Oct 2006 16:11:22 +0300 by phpDocumentor 1.3.0RC6