_("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."),
'js' => TRUE
);
}
/**
* Save newmail plugin settings
*/
function newmail_sav_function() {
global $data_dir, $username, $_FILES, $newmail_uploadsounds;
if ( sqgetGlobalVar('submit_newmail', $submit, SQ_POST) ) {
$media_enable = '';
$media_popup = '';
$media_recent = '';
$media_changetitle = '';
$media_sel = '';
$popup_width = '';
$popup_height = '';
sqgetGlobalVar('media_enable', $media_enable, SQ_POST);
sqgetGlobalVar('media_popup', $media_popup, SQ_POST);
sqgetGlobalVar('media_recent', $media_recent, SQ_POST);
sqgetGlobalVar('media_changetitle', $media_changetitle, SQ_POST);
sqgetGlobalVar('popup_width', $popup_width, SQ_POST);
sqgetGlobalVar('popup_height', $popup_height, SQ_POST);
// 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);
if( sqgetGlobalVar('media_sel', $media_sel, SQ_POST) &&
$media_sel == '(none)' ) {
removePref($data_dir,$username,'newmail_media');
} else {
setPref($data_dir,$username,'newmail_media',$media_sel);
}
// process uploaded file
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');
if (move_uploaded_file($_FILES['media_file']['tmp_name'], $newmail_tempmedia)) {
// new media file is in $newmail_tempmedia
if (file_exists($newmail_mediafile)) unlink($newmail_mediafile);
if (! rename($newmail_tempmedia,$newmail_mediafile)) {
// remove (userfile), if file rename fails
removePref($data_dir,$username,'newmail_media');
} else {
// store media type
if (isset($_FILES['media_file']['type']) && isset($_FILES['media_file']['name'])) {
setPref($data_dir,$username,'newmail_userfile_type',
newmail_get_mediatype($_FILES['media_file']['type'],$_FILES['media_file']['name']));
} else {
removePref($data_dir,$username,'newmail_userfile_type');
}
// store file name
if (isset($_FILES['media_file']['name'])) {
setPref($data_dir,$username,'newmail_userfile_name',basename($_FILES['media_file']['name']));
} else {
setPref($data_dir,$username,'newmail_userfile_name','mediafile.unknown');
}
}
}
}
}
}
/**
* Load newmail plugin settings
*/
function newmail_pref_function() {
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;
$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','');
}
/**
* Set loadinfo data
*
* Used by option page when saving settings.
*/
function newmail_set_loadinfo_function() {
global $optpage, $optpage_name;
if ($optpage=='newmail') {
$optpage_name=_("NewMail Options");
}
}
/* Receive the status of the folder and do something with it */
function newmail_folder_status($statusarr) {
global $newmail_media_enable,$newmail_popup,$newmail_changetitle,$trash_folder,
$sent_folder,$totalNewArr,$unseen_notify, $newmail_recent;
//echo "GOT HOOK
";
//var_dump($statusarr);
//echo "
\n";
$mailbox=$statusarr['MAILBOX'];
if ($newmail_media_enable == 'on' ||
$newmail_popup == 'on' ||
$newmail_changetitle == 'on') {
// Skip folders for Sent and Trash
if ($statusarr['MAILBOX'] == $sent_folder || $statusarr['MAILBOX'] == $trash_folder) {
return 0;
}
if ((($mailbox == 'INBOX') && ($unseen_notify == 2)) || ($unseen_notify == 3)) {
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
*/
function newmail_plugin_function() {
global $username, $newmail_media, $newmail_media_enable, $newmail_popup,
$newmail_recent, $newmail_changetitle, $imapConnection, $PHP_SELF;
global $newmail_mmedia, $newmail_allowsound;
global $newmail_userfile_type;
global $newmail_popup_width, $newmail_popup_height;
global $totalNewArr;
if ($newmail_media_enable == 'on' ||
$newmail_popup == 'on' ||
$newmail_changetitle) {
if (!empty($totalNewArr)) { $totalNew=array_sum($totalNewArr); }
else { $totalNew=0; }
// If we found unseen messages, then we
// will play the sound as follows:
if ($newmail_changetitle) {
echo "\n";
}
// create media output if there are new email messages
if ($newmail_allowsound && $totalNew > 0
&& $newmail_media_enable == 'on'
&& $newmail_media != '' ) {
echo newmail_create_media_tags($newmail_media);
}
if ($totalNew > 0 && $newmail_popup == 'on') {
// Idea by: Nic Wolfe (Nic@TimelapseProductions.com)
// Web URL: http://fineline.xs.mw
// More code from Tyler Akins
echo "\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
* @return string
*/
function newmail_detect_filetype($contents,$type) {
// convert $type to lower case
$type=strtolower($type);
$ret=false;
switch ($type) {
case 'audio/x-wav':
$ret='wav';
break;
case 'audio/mpeg':
$ret='mp3';
break;
case 'application/ogg':
$ret='ogg';
break;
case 'application/x-shockwave-flash':
$ret='swf';
break;
case 'image/svg+xml':
$ret='svg';
break;
default:
$ret=false;
}
return $ret;
}
/**
* Function tries to detect uploaded file type
* @param string $type
* @param string $filename
* @return integer One of SM_NEWMAIL_FILETYPE_* defines or false.
*/
function newmail_get_mediatype($type,$filename) {
switch ($type) {
// fix for browser's that upload file as application/octet-stream
case 'application/octet-stream':
$ret=newmail_get_mediatype_by_ext($filename);
break;
case 'audio/x-wav':
$ret=SM_NEWMAIL_FILETYPE_WAV;
break;
case 'audio/mpeg':
$ret=SM_NEWMAIL_FILETYPE_MP3;
break;
case 'application/ogg':
$ret=SM_NEWMAIL_FILETYPE_OGG;
break;
case 'application/x-shockwave-flash':
$ret=SM_NEWMAIL_FILETYPE_SWF;
break;
case 'image/svg+xml':
$ret=SM_NEWMAIL_FILETYPE_SVG;
break;
default:
$ret=false;
}
return $ret;
}
/**
* 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.
*/
function newmail_get_mediatype_by_ext($filename) {
if (preg_match("/\.wav$/i",$filename)) return SM_NEWMAIL_FILETYPE_WAV;
if (preg_match("/\.mp3$/i",$filename)) return SM_NEWMAIL_FILETYPE_MP3;
if (preg_match("/\.ogg$/i",$filename)) return SM_NEWMAIL_FILETYPE_OGG;
if (preg_match("/\.swf$/i",$filename)) return SM_NEWMAIL_FILETYPE_SWF;
if (preg_match("/\.svg$/i",$filename)) return SM_NEWMAIL_FILETYPE_SVG;
return 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.
*/
function newmail_media_objects($object,$types,$path,$args=array(),$extra='',$addsuffix=true) {
global $newmail_mediacompat_mode;
// first prepare single object for IE
$ret = newmail_media_object_ie($object,$types[0],$path,$args,$addsuffix);
// W3.org nested objects
$ret.= "\n"; // not for IE
foreach ($types as $type) {
$ret.= newmail_media_object($object,$type,$path,$args,$addsuffix);
}
if (isset($newmail_mediacompat_mode) && $newmail_mediacompat_mode)
$ret.= newmail_media_embed($object,$types[0],$path,$args,$addsuffix);
// add $extra code inside objects
if ($extra!='')
$ret.=$extra . "\n";
// close embed tags
if (isset($newmail_mediacompat_mode) && $newmail_mediacompat_mode)
$ret.= newmail_media_embed_close($types[0]);
// close w3.org nested objects
foreach (array_reverse($types) as $type) {
$ret.= newmail_media_object_close($type);
}
$ret.= " \n"; // end non-IE mode
// close IE object
$ret.= newmail_media_object_ie_close($types[0]);
return $ret;
}
/**
* Creates object tags of multimedia object for browsers that comply to w3.org
* specifications.
*
* Warnings:
*
*
Returned string does not contain html closing tag.
*
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.
*/
function newmail_media_object($object,$type,$path,$args=array(),$addsuffix=true) {
$ret_w3='';
$suffix='';
$sArgs=newmail_media_prepare_args($args);
switch ($type) {
case SM_NEWMAIL_FILETYPE_SWF:
if ($addsuffix) $suffix='.swf';
$ret_w3 = '