--- /dev/null
+* media/got_a_message.wav
+(swf and mp3 files are created from it with swftools and lame)
+
+Sound file is downloaded from
+http://simplythebest.net/sounds/WAV/events_WAV/email_wavs.html
+
+Page indicates that media is public domain.
+--------------------------------------------------------------
+* sounds/MontyPython.wav
+* media/montypython.wav
+(swf and mp3 files are created from it with swftools and lame)
+
+http://simplythebest.net/sounds/WAV/events_WAV/email_wavs.html
+Original file name: monty_message.wav
+Copyright: Columbia/Tristar Studios
+Type: Demo
+
+--------------------------------------------------------------
+* media/austin_mail.wav
+(swf and mp3 files are created from it with swftools and lame)
+
+http://simplythebest.net/sounds/WAV/events_WAV/email_wavs.html
+Original file name: austin_mail.wav
+Copyright: New Line Productions
+Type: Demo
+
+--------------------------------------------------------------
+* media/notify.wav
+(swf and mp3 files are created from it with swftools and lame)
+
+Sound file is downloaded from
+http://www.freesoundfiles.tintagel.net/Audio/
+
+
+Copyright information from www.freesoundfiles.tintagel.net:
+These sound files are provided free of charge, without any
+representation or warranty whatsoever. To the best of our
+knowledge, all wave, midi, and audio files presented here are
+in the public domain and are available for use without restriction.
+
+--------------------------------------------------------------
This is the history for the newmail plugin in SquirrelMail. Currently
works with the 1.1.2+ versions of SquirrelMail.
-2.1
+From SquirrelMail v.1.2.0 plugin is included in main SquirrelMail package.
+All changes are logged in main SquirrelMail changelog.
+2.1
Fixes bug in when used with the 1.1.3 distro
-
-
2.0
-
Adds a "try" sounds option to the Newmail plugins works with 1.1.2
-
-
-
1.4
-
Tyler Akins cleaned up the javascript and now it can change the title
bar's text if you have new mail. Additionally, this now correctly
uses the new 1.1.1 validate.php format. Uses the new
sqimap_unseen_messages() format in 1.1.2.
1.3a
-
Hm. Apparently the Sent box is being used to indicate new mail when
checking all folders. Disabled this. Ditto for the Trash folder
as well.
1.3
-
Now added the ability to only check for RECENT messages (those that
have not had their information not yet looked at). Once a message
is "noticed", it will not show up again as recent. Nice for
screen (or, they can still choose a local file).
1.2
-
Added the ability to show a popup window on new mail arrival (via a
JavaScript function).
(the default). Also fixed a bug in counting unseen messages. ;)
1.1
-
Now added the ability to turn off this feature for users who don't want
it. The default is NOT enabled, so you need to go to the options menu to
turn it on.
Also a nice way to reset the file back to the server default.
1.0
-
First release (with an option page)!
0.9
-
First pass-through of making a plugin. Hack hack hack . . .
--- /dev/null
+<?php
+// Set $allowsound to false if you don't want sound files available
+$newmail_allowsound = true;
+
+// controls insertion of embed tags
+$newmail_mediacompat_mode=false;
+
+// List of enabled media files
+$newmail_mmedia['notify']['types'] = array(SM_NEWMAIL_FILETYPE_SWF,SM_NEWMAIL_FILETYPE_MP3,SM_NEWMAIL_FILETYPE_WAV);
+$newmail_mmedia['notify']['args'] = array('width'=>0,'height'=>0);
+$newmail_mmedia['got_a_message']['types'] = array(SM_NEWMAIL_FILETYPE_SWF,SM_NEWMAIL_FILETYPE_MP3,SM_NEWMAIL_FILETYPE_WAV);
+$newmail_mmedia['got_a_message']['args'] = array('width'=>0,'height'=>0);
+$newmail_mmedia['monty_message']['types'] = array(SM_NEWMAIL_FILETYPE_SWF,SM_NEWMAIL_FILETYPE_MP3,SM_NEWMAIL_FILETYPE_WAV);
+$newmail_mmedia['monty_message']['args'] = array('width'=>0,'height'=>0);
+$newmail_mmedia['austin_mail']['types'] = array(SM_NEWMAIL_FILETYPE_SWF,SM_NEWMAIL_FILETYPE_MP3,SM_NEWMAIL_FILETYPE_WAV);
+$newmail_mmedia['austin_mail']['args'] = array('width'=>0,'height'=>0);
+?>
\ No newline at end of file
--- /dev/null
+<?php
+// Set $allowsound to false if you don't want sound files available
+global $newmail_allowsound;
+$newmail_allowsound = true;
+
+// controls insertion of embed tags
+global $newmail_mediacompat_mode;
+$newmail_mediacompat_mode=false;
+
+// Default setting should create empty array.
+global $newmail_mmedia;
+$newmail_mmedia=array();
+?>
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * SquirrelMail NewMail plugin
+ *
+ * Functions
+ * @version $Id$
+ * @package plugins
+ * @subpackage new_mail
+ */
+
+/** file type defines */
+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 */
+if (file_exists(SM_PATH . 'plugins/newmail/config_default.php')) {
+ include_once(SM_PATH . 'plugins/newmail/config_default.php');
+}
+
+/** load config */
+if (file_exists(SM_PATH . 'config/newmail_config.php')) {
+ include_once(SM_PATH . 'config/newmail_config.php');
+} elseif (file_exists(SM_PATH . 'plugins/newmail/config.php')) {
+ include_once(SM_PATH . 'plugins/newmail/config.php');
+}
+
+/**
+ * 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;
+}
+
+/**
+ * @param string $type
+ * @param string $filename
+ * @return integer
+ */
+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. Opera.
+ * @param string $filename
+ * @return string
+ */
+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.= "<!--[if !IE]> <-->\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";
+
+ if (isset($newmail_mediacompat_mode) && $newmail_mediacompat_mode)
+ $ret.= newmail_media_embed_close($types[0]);
+
+ foreach (array_reverse($types) as $type) {
+ $ret.= newmail_media_object_close($type);
+ }
+ $ret.= "<!--> <![endif]-->\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
+ * @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 = '<object data="' . $path . $object . $suffix . '" '
+ .$sArgs
+ .'type="application/x-shockwave-flash">' . "\n";
+ break;
+ case SM_NEWMAIL_FILETYPE_WAV:
+ if ($addsuffix) $suffix='.wav';
+ $ret_w3 = '<object data="' . $path . $object . $suffix . '" '
+ .$sArgs
+ .'type="audio/x-wav">' . "\n";
+ break;
+ case SM_NEWMAIL_FILETYPE_OGG:
+ if ($addsuffix) $suffix='.ogg';
+ $ret_w3 = '<object data="' . $path . $object . $suffix . '" '
+ .$sArgs
+ .'type="application/ogg">' . "\n";
+ break;
+ case SM_NEWMAIL_FILETYPE_MP3:
+ if ($addsuffix) $suffix='.mp3';
+ $ret_w3 = '<object data="' . $path . $object . $suffix . '" '
+ .$sArgs
+ .'type="audio/mpeg">' . "\n";
+ break;
+ case SM_NEWMAIL_FILETYPE_SVG:
+ if ($addsuffix) $suffix='.svg';
+ $ret_w3 = '<object data="' . $path . $object . $suffix . '" '
+ .$sArgs
+ .'type="image/svg+xml">' . "\n";
+ break;
+ default:
+ $ret_w3='';
+ }
+ return $ret_w3;
+}
+
+/**
+ * Creates multimedia object tags for Internet Explorer (Win32)
+ *
+ * Warning:
+ * * 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.
+ */
+function newmail_media_object_ie($object,$type,$path,$args=array(),$addsuffix) {
+ $ret_ie='';
+ $suffix='';
+ $sArgs=newmail_media_prepare_args($args);
+
+ switch ($type) {
+ case SM_NEWMAIL_FILETYPE_SWF:
+ 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";
+ break;
+ case SM_NEWMAIL_FILETYPE_WAV:
+ 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";
+ break;
+ case SM_NEWMAIL_FILETYPE_MP3:
+ 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";
+ break;
+ case SM_NEWMAIL_FILETYPE_OGG:
+ case SM_NEWMAIL_FILETYPE_SVG:
+ default:
+ $ret_ie='';
+ }
+ return $ret_ie;
+}
+
+/**
+ * Creates embed tags of multimedia object
+ *
+ * docs about embed
+ * Apple: http://www.apple.com/quicktime/authoring/embed.html
+ *
+ * Warnings:
+ * * 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.
+ */
+function newmail_media_embed($object,$type,$path,$args=array(),$addsuffix=true) {
+ $ret_embed='';
+ $suffix='';
+ $sArgs=newmail_media_prepare_args($args);
+
+ switch ($type) {
+ case SM_NEWMAIL_FILETYPE_SWF:
+ if ($addsuffix) $suffix='.swf';
+ $ret_embed='<embed src="' . $path . $object . $suffix . '" '. "\n"
+ .'hidden="true" autostart="true" '. "\n"
+ .$sArgs . "\n"
+ .'name="' . $object .'" ' . "\n"
+ .'type="application/x-shockwave-flash" ' . "\n"
+ .'pluginspage="http://www.macromedia.com/go/getflashplayer">' . "\n";
+ break;
+ case SM_NEWMAIL_FILETYPE_WAV:
+ if ($addsuffix) $suffix='.wav';
+ $ret_embed='<embed src="' . $path . $object . $suffix . '" '. "\n"
+ .' hidden="true" autostart="true" '. "\n"
+ .' ' .$sArgs . "\n"
+ .' name="' . $object .'" ' . "\n"
+ .' type="audio/x-wav">' . "\n";
+ break;
+ case SM_NEWMAIL_FILETYPE_OGG:
+ case SM_NEWMAIL_FILETYPE_MP3:
+ case SM_NEWMAIL_FILETYPE_SVG:
+ default:
+ $ret_embed='';
+ }
+ return $ret_embed;
+}
+
+/**
+ * Adds closing tags for ie object
+ * Warning:
+ * * This is internal function, use newmail_media_objects() instead
+ * @param integer $type media object type
+ * @return string closing tag of media object
+ */
+function newmail_media_object_ie_close($type) {
+ $ret_end='';
+ switch ($type) {
+ case SM_NEWMAIL_FILETYPE_SWF:
+ case SM_NEWMAIL_FILETYPE_WAV:
+ case SM_NEWMAIL_FILETYPE_MP3:
+ $ret_end="</object>\n";
+ break;
+ case SM_NEWMAIL_FILETYPE_OGG:
+ case SM_NEWMAIL_FILETYPE_SVG:
+ default:
+ $ret_end='';
+ }
+ return $ret_end;
+}
+
+/**
+ * Adds closing tags for object
+ * Warning:
+ * * This is internal function, use newmail_media_objects() instead
+ * @param integer $type media object type
+ * @return string closing tag of media object
+ */
+function newmail_media_object_close($type) {
+ $ret_end='';
+ switch ($type) {
+ case SM_NEWMAIL_FILETYPE_SWF:
+ case SM_NEWMAIL_FILETYPE_WAV:
+ case SM_NEWMAIL_FILETYPE_OGG:
+ case SM_NEWMAIL_FILETYPE_MP3:
+ case SM_NEWMAIL_FILETYPE_SVG:
+ $ret_end="</object>\n";
+ break;
+ default:
+ $ret_end='';
+ }
+ return $ret_end;
+}
+
+/**
+ * Adds closing tags for object
+ * Warning:
+ * * This is internal function, use newmail_media_objects() instead
+ * @param integer $type media object type
+ * @return string closing tag of media object
+ */
+function newmail_media_embed_close($type) {
+ $ret_end='';
+ switch ($type) {
+ case SM_NEWMAIL_FILETYPE_SWF:
+ case SM_NEWMAIL_FILETYPE_WAV:
+ $ret_end="</embed>\n";
+ break;
+ case SM_NEWMAIL_FILETYPE_OGG:
+ case SM_NEWMAIL_FILETYPE_MP3:
+ case SM_NEWMAIL_FILETYPE_SVG:
+ default:
+ $ret_end='';
+ }
+ return $ret_end;
+}
+
+/**
+ * Converts media attributes to string
+ * Warning:
+ * * 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
+ */
+function newmail_media_prepare_args($args) {
+ $ret_args='';
+ foreach ($args as $arg => $value) {
+ $ret_args.= $arg . '="' . htmlspecialchars($value) . '" ';
+ }
+ return $ret_args;
+}
+
+/**
+ * Detects used media type and creates all need tags
+ * @param string $newmail_media
+ * @return string html tags with media objects
+ */
+function newmail_create_media_tags($newmail_media) {
+ global $newmail_mmedia, $newmail_userfile_type;
+
+ if (preg_match("/^mmedia_+/",$newmail_media)) {
+ $ret_media = "<!-- newmail mmedia option -->\n";
+ // remove mmedia key
+ $newmail_mmedia_short=preg_replace("/^mmedia_/",'',$newmail_media);
+ // check if media option is not removed
+ if (isset($newmail_mmedia[$newmail_mmedia_short])) {
+ $ret_media.= newmail_media_objects($newmail_mmedia_short,
+ $newmail_mmedia[$newmail_mmedia_short]['types'],
+ sqm_baseuri() . 'plugins/newmail/media/',
+ $newmail_mmedia[$newmail_mmedia_short]['args']);
+ }
+ $ret_media.= "<!-- end of newmail mmedia option -->\n";
+ } elseif ($newmail_media=='(userfile)') {
+ $ret_media = "<!-- newmail usermedia option -->\n";
+ $ret_media.= newmail_media_objects('loadfile.php',
+ array($newmail_userfile_type),
+ sqm_baseuri() . 'plugins/newmail/',
+ array('width'=>0,'height'=>0),
+ '',false);
+ $ret_media.= "<!-- end of newmail usermedia option -->\n";
+ } else {
+ $ret_media = "<!-- newmail sounds from sounds/*.wav -->\n";
+ $ret_media.= newmail_media_objects(basename($newmail_media),
+ array(SM_NEWMAIL_FILETYPE_WAV),
+ sqm_baseuri() . 'plugins/newmail/sounds/',
+ array('width'=>0,'height'=>0),
+ '',false);
+ $ret_media.= "<!-- end of newmail sounds from sounds/*.wav -->\n";
+ }
+ return $ret_media;
+}
+?>
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * SquirrelMail NewMail plugin
+ *
+ * Script loads user's media file.
+ * @version $Id$
+ * @package plugins
+ * @subpackage new_mail
+ */
+
+/** define SM_PATH */
+define('SM_PATH','../../');
+
+/** Load squirrelmail functions */
+include_once(SM_PATH . 'include/validate.php');
+/** Load plugin functions */
+include_once(SM_PATH . 'plugins/newmail/functions.php');
+
+sqgetGlobalVar('username',$username,SQ_SESSION);
+global $data_dir;
+
+$media = getPref($data_dir,$username,'newmail_media', '(none)');
+ // get other prefs
+ $newmail_userfile_type=getPref($data_dir,$username,'newmail_userfile_type',false);
+
+ $newmail_userfile_location=getHashedFile($username, $data_dir, $username . '.sound');
+
+ if ($newmail_userfile_type!=false && file_exists($newmail_userfile_location)) {
+ // open media file
+ $newmail_userfile_handle = fopen($newmail_userfile_location,'rb');
+ if ($newmail_userfile_handle) {
+ $newmail_userfile_filesize = filesize($newmail_userfile_location);
+ $newmail_userfile_contents = fread($newmail_userfile_handle,$newmail_userfile_filesize);
+ fclose ($newmail_userfile_handle);
+
+ // user prefs use only integer values to store file type
+ switch($newmail_userfile_type) {
+ case SM_NEWMAIL_FILETYPE_WAV:
+ // wav file
+ $newmail_userfile_contenttype='audio/x-wav';
+ break;
+ case SM_NEWMAIL_FILETYPE_MP3:
+ // mp3 file
+ $newmail_userfile_contenttype='audio/mpeg';
+ break;
+ case SM_NEWMAIL_FILETYPE_OGG:
+ // ogg file
+ $newmail_userfile_contenttype='application/ogg';
+ break;
+ case SM_NEWMAIL_FILETYPE_SWF:
+ // flash file
+ $newmail_userfile_contenttype='application/x-shockwave-flash';
+ break;
+ case SM_NEWMAIL_FILETYPE_SVG:
+ // svg file
+ $newmail_userfile_contenttype='image/svg+xml';
+ break;
+ default:
+ // none of above
+ $newmail_userfile_contenttype='unknown';
+ }
+
+ // make sure that media file is in correct format
+ $newmail_userfile_extension=newmail_detect_filetype($newmail_userfile_contents,$newmail_userfile_contenttype);
+
+ // last check before sending file contents to browser.
+ if ($newmail_userfile_extension!=false) {
+ $newmail_send_filename='mediafile.' . $newmail_userfile_extension;
+ header ('Content-Disposition: inline; filename="' . $newmail_send_filename . '"');
+ header('Content-Type: "' . $newmail_userfile_contenttype .'"; ' .
+ 'name="' . $newmail_send_filename . '"');
+ header('Content-Length: ' . $newmail_userfile_filesize );
+ echo $newmail_userfile_contents;
+ exit;
+ } // file type detection failed
+ } // failed to open userfile
+ } // userfile is missing or preferences don't store file type.
+// maybe we should send some error code
+?>
\ No newline at end of file
define('SM_PATH','../../');
/* SquirrelMail required files. */
-require_once(SM_PATH . 'include/validate.php');
+include_once(SM_PATH . 'include/validate.php');
/* sqm_baseuri function */
-require_once(SM_PATH . 'functions/display_messages.php');
+include_once(SM_PATH . 'functions/display_messages.php');
+/** Plugin functions (also loads plugin's config) */
+include_once(SM_PATH . 'plugins/newmail/functions.php');
displayPageHeader($color, 'None');
$media_recent = getPref($data_dir,$username,'newmail_recent');
$media_changetitle = getPref($data_dir,$username,'newmail_changetitle');
$media = getPref($data_dir,$username,'newmail_media', '(none)');
+$media_userfile_name = getPref($data_dir,$username,'newmail_userfile_name','');
// Set $allowsound to false if you don't want sound files available
$allowsound = "true";
html_tag( 'tr' ) .
html_tag( 'td', '', 'center', $color[4] ) . "\n" . '<hr style="width: 25%; height: 1px;" />' . "\n";
-echo '<form action="'.sqm_baseuri().'src/options.php" method="post">' . "\n" .
+echo '<form action="'.sqm_baseuri().'src/options.php" method="post" enctype="multipart/form-data">' . "\n" .
html_tag( 'table', '', '', '', 'width="100%" cellpadding="5" cellspacing="0" border="0"' ) . "\n";
// Option: media_allbox
}
}
$d->close();
- $media_output = ($media == '(none)') ? _("(none)") : substr($media, strrpos($media, '/')+1);
+ // display media selection
+ foreach($newmail_mmedia as $newmail_mm_name => $newmail_mm_data) {
+ echo '<option ';
+ if ($media=='mmedia_' . $newmail_mm_name) {
+ echo 'selected="selected" ';
+ }
+ echo 'value="mmedia_' . $newmail_mm_name . '">'
+ .htmlspecialchars($newmail_mm_name) . "</option>\n";
+ }
+ // display local file option
+ echo '<option ';
+ if ($media=='(userfile)') {
+ echo 'selected="selected" ';
+ }
+ echo 'value="(userfile)">'.
+ _("uploaded media file") . "</option>\n";
+ // end of local file option
+
+ // Set media file name
+ if ($media == '(none)') {
+ $media_output = _("none");
+ } elseif ($media == '(userfile)') {
+ $media_output = basename($media_userfile_name);
+ } elseif (preg_match("/^mmedia_+/",$media)) {
+ $media_output = preg_replace("/^mmedia_/",'',$media);
+ } else {
+ $media_output = substr($media, strrpos($media, '/')+1);
+ }
+
echo '</select>'.
'<input type="submit" value="' . _("Try") . '" name="test" onclick="' .
"window.open('testsound.php?sound='+media_sel.options[media_sel.selectedIndex].value, 'TestSound'," .
"'width=150,height=30,scrollbars=no');" .
'return false;' .
- '" /></td></tr>' .
- html_tag( 'tr', "\n" .
+ '" /></td></tr>';
+ echo '<tr>'.
+ '<td align="right" nowrap>' . _("Upload Media File:") .
+ '</td><td>'.
+ '<input type="file" size="40" name="media_file">'.
+ '</td>'.
+ '</tr>';
+
+ echo '<tr>'.
+ '<td align="right" nowrap>' . _("Uploaded Media File:") .
+ '</td><td>'.
+ ($media_userfile_name!='' ? htmlspecialchars($media_userfile_name) : _("unavailable")).
+ '</td>'.
+ '</tr>';
+
+ if ($media_userfile_name!='') {
+ echo '<tr>'
+ .'<td colspan="2" align="center">'
+ .sprintf(_("Media file %s will be removed, if you upload other media file."),basename($media_userfile_name))
+ .'</td></tr>';
+ }
+ echo html_tag( 'tr', "\n" .
html_tag( 'td', _("Current File:"), 'right', '', 'style="white-space: nowrap;"' ) .
html_tag( 'td', '<input type="hidden" value="' .
htmlspecialchars($media) . '" name="media_default" />' .
*/
/**
+ * sqm_baseuri function for setups that don't load it by default
*/
include_once(SM_PATH . 'functions/display_messages.php');
+/** Load plugin functions */
+include_once(SM_PATH . 'plugins/newmail/functions.php');
+
/**
* Checks if mailbox contains new messages.
*
* Save newmail plugin settings
*/
function newmail_sav() {
- global $data_dir, $username;
+ global $data_dir, $username, $_FILES;
if ( sqgetGlobalVar('submit_newmail', $submit, SQ_POST) ) {
$media_enable = '';
setPref($data_dir,$username,'newmail_changetitle',$media_changetitle);
if( sqgetGlobalVar('media_sel', $media_sel, SQ_POST) &&
- ($media_sel == '(none)' || $media_sel == '(local media)') ) {
+ $media_sel == '(none)' ) {
removePref($data_dir,$username,'newmail_media');
} else {
setPref($data_dir,$username,'newmail_media',$media_sel);
}
+
+ // process uploaded file
+ if (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');
+ }
+
+ }
+ }
+ }
}
}
global $username,$data_dir;
global $newmail_media,$newmail_enable,$newmail_popup,$newmail_allbox;
global $newmail_recent, $newmail_changetitle;
+ global $newmail_userfile_type;
$newmail_recent = getPref($data_dir,$username,'newmail_recent');
$newmail_enable = getPref($data_dir,$username,'newmail_enable');
$newmail_popup = getPref($data_dir, $username, 'newmail_popup');
$newmail_allbox = getPref($data_dir, $username, 'newmail_allbox');
$newmail_changetitle = getPref($data_dir, $username, 'newmail_changetitle');
+
+ $newmail_userfile_type = getPref($data_dir, $username, 'newmail_userfile_type');
}
/**
function newmail_plugin() {
global $username, $newmail_media, $newmail_enable, $newmail_popup,
$newmail_recent, $newmail_changetitle, $imapConnection, $PHP_SELF;
+ global $newmail_mmedia;
+ global $newmail_userfile_type;
if ($newmail_enable == 'on' ||
$newmail_popup == 'on' ||
"</script>\n";
}
+ // create media output if there are new email messages
if ($totalNew > 0 && $newmail_enable == 'on' && $newmail_media != '' ) {
- /**
- * docs about embed
- * Apple: http://www.apple.com/quicktime/authoring/embed.html
- */
- echo '<embed src="'.htmlspecialchars($newmail_media) .
- "\" hidden=\"true\" autostart=\"true\" width=\"2\" height=\"2\">\n";
+ echo newmail_create_media_tags($newmail_media);
}
+
if ($totalNew > 0 && $newmail_popup == 'on') {
echo "<script language=\"JavaScript\">\n".
"<!--\n".
echo html_tag( 'table',
html_tag( 'tr',
html_tag( 'td',
- '<embed src="'.htmlspecialchars($sound).'" hidden="true" autostart="true" width="2" height="2">'."\n".
+ newmail_create_media_tags($sound)."\n".
'<br />'.
'<b>' . _("Loading the sound...") . '</b><br />'.
'<form>'.