From: <pdo...@us...> - 2009-04-21 21:07:23
|
Revision: 13568 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13568&view=rev Author: pdontthink Date: 2009-04-21 21:07:13 +0000 (Tue, 21 Apr 2009) Log Message: ----------- Pull changes over from doc/i18n.txt Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-04-21 21:07:01 UTC (rev 13567) +++ trunk/documentation/devel/devel.sgml 2009-04-21 21:07:13 UTC (rev 13568) @@ -917,9 +917,10 @@ XTRA_CODE functions provide way to change interface behavior, when translation requires special handling of some SquirrelMail functions. Functions are enabled by setting XTRA_CODE option in $languages array and including appropriate -functions in <tt>functions/i18n.php</tt>. First part of function name is word listed in -$languages['language_code']['XTRA_CODE'] value. Second part is one of special -keywords. Possible keywords: +functions in <tt>locale/language_code/setup.php</tt> (SquirrelMail 1.5.x) or +<tt>functions/i18n.php</tt> (SquirrelMail 1.4.x). First part of function name is +word listed in $languages['language_code']['XTRA_CODE'] value. Second part is one +of special keywords. Possible keywords: <descrip> <tag/_decode/ Used in <tt>src/compose.php</tt>, <tt>src/i18n.php</tt>, <tt>src/view_text.php</tt>, and <tt>functions/mime.php</tt>. Requires mbstring support. @@ -976,25 +977,29 @@ <sect1>Plural forms <p> -Since 1.5.1, SquirrelMail includes support of plural forms. It allows to use -correct translation forms with numbers. For example. "We have %s squirrel on -the roof." and "We have %s squirrels on the roof." can be written in one -function call without checking actual number for squirrels. Gettext functions -also deal with non English languages that might use different word forms for -two, five, ten or more units. +From v.1.5.1 SquirrelMail includes support for plural forms. It allows the use +of correct translation forms with numbers. For example. "We have %s squirrel +on the roof." and "We have %s squirrels on the roof." can be written in one +function call without checking actual number of squirrels. The Gettext +functions also deal with non English languages that might use different word +forms for two, five, ten or more units. -Support is provided by ngettext functions that exist in PHP gettext extension -from PHP 4.2.0 and by ngettext function replacements from php-gettext classes -(http://savannah.nongnu.org/projects/php-gettext). In order to use it correctly -when PHP gettext extension does not have ngettext support, SquirrelMail uses -bindtextdomain and textdomain wrappers that load missing functions. +Plural forms support is provided by ngettext functions that exist in the PHP +Gettext extension as of PHP 4.2.0 and by ngettext function replacements from +the php-gettext classes (http://savannah.nongnu.org/projects/php-gettext). +In order to provide identical functionality when the PHP Gettext extension does +not have ngettext support, SquirrelMail uses bindtextdomain and textdomain +wrappers that load the missing functions. -If plugins want to use ngettext functions without increasing PHP requirements -to 4.2.0 with gettext support, they should require SquirrelMail 1.5.1, use -sq_bindtextdomain function instead of bindtextdomain and use sq_textdomain -function instead of textdomain function. If SquirrelMail wrapper functions -are used, there is no need to issue sq_bindtextdomain when plugins reverts to -SquirrelMail domain. +If plugin authors want to use ngettext functions without increasing PHP +requirements to 4.2.0 with Gettext support, they should require at least +SquirrelMail 1.5.1, and use the sq_change_text_domain function instead of +separate calls to bindtextdomain and textdomain. If sq_change_text_domain +cannot be used, the sq_bindtextdomain function should be used instead of +bindtextdomain and the sq_textdomain function should be used instead of the +textdomain function. If these latter two SquirrelMail wrapper functions are +used (but again, please use sq_change_text_domain), there is no need to issue +a call to sq_bindtextdomain when a plugin reverts to the SquirrelMail domain. More information about ngettext and plural forms can be found at: http://www.gnu.org/software/gettext/manual/html_chapter/gettext_10.html#SEC150 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-04-21 21:25:26
|
Revision: 13570 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13570&view=rev Author: pdontthink Date: 2009-04-21 21:25:09 +0000 (Tue, 21 Apr 2009) Log Message: ----------- More clarification Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-04-21 21:24:16 UTC (rev 13569) +++ trunk/documentation/devel/devel.sgml 2009-04-21 21:25:09 UTC (rev 13570) @@ -896,9 +896,15 @@ alias should contain the aliased language code and the 'value' should contain the language code SquirrelMail uses to store the actual translation. For example, the <url url="http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/locales/locale/nb_NO/setup.php?view=markup" name="Norwegian"> - Translation is stored in SquirrelMail as "nb_NO", but it also has an - alias for its ISO-639-1 code "nb". - See: <url url="http://loc.gov/standards/iso639-2/langhome.html" + Translation is stored in SquirrelMail as "nb_NO", but it also has + an alias for its ISO-639-1 code "nb". Note that while you may + string together any number of aliases (for example, "xx" ==> "yy" + ==> "no" ==> "nb_NO"), the final code must point to a language + that has a NAME and CHARSET defined in the <tt>$languages</tt> + array. Aliases are generally used to unify two and four-letter + language codes for the same language (such as "sv" and "sv_SE", + which should both be the same Swedish translation). See: + <url url="http://loc.gov/standards/iso639-2/langhome.html" name="ISO 639 list"> and <url url="http://www.iso.org/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html" name="country code list"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-04-24 06:07:19
|
Revision: 13592 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13592&view=rev Author: pdontthink Date: 2009-04-24 06:07:12 +0000 (Fri, 24 Apr 2009) Log Message: ----------- Update Italian with correct charset. Fredrik, don't forget this place. Are there any others we forgot recently? Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-04-23 19:13:29 UTC (rev 13591) +++ trunk/documentation/devel/devel.sgml 2009-04-24 06:07:12 UTC (rev 13592) @@ -802,7 +802,7 @@ <item>hu_HU - Hungarian, iso-8859-2 charset <item>id_ID - Indonesian, iso-8859-1 charset <item>is_IS - Icelandic, iso-8859-1 charset - <item>it_IT - Italian, iso-8859-1 charset + <item>it_IT - Italian, utf-8 charset <item>ja_JP - Japanese, euc-jp charset (emails are created in iso-2022-jp) <item>ka - Georgian, utf-8 charset (since 1.5.1 and 1.4.6) <item>ko_KR - Korean, euc-kr charset @@ -837,9 +837,9 @@ Charset totals: <itemize> - <item>iso-8859-1 = 21 + <item>iso-8859-1 = 20 <item>iso-8859-2 = 8 - <item>utf-8 = 13 + <item>utf-8 = 14 <item>iso-8859-15 = 2 <item>iso-8859-7 = 1 <item>iso-8859-9 = 1 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-05-07 21:51:06
|
Revision: 13654 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13654&view=rev Author: pdontthink Date: 2009-05-07 21:51:00 +0000 (Thu, 07 May 2009) Log Message: ----------- Reminder to update locales ChangeLog when adding languages Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-05 23:09:28 UTC (rev 13653) +++ trunk/documentation/devel/devel.sgml 2009-05-07 21:51:00 UTC (rev 13654) @@ -2882,6 +2882,7 @@ (<url url="http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/locales/locale/nb_NO/setup.php?view=markup" name="nb_NO">) one. See our <ref id="languages_array" name="explanation of the $languages array"> manual section. +<item><bf>Update <tt>ChangeLog.locales</tt>:</bf> Make a note of the new addition <item><bf>Update <tt>i18n.php</tt>:</bf> Copy the contents of the language <tt>setup.php</tt> file created in the previous step into a block in the STABLE branch <tt><url url="http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/branches/SM-1_4-STABLE/squirrelmail/functions/i18n.php?view=markup" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-05-07 21:57:03
|
Revision: 13657 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13657&view=rev Author: pdontthink Date: 2009-05-07 21:57:02 +0000 (Thu, 07 May 2009) Log Message: ----------- Adding Khmer translation. Thanks to Khoem Sokhem. Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-07 21:55:44 UTC (rev 13656) +++ trunk/documentation/devel/devel.sgml 2009-05-07 21:57:02 UTC (rev 13657) @@ -805,6 +805,7 @@ <item>it_IT - Italian, utf-8 charset <item>ja_JP - Japanese, euc-jp charset (emails are created in iso-2022-jp) <item>ka - Georgian, utf-8 charset (since 1.5.1 and 1.4.6) + <item>km - Khmer, utf-8 charset <item>ko_KR - Korean, euc-kr charset <item>lv_LV - Latvian, utf-8 charset <item>lt_LT - Lithuanian, utf-8 charset @@ -839,7 +840,7 @@ <itemize> <item>iso-8859-1 = 20 <item>iso-8859-2 = 6 - <item>utf-8 = 16 + <item>utf-8 = 17 <item>iso-8859-15 = 2 <item>iso-8859-7 = 1 <item>iso-8859-9 = 1 @@ -853,7 +854,7 @@ <item>big5 = 1 <item>euc-jp = 1 <item>euc-kr = 1 - <item>TOTAL = 56 + <item>TOTAL = 57 </itemize> <sect1>The <tt>$languages</tt> array<label id="languages_array"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-05-07 22:04:38
|
Revision: 13658 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13658&view=rev Author: pdontthink Date: 2009-05-07 22:04:17 +0000 (Thu, 07 May 2009) Log Message: ----------- Sync with redesign of sf.net Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-07 21:57:02 UTC (rev 13657) +++ trunk/documentation/devel/devel.sgml 2009-05-07 22:04:17 UTC (rev 13658) @@ -2906,8 +2906,8 @@ name="locales images"> directory. <item><bf/Update SourceForge:/ Add the language to the list of supported translations on the SquirrelMail project page by logging in as an administrator and going - to: "Project Admin" --> "Public Info" --> "Edit Trove Categorization" - --> "Translations" + to: "Project Admin" --> "Project Settings" --> "Public Info" + --> "Edit Trove Categorization" --> "Translations" <item><bf/Update SquirrelMail manual:/ Update the supported languages list in the Developer's Manual (<ref id="supported_languages" name=""Supported Languages" in docs/devel/devel-3">). This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-05-11 20:18:28
|
Revision: 13663 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13663&view=rev Author: pdontthink Date: 2009-05-11 20:18:22 +0000 (Mon, 11 May 2009) Log Message: ----------- Make docs obey preformatted text Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-08 17:53:37 UTC (rev 13662) +++ trunk/documentation/devel/devel.sgml 2009-05-11 20:18:22 UTC (rev 13663) @@ -2718,10 +2718,10 @@ <enum> <item> Commit final changes to Subversion (doc/ChangeLog, doc/ReleaseNotes, functions/strings.php) <item> Tag SVN with the release number in the format rel-X_Y_Z (rel-1_2_1). Example: - <tscreen> + <tscreen><verb> svn copy https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/branches/SM-1_4-STABLE/squirrelmail \ - https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/tags/rel-1_2_1 - </tscreen> +https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/tags/rel-1_2_1 + </verb></tscreen> <item> Use the script <tt>make-release</tt> <url url="http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/util/make-release" name="found in SVN"> under the <tt>util/</tt> dir. The only parameter is the version to release. It will download the tagged SVN copy, pack it up nicely and upload it to SF.net (CORRECTION - the upload commands are currently commented out, so you'll need to do that manually or edit the script to do that for you). You will need the following tools: bash, svn, ssh, curl, tar, gzip, zip, bzip2 and optionally rpmbuild. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-05-11 23:47:03
|
Revision: 13680 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13680&view=rev Author: pdontthink Date: 2009-05-11 23:46:55 +0000 (Mon, 11 May 2009) Log Message: ----------- Fix broken link Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-11 23:12:46 UTC (rev 13679) +++ trunk/documentation/devel/devel.sgml 2009-05-11 23:46:55 UTC (rev 13680) @@ -2735,7 +2735,7 @@ <enum> <item><tt>gpg --verify squirrelmail-X.Y.Z.tar.gz.sig squirrelmail-X.Y.Z.tar.gz</tt> </enum> - <item> Upload the release files (including the md5, sha and GPG signatures) to Sourceforge.net, see <url url="http://alexandria.wiki.sourceforge.net/File+Release+System+-+Offering+Files+for+Download#upload" name="sf.net instructions">. + <item> Upload the release files (including the md5, sha and GPG signatures) to Sourceforge.net, see <url url="http://apps.sourceforge.net/trac/sourceforge/wiki/Release%20files%20for%20download#Uploadafile" name="sf.net instructions">. <item> (huh: don't go to sleep before you're finished making the release) </enum> <item><bf/Defrosting:/ Prepare SVN for continued development This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-05-12 03:33:41
|
Revision: 13682 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13682&view=rev Author: pdontthink Date: 2009-05-12 03:33:28 +0000 (Tue, 12 May 2009) Log Message: ----------- Urgh. SourceForge changed their site again Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-12 00:04:23 UTC (rev 13681) +++ trunk/documentation/devel/devel.sgml 2009-05-12 03:33:28 UTC (rev 13682) @@ -2720,8 +2720,7 @@ <item> Tag SVN with the release number in the format rel-X_Y_Z (rel-1_2_1). Example: <tscreen><verb> svn copy https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/branches/SM-1_4-STABLE/squirrelmail \ -https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/tags/rel-1_2_1 - </verb></tscreen> +https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/tags/rel-1_2_1</verb></tscreen> <item> Use the script <tt>make-release</tt> <url url="http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/util/make-release" name="found in SVN"> under the <tt>util/</tt> dir. The only parameter is the version to release. It will download the tagged SVN copy, pack it up nicely and upload it to SF.net (CORRECTION - the upload commands are currently commented out, so you'll need to do that manually or edit the script to do that for you). You will need the following tools: bash, svn, ssh, curl, tar, gzip, zip, bzip2 and optionally rpmbuild. @@ -2735,7 +2734,7 @@ <enum> <item><tt>gpg --verify squirrelmail-X.Y.Z.tar.gz.sig squirrelmail-X.Y.Z.tar.gz</tt> </enum> - <item> Upload the release files (including the md5, sha and GPG signatures) to Sourceforge.net, see <url url="http://apps.sourceforge.net/trac/sourceforge/wiki/Release%20files%20for%20download#Uploadafile" name="sf.net instructions">. + <item> Upload the release files (including the md5, sha and GPG signatures) to Sourceforge.net, see <url url="http://apps.sourceforge.net/trac/sourceforge/wiki/Release%20files%20for%20download#Uploadafile" name="sf.net instructions"> or see <url url="http://apps.sourceforge.net/trac/sourceforge/wiki/File%20management%20service" name="sf.net upload protocols">. <item> (huh: don't go to sleep before you're finished making the release) </enum> <item><bf/Defrosting:/ Prepare SVN for continued development @@ -2751,12 +2750,14 @@ <enum> <item> Create the new release of files <enum> - <item> Log into SourceForge and go to the Admin section, File Releases. - <item> Click on the "add release" button for the correct package. - <item> Enter the release name in the box show in X.Y.Z format (no SquirrelMail or anything, just X.Y.Z). + <item> Log into SourceForge and go to the SquirrelMail project page. + <item> Under the "Project Admin" menu, select "Feature Settings". + <item> Now click the "Manage" link to the right of "File Release System". + <item> Click "Add Release" for the correct package. + <item> Enter the release name in X.Y.Z format (no SquirrelMail or anything, just X.Y.Z) and click the "Create This Release" button. <item> The next page it shows you will be the same page you get to if you clicked on "edit release" from the "Edit/Release Files" page earlier and selected a release name. </enum> - <item> Enter the ChangeLog and ReleaseNotes for this SourceForge file release. + <item> Enter the ChangeLog (only the part of that file for this release, not the whole file) and ReleaseNotes (the whole file) for this SourceForge file release. <item> Add the newly uploaded files to the release <enum> <item> Go down to the "add files to this release" section This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-05-12 06:45:41
|
Revision: 13683 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13683&view=rev Author: pdontthink Date: 2009-05-12 06:45:40 +0000 (Tue, 12 May 2009) Log Message: ----------- More sf.net changes Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-12 03:33:28 UTC (rev 13682) +++ trunk/documentation/devel/devel.sgml 2009-05-12 06:45:40 UTC (rev 13683) @@ -2790,7 +2790,9 @@ <enum> <item> Post the release to the SourceForge news system. (you need to be a "forum moderator" to do this) <enum> - <item> Click on News in the SourceForge interface. + <item> Log into SourceForge.net and proceed to the SquirrelMail project page. + <item> Under the "Project Admin" menu, select "Feature Settings". + <item> Click the "Submit" link to the right of "Project News". <item> Add a news item for this release in the SourceForge news system. (The 3 to 8 line message you've made) <item> Submit the news, go preview it, and fix it if you did something silly. :) </enum> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ki...@us...> - 2009-05-21 18:39:37
|
Revision: 13739 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13739&view=rev Author: kink Date: 2009-05-21 18:39:11 +0000 (Thu, 21 May 2009) Log Message: ----------- update release instructions: uploading is working again, and provide clickable direct links to announce squirrelmail in various places Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-21 17:32:27 UTC (rev 13738) +++ trunk/documentation/devel/devel.sgml 2009-05-21 18:39:11 UTC (rev 13739) @@ -2722,8 +2722,8 @@ svn copy https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/branches/SM-1_4-STABLE/squirrelmail \ https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/tags/rel-1_2_1</verb></tscreen> <item> Use the script <tt>make-release</tt> <url url="http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/util/make-release" name="found in SVN"> under the <tt>util/</tt> dir. The only parameter - is the version to release. It will download the tagged SVN copy, pack it up nicely and upload it to SF.net (CORRECTION - the upload commands are currently commented out, so you'll need to do that manually or edit the script to do that for you). - You will need the following tools: bash, svn, ssh, curl, tar, gzip, zip, bzip2 and optionally rpmbuild. + is the version to release. It will download the tagged SVN copy, pack it up nicely and upload it to SF.net. + You will need the following tools: bash, svn, ssh, rsync, tar, gzip, zip, bzip2 and optionally rpmbuild. <item> Create a GPG signature for each of the newly created release packages. Typically, this can be done with: <enum> <item><tt>gpg -a --detach-sign --output squirrelmail-X.Y.Z.tar.gz.sig squirrelmail-X.Y.Z.tar.gz</tt> @@ -2734,7 +2734,6 @@ <enum> <item><tt>gpg --verify squirrelmail-X.Y.Z.tar.gz.sig squirrelmail-X.Y.Z.tar.gz</tt> </enum> - <item> Upload the release files (including the md5, sha and GPG signatures) to Sourceforge.net, see <url url="http://apps.sourceforge.net/trac/sourceforge/wiki/Release%20files%20for%20download#Uploadafile" name="sf.net instructions"> or see <url url="http://apps.sourceforge.net/trac/sourceforge/wiki/File%20management%20service" name="sf.net upload protocols">. <item> (huh: don't go to sleep before you're finished making the release) </enum> <item><bf/Defrosting:/ Prepare SVN for continued development @@ -2780,20 +2779,19 @@ <item> Edit plugin_query.php file and change version number. This file informs pupdate plugin users about new release. <item> Upload the md5sums that make-release calculated into the <tt>sums/</tt> dir. </enum> -<item><bf/Get porting assistance:/ contact our people who know how to make decent .deb and .rpm files +<!--<item><bf/Get porting assistance:/ contact our people who know how to make decent .deb and .rpm files <enum> <item> For Debian, this is taken care of by Thijs Kinkhorst and Jeroen van Wolffelaar <item> RPM's are created by Konstantin Ryabitsev <item> Mail or IM them, and ask them very politlely to take the time to create their files. point them to the download page where they can already grab the .tar.gz - </enum> + </enum>--> <item><bf/Blatant yelling:/ Announce the release to the World. <enum> <item> Post the release to the SourceForge news system. (you need to be a "forum moderator" to do this) <enum> <item> Log into SourceForge.net and proceed to the SquirrelMail project page. - <item> Under the "Project Admin" menu, select "Feature Settings". - <item> Click the "Submit" link to the right of "Project News". - <item> Add a news item for this release in the SourceForge news system. (The 3 to 8 line message you've made) + <item> <url name="Add a news item for this release in the SourceForge news system." url="https://sourceforge.net/news/submit.php?group_id=311"> + (The 3 to 8 line message you've made) <item> Submit the news, go preview it, and fix it if you did something silly. :) </enum> <item> Add a news item to the SquirrelMail webpage. @@ -2817,8 +2815,8 @@ <item> Log out </enum> </enum> - <item>Update <url name="freshmeat.net" url="http://freshmeat.net/projects/squirrelmail/">. - <item>Update <url name="Wikipedia" url="http://en.wikipedia.org/wiki/SquirrelMail">. + <item>Update <url name="freshmeat.net" url="http://freshmeat.net/projects/squirrelmail/releases/new">. + <item>Update <url name="Wikipedia" url="http://en.wikipedia.org/w/index.php?title=SquirrelMail&action=edit">. </enum> </enum> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-05-21 19:59:20
|
Revision: 13741 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13741&view=rev Author: pdontthink Date: 2009-05-21 19:59:11 +0000 (Thu, 21 May 2009) Log Message: ----------- Instructions for upload still needed for GPG sigs Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-21 19:58:21 UTC (rev 13740) +++ trunk/documentation/devel/devel.sgml 2009-05-21 19:59:11 UTC (rev 13741) @@ -2734,6 +2734,7 @@ <enum> <item><tt>gpg --verify squirrelmail-X.Y.Z.tar.gz.sig squirrelmail-X.Y.Z.tar.gz</tt> </enum> + <item> Upload your GPG signatures to Sourceforge.net. See <url url="http://apps.sourceforge.net/trac/sourceforge/wiki/Release%20files%20for%20download#Uploadafile" name="sf.net instructions"> or see <url url="http://apps.sourceforge.net/trac/sourceforge/wiki/File%20management%20service" name="sf.net upload protocols">. <item> (huh: don't go to sleep before you're finished making the release) </enum> <item><bf/Defrosting:/ Prepare SVN for continued development @@ -2777,7 +2778,7 @@ <item> Change to the web directory for SquirrelMail (currently /srv/www/www/htdocs). <item> Edit download.php and change the version number as necessary. This is a php variable in the top part of the file. <item> Edit plugin_query.php file and change version number. This file informs pupdate plugin users about new release. - <item> Upload the md5sums that make-release calculated into the <tt>sums/</tt> dir. + <item> Upload the md5 checksums and sha1 checksums that make-release calculated and your GPG signatures into the <tt>sums/</tt> dir. </enum> <!--<item><bf/Get porting assistance:/ contact our people who know how to make decent .deb and .rpm files <enum> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-05-22 10:22:52
|
Revision: 13747 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13747&view=rev Author: jervfors Date: 2009-05-22 10:22:38 +0000 (Fri, 22 May 2009) Log Message: ----------- Ampersands must beHTML safe. Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-22 09:47:27 UTC (rev 13746) +++ trunk/documentation/devel/devel.sgml 2009-05-22 10:22:38 UTC (rev 13747) @@ -2817,7 +2817,7 @@ </enum> </enum> <item>Update <url name="freshmeat.net" url="http://freshmeat.net/projects/squirrelmail/releases/new">. - <item>Update <url name="Wikipedia" url="http://en.wikipedia.org/w/index.php?title=SquirrelMail&action=edit">. + <item>Update <url name="Wikipedia" url="http://en.wikipedia.org/w/index.php?title=SquirrelMail&action=edit">. </enum> </enum> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-05-31 10:19:44
|
Revision: 13775 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13775&view=rev Author: jervfors Date: 2009-05-31 10:19:36 +0000 (Sun, 31 May 2009) Log Message: ----------- E_STRICT is part of E_ALL since PHP 6. Thanks to Tomas Kuliavas for the information (#1728739). Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-31 10:06:17 UTC (rev 13774) +++ trunk/documentation/devel/devel.sgml 2009-05-31 10:19:36 UTC (rev 13775) @@ -386,6 +386,16 @@ to use <tt/isset()/ or <tt/empty()/ in tests. Use <tt>ini_get("safe_mode")</tt> to determine if you can use <tt>putenv()</tt>. +Since coding to elimnate the warnings produced by <tt/E_STRICT/ will result in +code that's not backwards compatible all the way to SquirrelMail's mimimal PHP +requirements, <tt/E_STRICT/ should be off. Note that <tt/E_STRICT/ is part of +<tt/E_ALL/ since PHP 6.0.0, so <tt/php.ini/ must be configured like this: + +<tscreen><verb> +display_errors = On +error_reporting = E_ALL ^ E_STRICT +</verb></tscreen> + <tag>Do not end a file with a PHP end tag <p> At the very end of the file, do not use the PHP end tag <tt/?>/ to close off This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-05-31 10:23:25
|
Revision: 13776 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13776&view=rev Author: jervfors Date: 2009-05-31 10:23:20 +0000 (Sun, 31 May 2009) Log Message: ----------- First spellcheck - then commit. Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-05-31 10:19:36 UTC (rev 13775) +++ trunk/documentation/devel/devel.sgml 2009-05-31 10:23:20 UTC (rev 13776) @@ -386,8 +386,8 @@ to use <tt/isset()/ or <tt/empty()/ in tests. Use <tt>ini_get("safe_mode")</tt> to determine if you can use <tt>putenv()</tt>. -Since coding to elimnate the warnings produced by <tt/E_STRICT/ will result in -code that's not backwards compatible all the way to SquirrelMail's mimimal PHP +Since coding to eliminate the warnings produced by <tt/E_STRICT/ will result in +code that's not backwards compatible all the way to SquirrelMail's minimal PHP requirements, <tt/E_STRICT/ should be off. Note that <tt/E_STRICT/ is part of <tt/E_ALL/ since PHP 6.0.0, so <tt/php.ini/ must be configured like this: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-06-02 06:30:11
|
Revision: 13779 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13779&view=rev Author: jervfors Date: 2009-06-02 06:30:05 +0000 (Tue, 02 Jun 2009) Log Message: ----------- Cleaning up some minor issues. Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-06-02 02:10:56 UTC (rev 13778) +++ trunk/documentation/devel/devel.sgml 2009-06-02 06:30:05 UTC (rev 13779) @@ -107,7 +107,7 @@ performed in server-side code despite the temptation to do so in client code in order to leverage libraries that allow "easier" client-side data validation. Google "Cross Site Scripting", "SQL Injection", and "client-side trust" for an -explanation of the pitfalls associated with weak client-side input validation. +explanation of the pitfalls associated with weak client-side input validation. This doesn't mean that it's not allowed to make use of JavaScript in SquirrelMail or its plugins, but as much of the functionality as possible @@ -252,9 +252,9 @@ fancy new feature that a developer implements - if it is only available in English, it can not be globally used. -<bf/User support:/ Thank goodness for our precious user support people. These -people patiently, repeatedly, respond to people's inquiries on the SquirrelMail -mailing lists. They often answer the same questions over and over, and are very +<bf/User support:/ Thank goodness for our precious user support people. These +people patiently, repeatedly, respond to people's inquiries on the SquirrelMail +mailing lists. They often answer the same questions over and over, and are very patient and consistent with their help. Without these people, where would we be? So, in short and again, the point is that SquirrelMail is simply a lot more then @@ -1320,7 +1320,7 @@ } </verb></tscreen> -Again, please note that as of SquirrelMail 1.5.2, this function is no longer +Again, please note that as of SquirrelMail 1.5.2, this function is no longer called at run time and is instead called (actually, it is only parsed, never executed) only once at configuration time. Thus, the inclusion of any dynamic code (anything except hook registration) here is strongly discouraged. @@ -1359,7 +1359,7 @@ execute its own code? Hooks themselves are functions executed by the SquirrelMail core using one of -just a few hook types which in turn pass execution to the plugins that have +just a few hook types which in turn pass execution to the plugins that have registered themselves against the current hook as explained <ref id="plugin_implementation" name="above">. @@ -1621,7 +1621,6 @@ <tscreen><verb> % = This hook is used in multiple places in the given file -# = Called with hook type (see below) O = Optional hook provided by a particular plugin &ero; = See "Identity hooks" below @@ -1646,8 +1645,8 @@ <p> When a message has attachments, this hook is called for each attachment according to its MIME type. For instance, a ZIP file will trigger a hook call to a hook -named "attachment application/x-zip". A plugin registered on such a hook typically -will show a link to do a specific action, such as "Verify" or "View" for a ZIP +named <tt>attachment application/x-zip</tt>. A plugin registered on such a hook typically +will show a link to do a specific action, such as "Verify" or "View" for a ZIP file. Thus, to register your plugin for ZIP attachments, you'd do this in <tt>setup.php</tt> (assuming your plugin is called "demo"): @@ -1660,14 +1659,14 @@ <tscreen><verb> [0] = An array of links for actions (see below) (alterable). -[1] = The message index of the first message on the message list page within - which the current message is found (startMessage). Can be used herein +[1] = The message index of the first message on the message list page within + which the current message is found (startMessage). Can be used herein for building URLs that point to the correct message list page. -[2] = The ID of the current message (id). Can be used herein to build URLs +[2] = The ID of the current message (id). Can be used herein to build URLs that point to the correct message. [3] = The mailbox name, encoded with urlencode() (urlMailbox). Can be used herein to build URLs that point to the correct message list page. -[4] = The entity ID of the attachment inside the mail message (ent). Can +[4] = The entity ID of the attachment inside the mail message (ent). Can be used herein to build URLs that point to the correct attachment. [5] = The default URL to go to when the filename is clicked upon (alterable, but only one URL is allowed, thus, the last plugin to execute for @@ -1675,10 +1674,10 @@ new action to array element 1 above). [6] = The filename that is displayed for the attachment. [7] = The "where" criteria that was used to find the current message (where) - (only applicable when the message was in fact found using a search). - Can be used herein to build URLs that point to the correct message list + (only applicable when the message was in fact found using a search). + Can be used herein to build URLs that point to the correct message list page. -[8] = The "what" criteria that was used to find the current message (what) +[8] = The "what" criteria that was used to find the current message (what) (only applicable when the message was in fact found using a search). Can be used herein to build URLs that point to the correct message list page. @@ -1785,8 +1784,8 @@ standard PHP inline output function. The configtest script is executed in an anonymous, unauthenticated environment, so -username and password information isn't available as it would be in all other -SquirrelMail scripts. Only a limited set of functions are loaded. The +username and password information isn't available as it would be in all other +SquirrelMail scripts. Only a limited set of functions are loaded. The <tt/do_err()/ function is a special configtest script function, which is used to print error messages. If a plugin uses the <tt/do_err()/ function, it is recommended to set the second function argument to @@ -1868,7 +1867,7 @@ </verb></tscreen> The first hook argument was modified in 1.4.5 and 1.5.1. In SquirrelMail -1.4.1-1.4.4 and 1.5.0i, the argument only contains the background color. You +1.4.1--1.4.4 and 1.5.0, the argument only contains the background color. You should use <tt/<tr bgcolor="<?php echo $args[0]; ?>">/ in these SquirrelMail versions. @@ -1910,11 +1909,11 @@ <sect2>Requesting new hooks <p> -It's impossible for the SquirrelMail team to foresee all of the places where -hooks might be useful, so you might need to negotiate the insertion of a new -hook to make your plugin work. Start by writing a patch which will insert the -hook you want to add, and mail your request (with the patch attached) to the -SquirrelMail development mailing list. Don't forget to explain the need for the +It's impossible for the SquirrelMail team to foresee all of the places where +hooks might be useful, so you might need to negotiate the insertion of a new +hook to make your plugin work. Start by writing a patch which will insert the +hook you want to add, and mail your request (with the patch attached) to the +SquirrelMail development mailing list. Don't forget to explain the need for the new hook in your message. <sect1>Preferences<label id="preferences"> @@ -2055,10 +2054,10 @@ user. <tag><tt/extra_attributes/</tag> -This is where you may add any additional JavaScript or other attributes to the -preference element. The value of this setting should be an array, where the +This is where you may add any additional JavaScript or other attributes to the +preference element. The value of this setting should be an array, where the keys of the array are the attribute names as you expect them to show up in the -resulting HTML, and the values are the corresponding attribute values. For +resulting HTML, and the values are the corresponding attribute values. For example, you could add an "onchange" JavaScript handler to a drop-down list: <tscreen><verb> @@ -2111,7 +2110,6 @@ 'save' => 'save_plugin_demo_favorite_color' ); } - </verb></tscreen> If you indicated a <tt/save/ attribute for any of your preferences, you must @@ -2247,7 +2245,7 @@ The URI that points to your plugin's custom preferences page. <tag/desc/ A description of what the preferences page offers the user. This is displayed at -the Options page below the title. Note that the text domain has to be changed to +the Options page below the title. Note that the text domain has to be changed to properly translate this text. <tag/js/ Indicates if this preference page requires the client browser to be @@ -2255,9 +2253,9 @@ </descrip> The next step is to create your custom options page, keeping in mind the guidelines -in <ref id="pagescalleddirectly" name="pages called directly"> and possibly using +in <ref id="pagescalleddirectly" name="pages called directly"> and possibly using the techniques described in <ref id="savepref" name="Saving and retrieving -preferences"> below. +preferences"> below. <sect2>Saving and retrieving preferences<label id="savepref"> <p> @@ -2266,9 +2264,9 @@ <sect1>Plugin pages called directly by the client browser<label id="pagescalleddirectly"> <p> -There are a few places in a plugin, such as when hooking into the "menuline" or +There are a few places in a plugin, such as when hooking into the "menuline" or "optpage_register_block" hooks, where you can provide a link to a file that is -called directly by the client browser. No matter what that page does, it should +called directly by the client browser. No matter what that page does, it should always validate that the calling client has a current login session. Thus, all such pages should start with the following code: @@ -2313,7 +2311,7 @@ from the rest of the plugin code. A typical file name to use is <tt/config.php/. The plugin should allow the administrator to store this file in either the plugin directory or in the main SquirrelMail configuration -directory, giving precedence to the latter. +directory, giving precedence to the latter. Plugins that make use of configuration files should <it/not/ include a file called <tt/config.php/ in distribution packages; instead, a copy of that file @@ -2339,13 +2337,13 @@ <sect1>Versioning <sect2>Version numbering <p> -In order to facilitate easier (and possibly automated) plugin management by +In order to facilitate easier (and possibly automated) plugin management by system administrators as well as in-SquirrelMail functionality that enables -cross-plugin compatibility and communication, plugin versioning should remain +cross-plugin compatibility and communication, plugin versioning should remain consistent with that of SquirrelMail itself. While SquirrelMail does its best to work with non-standard version strings, versioning such as that -explained in <ref id="versionformat" name="Version numbering">, with the -possible addition of an applicable SquirrelMail version, is the best way +explained in <ref id="versionformat" name="Version numbering">, with the +possible addition of an applicable SquirrelMail version, is the best way to track your plugin's development (i.e., "1.0.4-1.4.5" or just "1.0.4"). Versions with only two digits ("1.0-1.4.5" or just "1.0") are also acceptable (a third digit of zero is implied). @@ -2354,11 +2352,11 @@ <p> The way any automated process gets its hands on the plugin version string depends on the SquirrelMail version being used. As of SquirrelMail 1.5.2, -plugins should include an administrative function in <tt/setup.php/ that -returns an array of details that describe the plugin, including its version -number. The function must be named <tt/<plugin name>_info()/ and +plugins should include an administrative function in <tt/setup.php/ that +returns an array of details that describe the plugin, including its version +number. The function must be named <tt/<plugin name>_info()/ and should return an associative array of version and requirements information. -Currently, at least the following elements are required, but the more +Currently, at least the following elements are required, but the more information returned, the better. <tabular ca="lll"> @@ -2462,10 +2460,10 @@ </verb></tscreen> There is also a legacy version reporting mechanism that we would like plugin -authors to implement, since we are still in a transition period between the -older and newer reporting usages. The now deprecated reporting mechanism is to -create a file called <tt/version/ in the plugin directory. That file should -have only two lines: the first line should have the name of the plugin as +authors to implement, since we are still in a transition period between the +older and newer reporting usages. The now deprecated reporting mechanism is to +create a file called <tt/version/ in the plugin directory. That file should +have only two lines: the first line should have the name of the plugin as named on the SquirrelMail web site (this is often a prettified version of the plugin directory name), and the second line must have the version and nothing more. So for our "demo" plugin, whose name on the web site might be something like "Demo @@ -2497,7 +2495,7 @@ <tscreen><verb> <?php /* -# below is example non-PHP configuration +# below is example non-PHP configuration # data that is secured from prying eyes username_1 = admin @@ -2506,25 +2504,25 @@ */ ?> </verb></tscreen> -Another approach is to store sensitive configuration data in SquirrelMail's -own <tt/$data/ directory, since most system administrators (at least those who -have read the installation instructions) know that the <tt/$data/ directory +Another approach is to store sensitive configuration data in SquirrelMail's +own <tt/$data/ directory, since most system administrators (at least those who +have read the installation instructions) know that the <tt/$data/ directory needs to be protected and (hopefully) have made sure that it has been. -Never store unsecured configuration data that contains any user or system-specific +Never store unsecured configuration data that contains any user or system-specific information in your plugin directory. Even the above suggestions -may not be sufficient depending on how sensitive the data is that you are +may not be sufficient depending on how sensitive the data is that you are storing. In such a situation, you might think about a more complex encryption scheme such as the one provided by the <bf/vadmin/ plugin. -Note that just shipping unsecured configuration files along with a -configuration file for Apache (<tt/.htaccess/) is not sufficient because +Note that just shipping unsecured configuration files along with a +configuration file for Apache (<tt/.htaccess/) is not sufficient because not every system uses Apache as its web server. <sect2>Disallowing access for diabled plugins <p> -In some cases, it is also prudent to make sure that the plugin doesn't perform +In some cases, it is also prudent to make sure that the plugin doesn't perform its function when it is not enabled. Any functions or files that contain PHP code that is <tt/not/ wrapped inside a function can be protected from being executed when the plugin is not activated by adding code similar to this: @@ -2535,7 +2533,7 @@ } </verb></tscreen> -Note, however, that sometimes <tt/other/ plugins can legitimately access a +Note, however, that sometimes <tt/other/ plugins can legitimately access a disabled plugin, so don't shoot yourself in the foot with too much protection. <sect1>Coding tips<label id="plugin_coding_tips"> @@ -2559,24 +2557,24 @@ One way to keep both sides happy is to keep two different versions of your plugin up to date, one that runs under the older SquirrelMail, and one that requires the newest SquirrelMail. This is inconvenient, however, especially if -you are continuing to develop the plugin. +you are continuing to develop the plugin. Depending on the changes implemented in the new SquirrelMail version, another -approach you may be able to use is to include code that can auto-sense the -SquirrelMail version and make adjustments on the fly. There is a function called -<tt/check_sm_version()/ available which does that. Read more about it in the +approach you may be able to use is to include code that can auto-sense the +SquirrelMail version and make adjustments on the fly. There is a function called +<tt/check_sm_version()/ available which does that. Read more about it in the <url url="http://squirrelmail.org/docs/stable-code/squirrelmail/_functions---global.php.html#functioncheck_sm_version" name="stable"> and <url url="http://squirrelmail.org/docs/devel-code/squirrelmail/_functions---global.php.html#functioncheck_sm_version" name="development"> API documentation. -Finally, there is a plugin called "Compatibility" that is intended to solve -this problem without requiring any special coding on the part of plugin authors. -Authors can develop one version of their plugin and seamlessly support any -SquirrelMail version. Plugin code is typically developed against the newest -SquirrelMail release, and users running older versions of SquirrelMail can -use said plugin as long as they also have the "Compatibility" plugin. For +Finally, there is a plugin called "Compatibility" that is intended to solve +this problem without requiring any special coding on the part of plugin authors. +Authors can develop one version of their plugin and seamlessly support any +SquirrelMail version. Plugin code is typically developed against the newest +SquirrelMail release, and users running older versions of SquirrelMail can +use said plugin as long as they also have the "Compatibility" plugin. For more inforamtion, please download "Compatibility" and read its README file. <sect1>Documentation files @@ -2586,9 +2584,6 @@ troubleshooting, etc. This file is usually entitled <tt/README/. Some useful sections to include might be: -There are a few files that you should make sure to include when you build your -final plugin distribution. - <itemize> <item>Plugin name and author <item>Current version @@ -2635,8 +2630,8 @@ 1) Start with untaring the file into the plugins directory. Here is a example for the 3.1 version of the demo plugin. - cd plugins - tar -zxvf demo-3.1-1.4.0.tar.gz + cd plugins + tar -zxvf demo-3.1-1.4.0.tar.gz 2) Change into the demo directory, check your "config.php" file against the new version, to see if there are any new settings that you must add to your @@ -2696,11 +2691,11 @@ <p> When the plugin is ready to be reviewed by the SquirrelMail plugin team, mail it to the SquirrelMail plugin team members (who may be found by consulting the -<url url="http://www.squirrelmail.org/docs/devel/devel-1.html#ss1.2" +<url url="http://squirrelmail.org/docs/devel/devel-1.html#ss1.2" name="SquirrelMail team list">). When the plugin is approved and you're granted access to upload it, all you have -to do is the actual uploading along with filling out some general information +to do is the actual uploading along with filling out some general information about the plugin and what it does. <sect>Project Administration @@ -2814,7 +2809,7 @@ </enum> <item> Send a message to squirrelmail-announce telling people about the release. <enum> - <item> Also, currently, it seems to have become convention that the message gets sent to all our other mailing lists: <tt>squ...@li..., squ...@li..., squ...@li..., squ...@li..., squ...@li...</tt> + <item> Also, currently, it seems to have become convention that the message gets sent to all our other mailing lists: <tt>squ...@li..., squ...@li..., squ...@li..., squ...@li..., squ...@li...</tt> <item> Again, use your brief 3 to 8 line message <item> The subject should read "ANNOUNCE: SquirrelMail X.Y.Z Released" <item> Approve the message This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-06-04 03:18:38
|
Revision: 13781 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13781&view=rev Author: jervfors Date: 2009-06-04 03:18:28 +0000 (Thu, 04 Jun 2009) Log Message: ----------- Adding link to "Including files" in "Plugin pages called directly by the client browser". Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-06-02 06:42:56 UTC (rev 13780) +++ trunk/documentation/devel/devel.sgml 2009-06-04 03:18:28 UTC (rev 13781) @@ -528,7 +528,7 @@ list or IRC channel, because security is very important for a widely used application like SquirrelMail! -<sect1>Including files +<sect1>Including files<label id="including_files"> <p> It's sometimes needed to reference functionality provided in other files, and therefore those files need to be included. Files that are included by @@ -2301,7 +2301,9 @@ } </verb></tscreen> -TODO: Possibly provide link to the include hierarchy provided by init.php/validate.php +Don't forget to follow the instructions in <ref id="including_files" +name="Including files">. The list of files that are included by the code above +are also there. <sect1>Configuration<label id="plugin_configuration"> <p> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-06-04 03:21:32
|
Revision: 13782 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13782&view=rev Author: jervfors Date: 2009-06-04 03:21:29 +0000 (Thu, 04 Jun 2009) Log Message: ----------- Making TODO into one-liners for better catching in the TODO report. Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-06-04 03:18:28 UTC (rev 13781) +++ trunk/documentation/devel/devel.sgml 2009-06-04 03:21:29 UTC (rev 13782) @@ -782,8 +782,7 @@ <sect1>Supported Languages<label id="supported_languages"> <p> -TODO: Remove statistics and add them dynamically to the i18n stat's page, using -a script. +TODO: Remove statistics and add them dynamically to the i18n stat's page, using a script. Valid language codes are (<em>list depends on SquirrelMail version</em>): <itemize> @@ -2259,8 +2258,7 @@ <sect2>Saving and retrieving preferences<label id="savepref"> <p> -TODO: Complete this section. (What happened to the text for this section from -plugin.txt?) +TODO: Complete this section. (What happened to the text for this section from plugin.txt?) <sect1>Plugin pages called directly by the client browser<label id="pagescalleddirectly"> <p> @@ -2931,8 +2929,7 @@ <sect>Miscellaneous <p> -TODO: This is a quick and dirty import of the documents in "/doc/Development". -They all need to be cleand up and in the LinuxDoc format. +TODO: This is a quick and dirty import of the documents in "/doc/Development". They all need to be cleand up and in the LinuxDoc format. <sect1>Addressbook internals <p> @@ -3597,8 +3594,7 @@ <sect>Links <p> -TODO: This chapter should provide links to external sources of information. PHP -manuals, SquirrelMail API documentation, etc. +TODO: This chapter should provide links to external sources of information. PHP manuals, SquirrelMail API documentation, etc. <sect1>RFC standardization documents <p> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-06-04 03:26:32
|
Revision: 13783 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13783&view=rev Author: jervfors Date: 2009-06-04 03:26:30 +0000 (Thu, 04 Jun 2009) Log Message: ----------- Adding link to "Plugin pages called directly by the client browser" in "Including files". Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-06-04 03:21:29 UTC (rev 13782) +++ trunk/documentation/devel/devel.sgml 2009-06-04 03:26:30 UTC (rev 13783) @@ -535,7 +535,9 @@ SquirrelMail, such as <tt>functions/global.php</tt> or a plugin's <tt/setup.php/, already have much of the functionality available, but files that are requested directly by the client browser, such as files in <tt>src/</tt> or -a plugin's custom options page, <it/must/ have the initialization file included. +a plugin's custom options page (see <ref id="pagescalleddirectly" name="Plugin +pages called directly by the client browser">), <it/must/ have the +initialization file included. The initialization file will set up the SquirrelMail environment automatically to ensure that the user has been authenticated and is currently logged in, all This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-06-04 04:37:00
|
Revision: 13784 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13784&view=rev Author: jervfors Date: 2009-06-04 04:36:54 +0000 (Thu, 04 Jun 2009) Log Message: ----------- Although the new structure was introduced in 1.5.2, it should be used by all plugins from now on. This will help improving the plugins pages at <squirrelmail.org> and it won't cause any problems for plugins coded for SquirrelMail versions prior to 1.5.2. Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-06-04 03:26:30 UTC (rev 13783) +++ trunk/documentation/devel/devel.sgml 2009-06-04 04:36:54 UTC (rev 13784) @@ -2353,7 +2353,7 @@ <sect2>Version reporting<label id="plugin_version_reporting"> <p> The way any automated process gets its hands on the plugin version string -depends on the SquirrelMail version being used. As of SquirrelMail 1.5.2, +depends on the SquirrelMail version being used. All plugins should include an administrative function in <tt/setup.php/ that returns an array of details that describe the plugin, including its version number. The function must be named <tt/<plugin name>_info()/ and @@ -2446,10 +2446,11 @@ } </verb></tscreen> -Prior to SquirrelMail 1.5.2, a function called -<tt><plugin name>_version()</tt> was required. For the sake of -compatibility, it can be piggy-backed on top of the -<tt><plugin name>_info()</tt> function very simply as follows: +A function called <tt><plugin name>_version()</tt> is required in all +versions of SquirrelMail prior to SquirrelMail 1.5.2. This function provides a +subset of the information in <tt><plugin name>_info()</tt> (the version +number), so the easiest thing to do is to piggy-back it on top of the +<tt><plugin name>_info()</tt> function like this: <tscreen><verb> /** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-06-07 10:18:02
|
Revision: 13786 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13786&view=rev Author: jervfors Date: 2009-06-07 10:17:59 +0000 (Sun, 07 Jun 2009) Log Message: ----------- Adding an example for older SquirrelMail versions. Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-06-04 06:30:32 UTC (rev 13785) +++ trunk/documentation/devel/devel.sgml 2009-06-07 10:17:59 UTC (rev 13786) @@ -2464,7 +2464,7 @@ There is also a legacy version reporting mechanism that we would like plugin authors to implement, since we are still in a transition period between the -older and newer reporting usages. The now deprecated reporting mechanism is to +older and newer reporting usages. The now deprecated reporting mechanism is to create a file called <tt/version/ in the plugin directory. That file should have only two lines: the first line should have the name of the plugin as named on the SquirrelMail web site (this is often a prettified version of the plugin @@ -2487,7 +2487,6 @@ FIXME: more here about how to secure exec() calls with escapeshellarg() and named pipes method vs exec() - <sect2>Storing sensitive data <p> If a plugin needs to store sensitive user configuration files or other such data, @@ -2524,16 +2523,22 @@ <sect2>Disallowing access for diabled plugins <p> - In some cases, it is also prudent to make sure that the plugin doesn't perform its function when it is not enabled. Any functions or files that contain PHP code that is <tt/not/ wrapped inside a function can be protected from being executed when the plugin is not activated by adding code similar to this: <tscreen><verb> +# Since SquirrelMail 1.5.1. if ( !is_plugin_enabled('my_plugin_name') ) { exit('The plugin my_plugin_name isn't enabled in the SquirrelMail configuration.'); } + +# In SquirrelMail 1.4 and 1.5.0. +global $plugins; +if ( !in_array('mypluginname', $plugins) ) { + exit('The plugin my_plugin_name isn't enabled in the SquirrelMail configuration.'); +} </verb></tscreen> Note, however, that sometimes <tt/other/ plugins can legitimately access a This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jer...@us...> - 2009-10-28 12:12:06
|
Revision: 13868 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13868&view=rev Author: jervfors Date: 2009-10-28 12:11:56 +0000 (Wed, 28 Oct 2009) Log Message: ----------- Chris and Marc aren't active as project administrators anymore. Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-10-28 12:01:57 UTC (rev 13867) +++ trunk/documentation/devel/devel.sgml 2009-10-28 12:11:56 UTC (rev 13868) @@ -128,7 +128,6 @@ <p> <bf/Team leaders:/ <quote/Jonathan Angliss <jo...@sq...>/ -<quote/Chris Hilts <ta...@sq...>/ <bf/Team responsibilities:/ @@ -145,7 +144,7 @@ <sect2>The development branch team <p> <bf/Team leaders:/ -<quote/Marc Groot Koerkamp <ma...@sq...> / +<quote/Vacant/ <bf/Team responsibilities:/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2009-11-06 04:03:24
|
Revision: 13871 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13871&view=rev Author: pdontthink Date: 2009-11-06 04:03:15 +0000 (Fri, 06 Nov 2009) Log Message: ----------- Various updates to the plugin development guidelines Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2009-11-01 08:02:25 UTC (rev 13870) +++ trunk/documentation/devel/devel.sgml 2009-11-06 04:03:15 UTC (rev 13871) @@ -1205,8 +1205,8 @@ <sect1>Before embarking<label id="before_developing_plugins"> <p> -One of the most fun parts about programming is seeing an idea turn into a -working product - the transition from "what if SquirrelMail could do..." +One of the most enjoyable parts of programming is seeing an idea turn into +a working product - the transition from "what if SquirrelMail could do..." to "SquirrelMail <em/can/ do..." The SquirrelMail team can appreciate and relate to that kind of enthusiasm, but we also don't want to see it go to waste. Therefore, the first thing to be done before considering the development @@ -1218,13 +1218,13 @@ Additionally, in keeping with the SquirrelMail theme of providing a product that is simple to install and maintain, the team's philosophy regarding -plugins is to avoid the "Firefox syndrome", wherein it can take hours for -an administrator to understand what plugin is the right one for them. -Plugins that contain similar feature sets should be merged and authors should -work collaboratively instead of duplicating each others' efforts. If there -is a plugin on the SquirrelMail web site that <em/almost/ does what you -want to do, please inquire with its author and/or the SquirrelMail team -about enhancing it with your ideas. +plugins is to avoid the "Firefox Syndrome", wherein it can take hours for +an administrator to find the right plugin to suit a single need. Plugins +that contain similar feature sets should be merged and authors should work +collaboratively instead of duplicating each others' efforts. If there is a +plugin on the SquirrelMail web site that <em/almost/ does what you want to +do, please inquire with its author and/or the SquirrelMail team about +enhancing it with your ideas. <sect1>The plugin architecture<label id="plugin_architecture"> <p> @@ -1243,8 +1243,8 @@ are called "hooks". There are some limitations with what these hooks can do. It is difficult to use -them to change the layout and to change functionality that already is in -SquirrelMail. +them to change the layout and to change some functionalities that are hard-coded +in SquirrelMail. <sect2>The implementation<label id="plugin_implementation"> <p> @@ -1272,7 +1272,7 @@ <label id="plugin_registration">When a plugin is registered, the file <tt>plugins/plugin_name/setup.php</tt> is loaded and the function -<tt/squirrelmail_plugin_init_<plugin_name>()/ is called with no parameters. +<tt/squirrelmail_plugin_init_<plugin name>()/ is called with no parameters. That function is where the plugin may register itself against any hooks it wishes to take advantage of. @@ -1291,7 +1291,7 @@ <sect2>Plugin initialization<label id="plugin_setup_file"> <p> All plugins must contain a file called <tt/setup.php/ and must include a -function called <tt/squirrelmail_plugin_init_<plugin_name>()/ therein. +function called <tt/squirrelmail_plugin_init_<plugin name>()/ therein. Since including numerous plugins can slow SquirrelMail's performance considerably, the <tt/setup.php/ file should contain little else. Any functions that are registered against plugin hooks should do little more than call another @@ -1301,7 +1301,7 @@ Any other files used by the plugin should also be placed in the plugin directory (or a subdirectory thereof) and should contain the bulk of the plugin logic. -The function <tt/squirrelmail_plugin_init_<plugin_name>()/ is called to +The function <tt/squirrelmail_plugin_init_<plugin name>()/ is called to initalize a plugin as explained <ref id="plugin_registration" name="above">. This function could look something like this (if the plugin was named "demo" and resided in the directory <tt>plugins/demo/</tt>): @@ -1314,9 +1314,9 @@ global $squirrelmail_plugin_hooks; $squirrelmail_plugin_hooks['optpage_register_block']['demo'] - = 'plugin_demo_options'; + = 'plugin_demo_options_stub'; $squirrelmail_plugin_hooks['login_cookie']['demo'] - = 'plugin_demo_login'; + = 'plugin_demo_login_stub'; } </verb></tscreen> @@ -1329,24 +1329,24 @@ <p> In the example <ref id="plugin_init_example" name="above">, the "demo" plugin should also have two other functions in its <tt/setup.php/ file called -<tt/plugin_demo_options()/ and <tt/plugin_demo_login()/. The first of these -might look something like this: +<tt/plugin_demo_options_stub()/ and <tt/plugin_demo_login_stub()/. The first +of these might look something like this: <tscreen><verb> /** * Add link to the Demo options page on the SquirrelMail * main options page listing */ -function plugin_demo_options() { +function plugin_demo_options_stub() { include_once(SM_PATH . 'plugins/demo/functions.php'); - plugin_demo_options_do(); + plugin_demo_options(); } </verb></tscreen> -The function called <tt/plugin_demo_options_do()/ in the file +The function called <tt/plugin_demo_options()/ in the file <tt>plugins/demo/functions.php</tt> contains the plugin's core logic for the -<tt/optpage_register_block/ hook. Aside from <tt/plugin_demo_options()/ and -<tt/plugin_demo_login()/ and the +<tt/optpage_register_block/ hook. Aside from <tt/plugin_demo_options_stub()/ +and <tt/plugin_demo_login_stub()/ and the <ref id="plugin_version_reporting" name="version reporting information explained below">, there should be little-to-nothing else in <tt/setup.php/. @@ -1406,7 +1406,7 @@ The <tt/concat_hook_function()/ is used in places where the SquirrelMail core needs to aggregate return data from all plugins on the same hook. -Plugins are provided with the same (modifyable) parameter as with <tt/do_hook/. +Plugins are provided with the same (modifiable) parameter as with <tt/do_hook/. In some places, the core will expect all plugins to return strings, which will be concatenated together and returned to the SquirrelMail core. In other cases, arbitrary values are used by the core, which will be placed into an array of @@ -1432,7 +1432,7 @@ </itemize> Plugins using <tt/boolean_hook_function/ are provided with the same -(modifyable) parameter as with <tt/do_hook/. Please remember NEVER to output +(modifiable) parameter as with <tt/do_hook/. Please remember NEVER to output any HTML directly during hook execution. Read more about the <tt/boolean_hook_function()/ function in the @@ -1515,10 +1515,16 @@ TODO: Update this list. (especially in 1.5.2, we are removing a great number of hooks to be replaced with the template_construct_<template> hook) +TODO: For 1.5.2, the template_construct_<template> hook deserves special attention (explanation) below - briefly, plugins can add output in templates by hooking into the template_construct_<template file> hook -- the "template file" is the template file name that is to be modified by the plugin, and the plugin points of modification in that file are found by looking for "plugin_output" in the template code - e.g.: <?php if (!empty($plugin_output['menuline'])) echo $plugin_output['menuline']; ?> The plugin can then add its output at the desired array index by returning it from the hook in a one-element array with the key being the desired "plugin_output" index in the template file and the value being the output: return array('menuline' => $output); + TODO: Reduce list of hooks by grouping them into separate chapters. TODO: List is very out-of-synch with newest 1.5.2 and all its changes, as is the rest of the plugin documentation... much needs to be re-written +TODO: Even for 1.4.x, this list may no longer accurate + +TODO: The hook explanations below this list are also out of date! Need to update! + <tabular ca="llll"> <bf/Hook name/|<bf/Found in/|<bf/Called with/|<bf/Notes/@ <tt/abook_init/|<tt>functions/addressbook.php</tt>|<tt/do_hook()/| @ @@ -1687,9 +1693,9 @@ like this: <tscreen><verb> -$args[0]['<plugin_name>']['href'] = 'link URL'; -$args[0]['<plugin_name>']['text'] = _("Text to display"); -$args[0]['<plugin_name>']['extra'] = +$args[0]['<plugin name>']['href'] = 'link URL'; +$args[0]['<plugin name>']['text'] = _("Text to display"); +$args[0]['<plugin name>']['extra'] = 'extra stuff, such as an <img ...> tag (will be part of the clickable link)'; </verb></tscreen> @@ -1726,12 +1732,12 @@ bindtextdomain('demo', SM_PATH . 'locale'); textdomain('demo'); - $args[0]['demo']['href'] = SM_PATH . 'plugins/demo/zip_handler.php?' . + $args[0]['demo']['href'] = sqm_baseuri() . 'plugins/demo/zip_handler.php?' . 'passed_id=' . $args[2] . '&ero;mailbox=' . $args[3] . '&ero;passed_ent_id=' . $args[4]; $args[0]['demo']['text'] = _("Show zip contents"); - bindtextdomain('squirrelmail', SM_PATH . 'locale'); + bindtextdomain('squirrelmail', sqm_baseuri() . 'locale'); textdomain('squirrelmail'); } </verb></tscreen> @@ -1924,11 +1930,12 @@ will the proposed preferences actually be used? Will users understand what these preferences are for? Consider this carefully. -If you decide that more preferences really are needed for your plugin, there are -two ways to add them. When there's only a few preferences that doesn't merit an +If you decide that more preferences are needed for your plugin, there are two +ways to add them. When there's only a few preferences that don't merit an entirely new preferences page, you can incorporate them as a section in an existing SquirrelMail preference section ("Personal Information", "Display -Preferences", "Message Highlighting", "Folder Preferences", or "Index Order"). +Preferences", "Message Highlighting", "Folder Preferences", or "Index Order"; +in 1.5.2 and above, there is also a section called "Compose Preferences"). If there's an extensive number of preferences, a separate page might be needed. There may also be other reasons to create a separate page for the user to interact with. @@ -1936,12 +1943,13 @@ <sect2>Adding preferences to an existing page <p> There are two ways to accomplish the integration of your plugin's settings into -another preferences page. The first, and preferred, way to add preferences to an -existing preference page is to use one of the <tt/"optpage_loadhook_<pref +another preferences page. The first, and preferred, way to add preferences to +an existing preference page is to use one of the <tt/"optpage_loadhook_<pref page>/ hooks. The <tt/sent_subfolders/ plugin has an excellent example of -this method. Briefly, this way of adding preferences consists of adding some -plugin-specific information to a predefined data structure which SquirrelMail -then uses to build the HTML input forms for you. +this method (although beware that several other aspects of it are not currently +conformant to plugin specifications). Briefly, this way of adding preferences +consists of adding some plugin-specific information to a predefined data +structure which SquirrelMail then uses to build the HTML input forms for you. As an example, we'll use the <tt/optpage_loadhook_display/ hook to add a new group of preferences to the display preferences page. First, we inform @@ -1950,14 +1958,14 @@ <tt>plugins/demo/setup.php</tt>: <tscreen><verb> -$squirrelmail_plugin_hooks['optpage_loadhook_display']['demo'] = 'demo_options'; +$squirrelmail_plugin_hooks['optpage_loadhook_display']['demo'] = 'demo_options_stub'; </verb></tscreen> -Make sure that the function <tt/demo_options()/ calls another function, located -elsewhere, called <tt/demo_options_do()/. The <tt/demo_options()/ function needs -to add a new key to two arrays: <tt/$optpage_data['grps']/ and +Make sure that the function <tt/demo_options_stub()/ calls another function, +located elsewhere, called <tt/demo_options()/. The <tt/demo_options()/ function +needs to add a new key to two arrays: <tt/$optpage_data['grps']/ and <tt/$optpage_data['vals']/. The value associated with the key in -<tt/$optpage_data['grps']/ should simply be the plugin's section heading at the +<tt/$optpage_data['grps']/ should simply be the plugin's section heading on the preferences page, and the value associated with the key in <tt/$optpage_data['vals']/ an array with all the plugin's preferences. (Yes, that's four levels of nested arrays.) The specified preference attributes are @@ -1965,8 +1973,9 @@ example includes just one input element, a <tt/select/ (drop-down) list: <tscreen><verb> -function demo_options_do() { +function demo_options() { global $optpage_data; + sq_change_text_domain('demo'); $optpage_data['grps']['demo'] = _("Demo Options"); $optionValues = array(); $optionValues[] = array( @@ -1981,6 +1990,7 @@ 'save' => 'save_plugin_demo_favorite_color' ); $optpage_data['vals']['demo'] = $optionValues; + sq_change_text_domain('squirrelmail'); } </verb></tscreen> @@ -2008,12 +2018,13 @@ <item><tt><bf/SMOPT_TYPE_TEXTAREA/</tt> for a text area. <item><tt><bf/SMOPT_TYPE_INTEGER/</tt> for an integer. <item><tt><bf/SMOPT_TYPE_FLOAT/</tt> for a floating point number. - <item><tt><bf/SMOPT_TYPE_BOOLEAN/</tt> for a boolean (yes/no) radio buttons. + <item><tt><bf/SMOPT_TYPE_BOOLEAN/</tt> for a boolean (off/on) checkbox. <item><tt><bf/SMOPT_TYPE_HIDDEN/</tt> for a hidden input (not actually shown on preferences page). <item><tt><bf/SMOPT_TYPE_COMMENT/</tt> for a showing the text specified by the <tt/comment/ attribute, but no user input is needed. <item><tt><bf/SMOPT_TYPE_FLDRLIST/</tt> for a select list of IMAP folders. <item><tt><bf/SMOPT_TYPE_FLDRLIST_MULTI/</tt> for a select list of IMAP folders where the user can select more than one folder. </itemize> +TODO: Version 1.5.2+ have some new option types: SMOPT_TYPE_EDIT_LIST, SMOPT_TYPE_STRLIST_MULTI, SMOPT_TYPE_BOOLEAN_CHECKBOX, SMOPT_TYPE_BOOLEAN_RADIO, SMOPT_TYPE_STRLIST_RADIO, SMOPT_TYPE_SUBMIT, SMOPT_TYPE_INFO, SMOPT_TYPE_PASSWORD <tag><tt/refresh/ (optional)</tag> Indicates if a link should be shown to refresh part or all of the window after @@ -2082,7 +2093,7 @@ </descrip> -Note that you do not have to create a whole new section at the preferences page +Note that you do not have to create a whole new section on the preferences page if you merely want to add a simple input item or two to a preferences section that already exists. For example, the "Display Options" page has these groups: @@ -2096,8 +2107,9 @@ create your own group - just add it to the existing one. <tscreen><verb> -function demo_options_do() { +function demo_options() { global $optpage_data; + sq_change_text_domain('demo'); $optpage_data['vals'][1][] = array( 'name' => 'plugin_demo_favorite_color', 'caption' => _("Please choose your favorite color"), @@ -2109,6 +2121,7 @@ 3 => _("orange")), 'save' => 'save_plugin_demo_favorite_color' ); + sq_change_text_domain('squirrelmail'); } </verb></tscreen> @@ -2121,7 +2134,7 @@ <tscreen><verb> function save_plugin_demo_favorite_color($option) { - // if user chose orange, make note that they are really dumb + // if user chose orange, do something special if ($option->new_value == 3) { // more code here as needed } @@ -2138,17 +2151,19 @@ The second, deprecated, legacy method is to add the HTML code for your preferences directly to the preferences page of your choice. Although currently -very popular, avoid it if you can. That said, here is how it works. Look for any -of the hooks named as <tt/options_<pref page>_inside/, where <pref -page> is "display", "personal", etc. For this example, we'll use -<tt/options_display_inside/ and, as above, "demo" as our plugin name: +very popular, please avoid it if you can. The SquirrelMail team may refuse +to publish plugins using such code, but we provide this information for the +rare case where the method above may not work. Look for any of the hooks named +as <tt/options_<pref page>_inside/, where <pref page> is "display", +"personal", etc. For this example, we'll use <tt/options_display_inside/ and, +as above, "demo" as our plugin name: Inform SquirrelMail that we want to use this hook by adding a line to the <tt/squirrelmail_plugin_init_demo()/ function in <tt>plugins/demo/setup.php</tt>: <tscreen><verb> -$squirrelmail_plugin_hooks['options_display_inside']['demo'] = 'demo_show_options'; +$squirrelmail_plugin_hooks['options_display_inside']['demo'] = 'demo_show_options_stub'; </verb></tscreen> Note that there are also hooks such as <tt/options_display_bottom/, however, @@ -2157,7 +2172,7 @@ the HTML <tt/form/ element). It is possible to use these hooks if you want to create your own form with custom submission logic. -The function <tt/demo_show_options_do()/ should have output similar to this +The function <tt/demo_show_options()/ should have output similar to this (note that you will be inserting code into a table that is already defined with two columns, so please be sure to keep this framework in your plugin): @@ -2165,17 +2180,17 @@ ------cut here------- <tr> <td> - OPTION_NAME + OPTION NAME &etago;td> <td> - OPTION_INPUT + OPTION INPUT &etago;td> &etago;tr> ------cut here------- </verb></tscreen> -Of course, you can place any text where "OPTION_NAME" is and any input tags -where "OPTION_INPUT" is. +Of course, you can place any text where "OPTION NAME" is and any input tags +where "OPTION INPUT" is. You will want to use the <tt/options_<pref page>_save/ hook (in this case, <tt/options_display_save/) to save the user's settings after they have pressed @@ -2184,19 +2199,21 @@ <tt>plugins/demo/setup.php</tt>: <tscreen><verb> -$squirrelmail_plugin_hooks['options_display_save']['demo'] = 'demo_save_options'; +$squirrelmail_plugin_hooks['options_display_save']['demo'] = 'demo_save_options_stub'; </verb></tscreen> -The function <tt/demo_save_options_do()/ should put the user's settings into +The function <tt/demo_save_options()/ should put the user's settings into permanent storage (see <ref id="savepref" name="Saving and retrieving preferences"> below for more information). This example assumes that in the preferences page, the input element's <tt/name/ attribute was set to "demo_option": <tscreen><verb> -global $data_dir, $username; -sqgetGlobalVar('demo_option', $demo_option); -setPref($data_dir, $username, 'demo_option', $demo_option); +function demo_save_options() { + global $data_dir, $username; + sqgetGlobalVar('demo_option', $demo_option); + setPref($data_dir, $username, 'demo_option', $demo_option); +} </verb></tscreen> <sect2>Creating a custom preference page @@ -2206,7 +2223,7 @@ special interaction with the user (for things such as changing password, etc.). Here is an outline of how to do so (again, using the "demo" plugin name): -First of all you have to add a new listing to the main "Options page". Always +First of all, you have to add a new listing to the main "Options" page. Always use the <tt/optpage_register_block/ hook where you create a simple array that lets SquirrelMail build the HTML to add the plugin preferences entry automatically. Inform SquirrelMail that we want to use this hook by adding a @@ -2214,25 +2231,25 @@ <tt>plugins/demo/setup.php</tt>: <tscreen><verb> -$squirrelmail_plugin_hooks['optpage_register_block']['demo'] = 'demo_options_block'; +$squirrelmail_plugin_hooks['optpage_register_block']['demo'] = 'demo_options_block_stub'; </verb></tscreen> -Assuming the function <tt/demo_options_block()/ calls another function elsewhere -called <tt/demo_options_block_do()/, that function only needs to create a simple -array and add it to the <tt/$optpage_blocks/ array: +Assuming the function <tt/demo_options_block_stub()/ calls another function +elsewhere called <tt/demo_options_block()/, that function only needs to create +a simple array and add it to the <tt/$optpage_blocks/ array: <tscreen><verb> -global $optpage_blocks; -bindtextdomain('demo', SM_PATH . 'locale'); -textdomain('demo'); -$optpage_blocks[] = array( - 'name' => _("Favorite Color Settings"), - 'url' => SM_PATH . 'plugins/demo/options.php', - 'desc' => _("Change your favorite color and find new exciting colors"), - 'js' => FALSE -); -bindtextdomain('squirrelmail', SM_PATH . 'locale'); -textdomain('squirrelmail'); +function demo_options_block() { + global $optpage_blocks; + sq_change_text_domain('demo'); + $optpage_blocks[] = array( + 'name' => _("Favorite Color Settings"), + 'url' => sqm_baseuri() . 'plugins/demo/options.php', + 'desc' => _("Change your favorite color and find new exciting colors"), + 'js' => FALSE + ); + sq_change_text_domain('squirrelmail'); +} </verb></tscreen> The array must have four elements: @@ -2249,7 +2266,10 @@ properly translate this text. <tag/js/ Indicates if this preference page requires the client browser to be -JavaScript-capable. Should be <tt/TRUE/ or <tt/FALSE/. +JavaScript-capable. Should be <tt/TRUE/ or <tt/FALSE/. If given as <tt/TRUE/ +and a user accesses SquirrelMail with JavaScript disabled in their browser +(or turns it off in their SquirrelMail user preferences), this preferences +"block" will not be shown on the "Options" page. </descrip> The next step is to create your custom options page, keeping in mind the guidelines @@ -2257,6 +2277,8 @@ the techniques described in <ref id="savepref" name="Saving and retrieving preferences"> below. +TODO: It is both possible AND RECOMMENDED for a plugin to have its custom preferences page auto-generated by SquirrelMail using the same code explained above plus some extra magic. We need to explain how to do that. For now, see the Server Settings plugin as a reference. + <sect2>Saving and retrieving preferences<label id="savepref"> <p> TODO: Complete this section. (What happened to the text for this section from plugin.txt?) @@ -2267,43 +2289,149 @@ "optpage_register_block" hooks, where you can provide a link to a file that is called directly by the client browser. No matter what that page does, it should always validate that the calling client has a current login session. Thus, all -such pages should start with the following code: +such pages should start with almost identical code as shown in the example below. +Note that the code that loads the SquirrelMail framework shown below works for +SquirrelMail versions from 1.2.x to 1.5.x; if your plugin does not support the +1.2.x series, for example, that part can be left out. + <tscreen><verb> -/* - * Pages that are called directly by the client browser need to load the - * SquirrelMail framework. This differs between various SquirrelMail versions. - * Plugins that don't support all SquirrelMail versions can strip some of this - * code away. - */ +// Load the SquirrelMail framework +// +// include/init.php contains the SquirelMail startup code starting +// with SquirrelMail 1.5.2 +// if (file_exists('../../include/init.php')) { - /* - * "include/init.php" is used since SquirrelMail 1.5.2. This isn't needed - * for plugins that don't support SquirrelMail 1.5.2 and later. - */ include_once('../../include/init.php'); + +// include/validate.php contains the SquirelMail startup code from +// SquirrelMail 1.4.0 up to SquirrelMail 1.5.1 +// } elseif (file_exists('../../include/validate.php')) { - /* - * "include/validate.php" is used since SquirrelMail 1.4.0 until version - * 1.5.1. - */ define('SM_PATH', '../../'); include_once(SM_PATH . 'include/validate.php'); + +// src/validate.php contains the SquirelMail startup code for the +// SquirrelMail 1.2.x series +// } else { - /* - * "src/validate.php" is used in SquirrelMail 1.2. This isn't needed for - * plugins that don't support SquirrelMail 1.2. - */ chdir('..'); define('SM_PATH', '../'); include_once(SM_PATH . 'src/validate.php'); } + + +// Make sure this plugin is activated +// +global $plugins; +if (!in_array('demo', $plugins)) + exit; </verb></tscreen> -Don't forget to follow the instructions in <ref id="including_files" -name="Including files">. The list of files that are included by the code above -are also there. +Here, the plugin's name would be "demo". There is more information about +the files and functionality that are loaded using the code above in the +<ref id="including_files" name=""including files" section of the SquirrelMail coding guidelines">. +<sect1>Internationalization<label id="plugin_internationalization"> +<p> +Although this document may only be available in English, we sure hope that you +are thinking about making your plugin useful to the thousands of non-English +speaking SquirrelMail users out there! It isn't much trouble, so failing to do +so could be considered almost rude. + +This document will only describe how you can accomplish the +internationalization of a plugin. For more general information about PHP and +SquirrelMail translation facilities, see the +<url url="http://squirrelmail.org/wiki/LanguageTranslation" +name="SquirrelMail language translation resources">. + +The steps to fully internationalizing your plugin are quite easy, especially +if you follow them from the beginning of the plugin's development: + +<sect2>Text Domains +<p> +Switch to what's called a "text domain" for your plugin before any text +output. After the output, you will want to switch back to the SquirrelMail +text domain. You switch text domains by using <tt/sq_change_text_domain()/. + +Note that if, in the middle of a translated function in your plugin, you use +any SquirrelMail functions that generate output, you'll need to temporarily +switch back to the SquirrelMail domain as well. + +<sect2>Output Syntax +<p> +<em/ALL/ textual output must be echoed using standard gettext syntax. This +includes hyperlink text, page titles, etc. Including the use of +<tt/sq_change_text_domain()/, here is the needed syntax: + +<tscreen><verb> + sq_change_text_domain('demo'); + echo _("Hello!"); + sq_change_text_domain('squirrelmail'); +</verb></tscreen> + +You must use double quotes around your strings - <em/not/ single quotes. +Also, please do not break up sentences (including punctuation such as colons) +into fragments that might cause problems when translating into languages with +different syntactic structure. That is, <em/DO NOT/ do this: + +<tscreen><verb> + echo _("I want to eat a ") . $fruitName . _(" before noon."); +</verb></tscreen> + +Instead, do this: + +<tscreen><verb> + echo sprintf(_("I want to eat a %s before noon."), $fruitName); +</verb></tscreen> + +<sect2>Translation Template +<p> +Now you just need to provide a file that contains all the strings in your +plugin that need to be translated into any given language. There is a tool +that is available on most *nix systems that can build this file for you: + + +<tscreen><verb> + $ xgettext --keyword=_ -L php --default-domain=demo *.php --output=demo.pot +</verb></tscreen> + +Many plugin authors keep a special script file on hand in a "locale" directory +called "getpot" that does this automatically for them. You can borrow one such +file for your plugin. Please also store the resultant .pot file in the "locale" +directory, with a slightly modified header as follows: + +<tscreen><verb> +# <your language> SquirrelMail Demo Plugin Translation File +# Copyright (c) 2005-2009 The Squirrelmail Development Team +# This file is distributed under the same license as the SquirrelMail package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: demo\n" +"Report-Msgid-Bugs-To: SquirrelMail Internationalization <squ...@li...>\n" +"POT-Creation-Date: 2008-12-19 16:09-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: SquirrelMail Language Team <squ...@li...>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "Hello!" +msgstr "" + +msgid "Favorite Color" +msgstr "" +</verb></tscreen> + +When your plugin is accepted and published on the SquirrelMail web site, +this template file will be added to the main SquirrelMail repository and +any translations of it should be submitted to the SquirrelMail +Internationalization team for inclusion in future language packs. + <sect1>Configuration<label id="plugin_configuration"> <p> It is common to need a configuration file that holds some variables that are @@ -2332,8 +2460,9 @@ @include_once(SM_PATH . 'plugins/demo/config_default.php'); </verb></tscreen> -If the plugin <it/must/ be configured specifically for the system upon which -it is installed, remove the third line in this example. +Here, the plugin's name would be "demo". If the plugin <it/must/ be configured +specifically for the system upon which it is installed, remove the third +line in this example. <sect1>Versioning <sect2>Version numbering @@ -2390,8 +2519,8 @@ A typical implementation of this function is as follows. Note that this example shows a conditional requirement for the Compatibility plugin that is due to the (required) use of <tt/sq_change_text_domain()/ -[FIXME: PROVIDE LINK FOR THE FOLLOWING] -(explained in the plugin internationalization section below), which +(explained in the <ref id="plugin_internationalization" +name="plugin internationalization section"> below), which was added to the SquirrelMail core as of version 1.4.10 and 1.5.2. <tscreen><verb> @@ -2514,7 +2643,7 @@ information in your plugin directory. Even the above suggestions may not be sufficient depending on how sensitive the data is that you are storing. In such a situation, you might think about a more complex encryption -scheme such as the one provided by the <bf/vadmin/ plugin. +scheme such as the one provided by the <bf/Vadmin/ plugin. Note that just shipping unsecured configuration files along with a configuration file for Apache (<tt/.htaccess/) is not sufficient because @@ -2527,16 +2656,22 @@ code that is <tt/not/ wrapped inside a function can be protected from being executed when the plugin is not activated by adding code similar to this: +For SquirrelMail 1.5.1 and up: + <tscreen><verb> -# Since SquirrelMail 1.5.1. -if ( !is_plugin_enabled('my_plugin_name') ) { - exit('The plugin my_plugin_name isn't enabled in the SquirrelMail configuration.'); +if (!is_plugin_enabled('my_plugin_name')) { + echo 'Security Violation'; + exit; } +</verb></tscreen> -# In SquirrelMail 1.4 and 1.5.0. +For SquirrelMail versions 1.4.0 to 1.5.0: + +<tscreen><verb> global $plugins; -if ( !in_array('mypluginname', $plugins) ) { - exit('The plugin my_plugin_name isn't enabled in the SquirrelMail configuration.'); +if (!in_array('mypluginname', $plugins)) { + echo 'Security Violation'; + exit; } </verb></tscreen> @@ -2545,12 +2680,29 @@ <sect1>Coding tips<label id="plugin_coding_tips"> <p> -Listed below are several useful tips to keep in mind while coding plugins. Some of these items will be scrutinized and possibly treated as mandatory by the plugin team when evaluating new plugins. +Listed below are several useful tips to keep in mind while coding plugins. +Some of these items will be scrutinized and possibly treated as mandatory by +the plugin team when evaluating new plugins. <sect2>Knowing what hook is running <p> -Some plugins may register the same function against multiple hooks or otherwise run the same library code for more than one hook. If that code needs to make a hook-specific decision, it can look at the global variable called <tt/$currentHookName/. However, this variable is only available in SquirrelMail versions 1.5.1 and above, so it is more portable to use the function <tt/get_current_hook_name()/, which is provided by the Compatibility plugin (see elsewhere for more information about using the Compatibility plugin[FIXME: provide a link for this]). +Some plugins may register the same function against multiple hooks or otherwise +run the same library code for more than one hook. If that code needs to make a +hook-specific decision, it can look at the global variable called +<tt/$currentHookName/. However, this variable is only available in SquirrelMail +versions 1.5.1 and above, so it is more portable to use the function +<tt/get_current_hook_name()/, which is provided by the Compatibility plugin +(see elsewhere for more information about using the Compatibility +plugin[FIXME: provide a link for this]). +<sect2>No global code<label id="no_global_code"> +<p> +All plugin code should be contained in functions that are only executed when +needed. Even constant declarations and other setup code should <em/not/ be +executed unconditionally. The only two exceptions to this rule are +configuration files (where only configuration variables should be set) and +pages that are accessed directly by the browser (e.g., options pages). + <sect1>Compatibility with older versions of SquirrelMail <p> Whenever new versions of SquirrelMail are released, there is always a @@ -2586,8 +2738,9 @@ <sect1>Documentation files <p> -Two more files are needed in your plugin directory. One file shall describes -your plugin and offers detailed instructions for configuration or help with +Two more files must be included with your plugin. It is recommended that they +be placed in a subdirectory called "docs". One file shall describe your plugin +and offer detailed instructions for configuration or help with troubleshooting, etc. This file is usually entitled <tt/README/. Some useful sections to include might be: @@ -2595,13 +2748,14 @@ <item>Plugin name and author <item>Current version <item>Plugin features + <item>Plugin requirements <item>Detailed plugin description <item>How-to for plugin configuration <item>Change log <item>Future ideas/enhancements/to do list </itemize> -The other files shall explain how to install your plugin. This file is typically +Another file shall explain how to install your plugin. This file is typically called <tt/INSTALL/. If you do not require any special installation actions, you can probably copy one from another plugin or use this as a template: @@ -2609,57 +2763,70 @@ Installing the Demo plugin ========================== -1) Start with untaring the file into the plugins directory. Here is an example - for the 1.0 version of the Demo plugin. +1) Start with untaring the file into the plugins directory. Here + is an example for the 1.0 version of the Demo plugin. - cd plugins - tar -zxvf demo-1.0-1.4.0.tar.gz + $ cd plugins + $ tar -zxvf demo-1.0-1.4.0.tar.gz -2) Change into the demo directory, copy "config.php.sample" to "config.php" and - edit "config.php", making adjustments as you deem necessary. For more - detailed explanations about each of these parameters, consult the README - file. +2) Decide if you want to store the plugin configuration file in + the plugin directory or in the main SquirrelMail config directory. - cd demo - cp config.php.sample config.php - vi config.php + A) To store the configuration file in the plugin directory, + change into the demo directory, copy config_example.php + to config.php and edit config.php, making adjustments as + you deem necessary. -3) Then go to your config directory and run "conf.pl". Choose option 8 and move - the plugin from the "Available Plugins" category to the "Installed Plugins" - category. Save and exit. + $ cd demo + $ cp config_example.php config.php + $ vi config.php - cd ../../config/ - ./conf.pl + B) To store the configuration file in the main SquirrelMail + config directory, change into the demo directory, + copy config_example.php to ../../config/config_demo.php + and edit ../../config/config_demo.php, making + adjustments as you deem necessary. + $ cd demo + $ cp config_example.php ../../config/config_demo.php + $ vi ../../config/config_demo.php + +3) Then go to your config directory and run "conf.pl". Choose + option 8 and move the plugin from the "Available Plugins" + category to the "Installed Plugins" category. Save and exit. + + $ cd ../../config/ + $ ./conf.pl + + Upgrading the Demo plugin ========================= -1) Start with untaring the file into the plugins directory. Here is a example - for the 3.1 version of the demo plugin. +1) Start with untaring the file into the plugins directory. Here + is a example for the 1.0 version of the Demo plugin. - cd plugins - tar -zxvf demo-3.1-1.4.0.tar.gz + $ cd plugins + $ tar -zxvf demo-1.0-1.4.0.tar.gz -2) Change into the demo directory, check your "config.php" file against the new - version, to see if there are any new settings that you must add to your - "config.php" file. +2) Change into the demo directory and check your config.php file + against the new version to see if there are any new settings + that you must add to your config.php file. - diff -Nau config.php config.php.sample + $ diff -u config.php config_example.php - Or simply replace your "config.php" file with the provided sample and - reconfigure the plugin from scratch (see step 2 under the installation - procedure above). + If you store your configuration file in the main SquirrelMail + config directory, adjust this command as follows: + + $ diff -u ../../config/config_demo.php config_example.php + + Or simply replace your configuration file with the provided + example and reconfigure the plugin from scratch (see step two + under the installation procedure above). </verb></tscreen> <sect1>Storing code <p> [FIXME: expand this section] -Due to the large number and wide range of functions plugins can cover it is -impractical to add all but the most popular of these to the SquirrelMail -core project. -There is a separate <url url="http://sourceforge.net/projects/sm-plugins/" -name="SM Plugins"> project registered at SourceForge to house plugin code, -developers should consider joining this project. <sect1>Additional Resources <p> @@ -2688,11 +2855,56 @@ <sect2>Requirements Checklist <p> Make sure the plugin meets the SquirrelMail plugin requirements explained throughout this document. Here is a quick checklist to help summarize the various requirements. +TODO: some of these items need more explanation (the old plugin.txt file has some useful text for some of this) <itemize> - <item>FIXME: WHERE SHOULD THIS CHECKLIST BE BEST PLACED IN THIS DOCUMENT? + <item>Plugins must be developed in an environment with PHP error reporting + set to <tt/E_ALL/ and PHP <tt/register_globals/ turned off. PHP + notices in plugin code are not acceptable. + <item>Do not access superglobals directly. Always use <tt/sqgetGlobalVar()/ + and <tt/sqsession_*()/ functions. Code that accesses <tt/$_GET/, + <tt/$_POST/, <tt/$_SESSION/ or <tt/$_SERVER/ directly will be rejected. + TODO: provide more info or a link to how to use sqgetGlobalVar() + <item>No PHP files may end with the closing PHP tag <tt/?>/. + <item>Fallbacks must be provided for all JavaScript-based functionality + (check using the global $javascript_on value). + <item>Use <tt/include_once()/ and not <tt/include()/, <tt/require()/, or + <tt/require_once()/. <item>Keep <tt/setup.php/ <ref id="plugin_setup_file" name="small and efficient"> + <item><ref id="plugin_internationalization" name="Internationalize"> all + output + <item>All plugin directories should have <tt/index.php/ files copied from the + SquirrelMail "plugins" directory itself. + <item>All plugin directories should have <tt/.htaccess/ files with + "Deny from All" in them, the only exception being a directory that + contains a file accessed directly from the client browser (an option + page, for example). + <item>README file that points to the "docs" directory + <item>COPYING, README and INSTALL files + <item>"locale" directory with translation tools and .pot template file + <item>Plugin <ref id="plugin_version_reporting" + name=""info" function and "version" function"> in <tt/setup.php/ + <item>Example (and possibly default) <ref id="plugin_configuration" + name="configuration"> files. + <item><ref id="no_global_code" name="No global code"> + <item>Correct syntax for <ref id="pagescalleddirectly" + name="pages accessed directly by client browser">. + <item><tt/displayPageHeader()/ with no applicable mailbox must NOT use + "None" - instead use an empty string: + <tt/displayPageHeader($color, '');/ + <item><tt/SM_PATH/ only for use when referencing other files, such as in + <tt/include_once()/ calls. + <item><tt/sqm_baseuri()/ only for use when constructing relative hyperlinks + given to the client browser + <item><tt/get_location()/ only for use when constructing absolute hyperlinks + given to the client browser, such as for <tt/header('Location...')/ + redirects. + <item>Plugins that create user preference settings that are sensitive + from a security standpoint and should <em/not/ be controllable by + users directly should be specified in a hook called "reset_user_prefs". + Please see the README file for the Reset User Preferences plugin. </itemize> +TODO: there's more here I'm sure <sect2>Submitting the plugin <p> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2010-01-25 02:28:36
|
Revision: 13892 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13892&view=rev Author: pdontthink Date: 2010-01-25 02:28:30 +0000 (Mon, 25 Jan 2010) Log Message: ----------- Add exmaple script for updating copyright years Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2010-01-24 23:26:33 UTC (rev 13891) +++ trunk/documentation/devel/devel.sgml 2010-01-25 02:28:30 UTC (rev 13892) @@ -3146,6 +3146,57 @@ <item><bf/Changelog:/ Add the new translation to the Changelog for both STABLE and DEVEL. </enum> +<sect1>Updating Copyright Dates +<p> +Every year, the copyright dates should be updated. Here is an example bash script +that can be used for that purpose. +<tscreen><verb> +#!/bin/bash + +update_copyrights() +{ + + if [ -z $1 ] || [ ! -d $1 ]; then + echo + echo "Error: update_copyrights expects valid directory, got $1" + echo + exit 1; + fi + + cd $1 + + for file in `ls`; do + + if [ -d $file ]; then + echo "Traversing $PWD/$file" + update_copyrights $file + cd .. + else + echo " Updating $file" + `sed -i "s/\(copyright .*\)-$last_year/\1-$this_year/i" $file` + fi + + done + +} + +if [ -z $1 ] || [ ! -d $1 ]; then + echo + echo "Usage: $0 [directory]" +else + this_year=`date +%Y` + last_year=$((this_year - 1)) + echo + echo "Updating Copyrights from $last_year to $this_year" + echo + update_copyrights $1 +fi + +echo +echo "Done" +echo +</verb></tscreen> + <sect>Miscellaneous <p> TODO: This is a quick and dirty import of the documents in "/doc/Development". They all need to be cleand up and in the LinuxDoc format. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2010-03-07 00:33:54
|
Revision: 13919 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13919&view=rev Author: pdontthink Date: 2010-03-07 00:33:42 +0000 (Sun, 07 Mar 2010) Log Message: ----------- Update release instructions with more modern version examples Modified Paths: -------------- trunk/documentation/devel/devel.sgml Modified: trunk/documentation/devel/devel.sgml =================================================================== --- trunk/documentation/devel/devel.sgml 2010-03-07 00:30:35 UTC (rev 13918) +++ trunk/documentation/devel/devel.sgml 2010-03-07 00:33:42 UTC (rev 13919) @@ -2934,17 +2934,17 @@ </enum> <item><bf/Gearing up:/ Update the version number strings at 3 places: <enum> - <item> Variables in <tt>functions/strings.php</tt> (<tt>$version = '1.2.1', $SQM_INTERNAL_VERSION=array(1,2,1)</tt>). + <item> Variables in <tt>functions/strings.php</tt> (<tt>$version = '1.4.20', $SQM_INTERNAL_VERSION=array(1,4,20)</tt>). <item> <tt>doc/ChangeLog</tt> <item> <tt>doc/ReleaseNotes</tt> </enum> <item><bf/SVN packaging:/ <enum> <item> Commit final changes to Subversion (doc/ChangeLog, doc/ReleaseNotes, functions/strings.php) - <item> Tag SVN with the release number in the format rel-X_Y_Z (rel-1_2_1). Example: + <item> Tag SVN with the release number in the format rel-X_Y_Z (rel-1_4_20). Example: <tscreen><verb> svn copy https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/branches/SM-1_4-STABLE/squirrelmail \ -https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/tags/rel-1_2_1</verb></tscreen> +https://squirrelmail.svn.sourceforge.net/svnroot/squirrelmail/tags/rel-1_4_20</verb></tscreen> <item> Use the script <tt>make-release</tt> <url url="http://squirrelmail.svn.sourceforge.net/viewvc/squirrelmail/trunk/util/make-release" name="found in SVN"> under the <tt>util/</tt> dir. The only parameter is the version to release. It will download the tagged SVN copy, pack it up nicely and upload it to SF.net. You will need the following tools: bash, svn, ssh, rsync, tar, gzip, zip, bzip2 and optionally rpmbuild. @@ -2964,7 +2964,7 @@ <item><bf/Defrosting:/ Prepare SVN for continued development <enum> <item> Go back to your regular SVN development directory. - <item> Update the version number variable in functions/strings.php by incrementing the incremental release number by 1 and adding <tt>' [SVN]'</tt> after it (<tt>$version = '1.2.2 [SVN]';</tt>). + <item> Update the version number variable in functions/strings.php by incrementing the incremental release number by 1 and adding <tt>' [SVN]'</tt> after it (<tt>$version = '1.4.21 [SVN]';</tt>). <item> Add a new section in doc/ChangeLog for the new release, followed by <tt>' - SVN'</tt> <item> Archive the doc/ReleaseNotes for this release like this: <tscreen>svn copy doc/ReleaseNotes doc/release_notes_archive/X.Y/Notes-X.Y.Z.txt</tscreen> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |