You can subscribe to this list here.
2000 |
Jan
|
Feb
|
Mar
|
Apr
(4) |
May
(38) |
Jun
(3) |
Jul
(12) |
Aug
(4) |
Sep
(12) |
Oct
(15) |
Nov
(26) |
Dec
(8) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2001 |
Jan
(14) |
Feb
(34) |
Mar
(105) |
Apr
(64) |
May
(56) |
Jun
(97) |
Jul
(180) |
Aug
(103) |
Sep
(54) |
Oct
(21) |
Nov
(44) |
Dec
(27) |
2002 |
Jan
(7) |
Feb
(10) |
Mar
(88) |
Apr
(57) |
May
(29) |
Jun
(12) |
Jul
(13) |
Aug
(35) |
Sep
(12) |
Oct
(16) |
Nov
(48) |
Dec
(94) |
2003 |
Jan
(36) |
Feb
(43) |
Mar
(124) |
Apr
(63) |
May
(77) |
Jun
(12) |
Jul
(7) |
Aug
(40) |
Sep
(41) |
Oct
(19) |
Nov
(22) |
Dec
(46) |
2004 |
Jan
(51) |
Feb
(129) |
Mar
(82) |
Apr
(96) |
May
(34) |
Jun
(28) |
Jul
(107) |
Aug
(87) |
Sep
(21) |
Oct
(50) |
Nov
(202) |
Dec
(110) |
2005 |
Jan
(174) |
Feb
(159) |
Mar
(250) |
Apr
(287) |
May
(159) |
Jun
(139) |
Jul
(305) |
Aug
(291) |
Sep
(558) |
Oct
(628) |
Nov
(539) |
Dec
(396) |
2006 |
Jan
(828) |
Feb
(470) |
Mar
(888) |
Apr
(524) |
May
(518) |
Jun
(424) |
Jul
(527) |
Aug
(208) |
Sep
(257) |
Oct
(276) |
Nov
(308) |
Dec
(342) |
2007 |
Jan
(366) |
Feb
(350) |
Mar
(265) |
Apr
(406) |
May
(481) |
Jun
(354) |
Jul
(195) |
Aug
(219) |
Sep
(506) |
Oct
(434) |
Nov
(467) |
Dec
(399) |
2008 |
Jan
(339) |
Feb
(185) |
Mar
(172) |
Apr
(191) |
May
(126) |
Jun
(149) |
Jul
(424) |
Aug
(317) |
Sep
(164) |
Oct
(246) |
Nov
(110) |
Dec
(123) |
2009 |
Jan
(82) |
Feb
(74) |
Mar
(125) |
Apr
(133) |
May
(51) |
Jun
(52) |
Jul
(37) |
Aug
(48) |
Sep
(60) |
Oct
(69) |
Nov
(52) |
Dec
(60) |
2010 |
Jan
(55) |
Feb
(69) |
Mar
(55) |
Apr
(144) |
May
(309) |
Jun
(318) |
Jul
(114) |
Aug
(128) |
Sep
(122) |
Oct
(96) |
Nov
(274) |
Dec
(219) |
2011 |
Jan
(223) |
Feb
(241) |
Mar
(266) |
Apr
(286) |
May
(251) |
Jun
(214) |
Jul
(308) |
Aug
(312) |
Sep
(192) |
Oct
(61) |
Nov
(20) |
Dec
(35) |
2012 |
Jan
(165) |
Feb
(70) |
Mar
(102) |
Apr
(96) |
May
(101) |
Jun
(125) |
Jul
(59) |
Aug
(108) |
Sep
(246) |
Oct
(372) |
Nov
(456) |
Dec
(374) |
2013 |
Jan
(215) |
Feb
(402) |
Mar
(386) |
Apr
(274) |
May
(117) |
Jun
(52) |
Jul
(125) |
Aug
(106) |
Sep
(188) |
Oct
(139) |
Nov
(74) |
Dec
(52) |
2014 |
Jan
(301) |
Feb
(62) |
Mar
(229) |
Apr
(85) |
May
(275) |
Jun
(138) |
Jul
(143) |
Aug
(121) |
Sep
(147) |
Oct
(278) |
Nov
(86) |
Dec
(100) |
2015 |
Jan
(113) |
Feb
(92) |
Mar
(96) |
Apr
(273) |
May
(122) |
Jun
(128) |
Jul
(41) |
Aug
(33) |
Sep
(161) |
Oct
(21) |
Nov
(71) |
Dec
(18) |
2016 |
Jan
(243) |
Feb
(35) |
Mar
(98) |
Apr
(102) |
May
(29) |
Jun
(7) |
Jul
(25) |
Aug
(25) |
Sep
(10) |
Oct
(10) |
Nov
(19) |
Dec
(8) |
2017 |
Jan
(18) |
Feb
(8) |
Mar
(4) |
Apr
(18) |
May
(22) |
Jun
(13) |
Jul
(12) |
Aug
(4) |
Sep
(3) |
Oct
(6) |
Nov
(5) |
Dec
(2) |
2018 |
Jan
(6) |
Feb
(2) |
Mar
(1) |
Apr
(4) |
May
(3) |
Jun
(2) |
Jul
(5) |
Aug
(2) |
Sep
(4) |
Oct
(2) |
Nov
|
Dec
|
2019 |
Jan
(1) |
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2020 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
(3) |
Nov
(2) |
Dec
|
2021 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2023 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(2) |
Jul
(3) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2024 |
Jan
|
Feb
|
Mar
(1) |
Apr
(4) |
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <cra...@us...> - 2003-05-10 14:11:18
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins In directory sc8-pr-cvs1:/tmp/cvs-serv1321/ActionTrackerPlugin/lib/TWiki/Plugins Modified Files: ActionTrackerPlugin.pm Log Message: Release candidate 1 for 10 May release Index: ActionTrackerPlugin.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin.pm,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ActionTrackerPlugin.pm 8 May 2003 20:54:04 -0000 1.5 --- ActionTrackerPlugin.pm 10 May 2003 14:11:15 -0000 1.6 *************** *** 42,46 **** my $actionNumber = 0; ! # ========================= sub initPlugin { --- 42,46 ---- my $actionNumber = 0; ! my %prefs; # ========================= sub initPlugin { *************** *** 56,94 **** $debug = &TWiki::Func::getPreferencesFlag( "ACTIONTRACKERPLUGIN_DEBUG" ) || 0; ! $useNewWindow = &TWiki::Func::getPreferencesFlag( "ACTIONTRACKERPLUGIN_USENEWWINDOW" ) || 0; # Colour for warning of late actions ! $ActionTrackerPlugin::Format::latecol = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_LATECOL" ) || ! "yellow"; # Colour for an unparseable date ! $ActionTrackerPlugin::Format::badcol = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_BADDATECOL" ) || ! "red"; # Colour for table header rows ! $ActionTrackerPlugin::Format::hdrcol = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_HEADERCOL" ) || ! "FFCC66"; ! my $hdr = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TABLEHEADER" ); ! my $bdy = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TABLEFORMAT" ); ! my $textform = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TEXTFORMAT" ); ! my $orient = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TABLEORIENT" ); ! my $changes = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_NOTIFYCHANGES" ); $defaultFormat = new ActionTrackerPlugin::Format( $hdr, $bdy, $textform, $changes, $orient ); ! my $extras = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_EXTRAS" ); if ( $extras ) { my $e = ActionTrackerPlugin::Action::extendTypes( $extras ); if ( defined( $e )) { - print STDERR "Bottlin $e\n"; TWiki::Func::writeWarning( "- TWiki::Plugins::ActionTrackerPlugin ERROR $e" ); } --- 56,84 ---- $debug = &TWiki::Func::getPreferencesFlag( "ACTIONTRACKERPLUGIN_DEBUG" ) || 0; ! ! loadPrefsOverrides( $web ); ! ! $useNewWindow = getPref( "USENEWWINDOW", 0 ); # Colour for warning of late actions ! $ActionTrackerPlugin::Format::latecol = getPref( "LATECOL", "yellow" ); # Colour for an unparseable date ! $ActionTrackerPlugin::Format::badcol = getPref( "BADDATECOL", "red" ); # Colour for table header rows ! $ActionTrackerPlugin::Format::hdrcol = getPref( "HEADERCOL", "#FFCC66" ); ! my $hdr = getPref( "TABLEHEADER" ); ! my $bdy = getPref( "TABLEFORMAT" ); ! my $textform = getPref( "TEXTFORMAT" ); ! my $orient = getPref( "TABLEORIENT" ); ! my $changes = getPref( "NOTIFYCHANGES" ); $defaultFormat = new ActionTrackerPlugin::Format( $hdr, $bdy, $textform, $changes, $orient ); ! my $extras = getPref( "EXTRAS" ); if ( $extras ) { my $e = ActionTrackerPlugin::Action::extendTypes( $extras ); if ( defined( $e )) { TWiki::Func::writeWarning( "- TWiki::Plugins::ActionTrackerPlugin ERROR $e" ); } *************** *** 159,163 **** $_[0] = $text; $_[0] =~ s/%ACTIONSEARCH{(.*)?}%/&handleActionSearch($web, $1)/geo; ! $_[0] =~ s/%ACTIONNOTIFICATIONS{(.*?)}%/&handleActionNotify($web, $1)/geo; } --- 149,156 ---- $_[0] = $text; $_[0] =~ s/%ACTIONSEARCH{(.*)?}%/&handleActionSearch($web, $1)/geo; ! if ( $debug ) { ! $_[0] =~ s/%ACTIONNOTIFICATIONS{(.*?)}%/&handleActionNotify($web, $1)/geo; ! $_[0] =~ s/%ACTIONTRACKERPREFS%/&dumpPrefs()/geo; ! } } *************** *** 165,169 **** # the edit text in the edit box. # New hook in TWiki::Plugins $VERSION = '1.010' ! # We use it to populate the editaction.tmpl template, which is then # inserted in the edit.action.tmpl as the %TEXT%. # We process the %META fields from the raw text of the topic and --- 158,162 ---- # the edit text in the edit box. # New hook in TWiki::Plugins $VERSION = '1.010' ! # We use it to populate the actionform.tmpl template, which is then # inserted in the edit.action.tmpl as the %TEXT%. # We process the %META fields from the raw text of the topic and *************** *** 185,192 **** my $query = TWiki::Func::getCgiQuery(); ! # editaction.tmpl is a sub-template inserted into the parent template # as %TEXT%. This is done so we can use the standard template mechanism # without screwing up the content of the subtemplate. ! my $tmpl = TWiki::Func::readTemplate( "editaction", ""); my $date = TWiki::getGmDate(); $tmpl =~ s/%DATE%/$date/go; --- 178,185 ---- my $query = TWiki::Func::getCgiQuery(); ! # actionform.tmpl is a sub-template inserted into the parent template # as %TEXT%. This is done so we can use the standard template mechanism # without screwing up the content of the subtemplate. ! my $tmpl = TWiki::Func::readTemplate( "actionform", ""); my $date = TWiki::getGmDate(); $tmpl =~ s/%DATE%/$date/go; *************** *** 238,243 **** $tmpl =~ s/%UID%/$uid/go; ! my $useNewWindow = ! &TWiki::Func::getPreferencesFlag( "ACTIONTRACKERPLUGIN_USENEWWINDOW" ); my $submitCmd = "Preview"; --- 231,235 ---- $tmpl =~ s/%UID%/$uid/go; ! my $useNewWindow = ( getPref( "USENEWWINDOW", 0 ) == 1 ); my $submitCmd = "Preview"; *************** *** 245,249 **** my $cancelScript = ""; ! if ( TWiki::Func::getPreferencesFlag( "ACTIONTRACKERPLUGIN_NOPREVIEW" )) { $submitCmd = "Save"; if ( $useNewWindow ) { --- 237,241 ---- my $cancelScript = ""; ! if ( getPref( "NOPREVIEW", 0 )) { $submitCmd = "Save"; if ( $useNewWindow ) { *************** *** 266,289 **** $tmpl =~ s/%SUBMITCOMMAND%/$submitCmd/go; ! my $hdrs = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_EDITHEADER" ); ! my $body = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_EDITFORMAT" ); ! my $vert = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_EDITORIENT" ); my $fmt = new ActionTrackerPlugin::Format( $hdrs, $body, "", "", $vert ); ! my $editable = $fmt->formatForEdit( $action ); $tmpl =~ s/%EDITFIELDS%/$editable/o; ! my $ebh = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_EDITBOXHEIGHT" ) || ! TWiki::Func::getPreferencesValue( 'EDITBOXHEIGHT' ); $tmpl =~ s/%EBH%/$ebh/go; ! my $ebw = ! TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_EDITBOXWIDTH" ) || ! TWiki::Func::getPreferencesValue( 'EDITBOXWIDTH' ); $tmpl =~ s/%EBW%/$ebw/go; $text = $action->{text}; # Process the text so it's nice to edit. This gets undone in Action.pm --- 258,277 ---- $tmpl =~ s/%SUBMITCOMMAND%/$submitCmd/go; ! my $hdrs = getPref( "EDITHEADER" ); ! my $body = getPref( "EDITFORMAT" ); ! my $vert = getPref( "EDITORIENT" ); my $fmt = new ActionTrackerPlugin::Format( $hdrs, $body, "", "", $vert ); ! my $editable = $action->formatForEdit( $fmt ); $tmpl =~ s/%EDITFIELDS%/$editable/o; ! my $dfltH = TWiki::Func::getPreferencesValue( 'EDITBOXHEIGHT' ); ! my $ebh = getPref( "EDITBOXHEIGHT", $dfltH ); $tmpl =~ s/%EBH%/$ebh/go; ! my $dfltW = TWiki::Func::getPreferencesValue( 'EDITBOXWIDTH' ); ! my $ebw = getPref( "EDITBOXWIDTH", $dfltW ); $tmpl =~ s/%EBW%/$ebw/go; + $text = $action->{text}; # Process the text so it's nice to edit. This gets undone in Action.pm *************** *** 390,393 **** --- 378,433 ---- $action->populateMissingFields(); return $action->toString(); + } + + # Prefs handling + + # Get a prefs value + sub getPref { + my ( $vbl, $default ) = @_; + my $val = $prefs{$vbl}; + if ( !defined( $val )) { + $val = TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_$vbl" ); + if ( !defined( $val ) || $val eq "" ) { + $val = $default; + } + } + return $val; + } + + # Load prefs from WebPreferences so they override the settings + # in the plugin topic. + sub loadPrefsOverrides { + my $web = shift; + + # The remaining prefs are defined in the plugin topic but may be overridden + # in WebPreferences. Reload ACTIONTRACKERPLUGIN_ prefs from WebPreferences + # topic. Note: Default load order is: + # TWiki.TWikiPreferences + # Main.TWikiPreferences + # $web.WebPreferences + # Main.TWikiGuest + # TWiki.DefaultPlugin + # All other plugins + if ( TWiki::Func::topicExists( $web, "WebPreferences" )) { + my $text = TWiki::Func::readTopicText( $web, "WebPreferences" ); + foreach my $line ( split ( /\n/, $text )) { + if ( $line =~ /^\s+\* Set ACTIONTRACKERPLUGIN_(\w+)\s+=\s+([^\r\n]*)/o ) { + $prefs{$1} = $2; + } + } + } + } + + # Generate plugin prefs in HTML + sub dumpPrefs { + my $text = ""; + foreach my $key ( "TABLEHEADER","TABLEFORMAT","TABLEORIENT","TEXTFORMAT","LATECOL","BADDATECOL","HEADERCOL","EDITHEADER","EDITFORMAT","EDITORIENT","USENEWWINDOW","NOPREVIEW","EXTRAS","EDITBOXHEIGHT","EDITBOXWIDTH" ) { + $text .= "\t* $key\n<verbatim>\n"; + if ( defined( getPref($key))) { + $text .= getPref( $key ); + } + $text .= "\n</verbatim>\n"; + } + return $text; } |
From: <cra...@us...> - 2003-05-10 14:11:18
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/data/TWiki In directory sc8-pr-cvs1:/tmp/cvs-serv1321/ActionTrackerPlugin/data/TWiki Modified Files: ActionTrackerPlugin.txt Log Message: Release candidate 1 for 10 May release Index: ActionTrackerPlugin.txt =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/data/TWiki/ActionTrackerPlugin.txt,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ActionTrackerPlugin.txt 8 May 2003 20:54:04 -0000 1.5 --- ActionTrackerPlugin.txt 10 May 2003 14:11:14 -0000 1.6 *************** *** 175,191 **** _spaces_ * Email: _email address_ <br /> or<br /> ! _three spaces_ * E-mail: _email address_ <br /> ! Alternatively if the topic is a group definition (the name ends in 'Group') then the line<br /> _spaces_ * Set GROUP =<br /> is used to determine the wikinames of the people in the group. These are resolved to email addresses recursively. ! then the notification is sent to that address. If that fails, * If they appear in *any* WebNotify in *any* web, in the form of a line that gives an email address, then that address is used. - * If they are listed in WebNotify *in any web*, the mail address given there is used. - *all* those e-mail addresses. This is how you assign actions to groups. * If this fails and the 'who' name is a valid e-mail address, for example pe...@do..., then that name is used. ! The =actionnotify= script is also used to notify users who have registered an interest in being notified when an action changes. This function of the script is activated when you use the special =changedsince= parameter. ! __Note:__ When =changedsince= is active the other functions of the script, as described above, are disabled. ! =changedsince= is used to specify the time period within which changed actions are interesting. Any action which has changed in the given period will be notified to all users who have registered an interest using =notify=. The =changedsince= value is a relative date string, which uses the following formats * yesterday * last _dow_ (e.g. "last monday") --- 175,188 ---- _spaces_ * Email: _email address_ <br /> or<br /> ! _spaces_ * E-mail: _email address_ <br /> ! Alternatively if the topic is a group definition (the name ends in 'Group') then the line<br /> _spaces_ * Set GROUP =<br /> is used to determine the wikinames of the people in the group. These are resolved to email addresses recursively. If that fails, * If they appear in *any* WebNotify in *any* web, in the form of a line that gives an email address, then that address is used. * If this fails and the 'who' name is a valid e-mail address, for example pe...@do..., then that name is used. ! __Note:__ If a name cannot be translated to an e-mail address using the mechanisms described above, a warning will be output to =data/warning.txt=.. ! The =actionnotify= script is also used to notify users who have registered an interest in being notified when an action changes. This function of the script is activated when you use the =changedsince= parameter. ! =changedsince= is used to specify the time period within which changed actions are interesting. Any action which has changed in the given period will be notified to all users who have registered an interest in that action using =notify=. The =changedsince= value is a relative date string, which uses the following formats * yesterday * last _dow_ (e.g. "last monday") *************** *** 202,206 **** will notify registered users of action changes that occurred in the last 24 hours. ! Not all action changes get notified; only changes to the action state, or changes to the text of the action (usually additions) get notified. For example, if the person responsible for the action is changed, or its due date, then no notification is generated. #NonStandardAttributes --- 199,206 ---- will notify registered users of action changes that occurred in the last 24 hours. ! __Notes__ ! 1 Not all action changes get notified, only changes to certain sensitive fields. You can change the set of fields that are sensitive to changes by setting the NOTIFYCHANGES parameter, as described in [[#SettingsAnchor][Settings]], below. ! 1 Unlike all other search terms, =changedsince= works as an OR term rather than an AND term. If you use a compound expression like <code>late,changedsince=yesterday</code>, this will *not* give you all late actions that changed since yesterday. Instead, it will give you all late actions *and* all actions that changed since yesterday. ! 1 If you give the parameter DEBUG to the actionnotify script, it will print out the mails that would have been sent to STDOUT. This is useful for debugging, and may be useful if you have some other processing in mind. #NonStandardAttributes *************** *** 226,234 **** | =text= | text, <i>size</i> | An arbitrary text field | | =date= | date, <i>size</i> | A date in one of the formats described above. See [[#DateFormats][Date Formats]] | ! In the above, <i>size</i> is a single number, which is the width (in characters) of the display box in the action editor. ! __Note__ that there is one exception to the "no redefinition" rule above; the =state= attribute can be extended to take extra states. However the =closed= state must be retained, and must be the last state. To extend the set of states, simply include a definition of =state= in the EXTRAS definition: <pre> ! * <nop>Set EXTRAS = |state,select,5,"open","fried","boiled","poached","closed"| </pre> --- 226,234 ---- | =text= | text, <i>size</i> | An arbitrary text field | | =date= | date, <i>size</i> | A date in one of the formats described above. See [[#DateFormats][Date Formats]] | ! In the above, <i>size</i> is a single number, which is the width (in characters) of the text box in the action editor for =text=, =names= and =date=, and the number of options to show in =select=.. ! __Note__ that there is one exception to the "no redefinition" rule above; the =state= attribute can be extended to take extra states. However if you want the closure functionality (closed, closer, and late actions) to work, the =closed= state must be retained. To extend the set of states, simply include a definition of =state= in the EXTRAS definition: <pre> ! * <nop>Set EXTRAS = |state,select,1,"open","fried","boiled","poached","closed"| </pre> *************** *** 238,269 **** %<nop>ACTIONSEARCH{ sentence="life" }% </pre> ! If a non-standard attribute is declared as type =text= you can use perl regular expressions in the search. #SettingsAnchor ---++ <nop>%TOPIC% Settings These settings can be overridden in the Web<nop>Preferences topic of the current web (by defining ACTIONTRACKERPLUGIN_TABLEHEADER or ACTIONTRACKERPLUGIN_TABLEFORMAT etc). * One line description, shown in the TextFormattingRules topic * Set SHORTDESCRIPTION = Adds support for action tags in topics, and automatic notification of action statii ! * The format of an action output. The following fields can be output: web, topic, text, who, due, notify, uid, creator, state, edit. TABLEFORMAT defines the contents of the columns, TABLEHEADER defines the column headings. These settings can be overridden in an ACTIONSEARCH command using the =format= and =header= attributes. If TABLEORIENT is set to "rows", action tables will be aligned as rows of values instead of the default columns of values. ! * Set TABLEHEADER = | Assigned to | Due date | Description | State || ! * Set TABLEFORMAT = | $who | $due | $text | $state | $edit | * Set TABLEORIENT = cols * The alternative text format of an action, used when mailing action or change notifications. * Set TEXTFORMAT = Action for $who, due $due, $state$n$text - * The format of the action editor. - * Set EDITHEADER = | Assigned to | Due date | State | - * Set EDITFORMAT = | $who | $due | $state | - * Set EDITORIENT = cols - * If set to 1 will edit an action in a separate browser window (requires <nop>JavaScript) - * Set USENEWWINDOW = 1 - * If set to 1, action edits will offer a 'Save Changes' instead of the usual 'Preview Changes' button. If this is set along with the USENEWWINDOW parameter, the subwindow _should_ close on save, but it won't because I haven't worked out how to do this safely. - * Set NOPREVIEW = 1 * Set the colours for late actions, errors and the table headers. Accepts standard HTML colours. * Set LATECOL = yellow * Set BADDATECOL = red * Set HEADERCOL = orange #SettingsNotify * The fields to scan to detect changes for actionnotify. Changes in other fields are ignored. * Set NOTIFYCHANGES = $due,$state,$text * Non-standard attributes - see [[#SettingsStateSet][Defining non-standard attributes]] above. * Set EXTRAS = --- 238,284 ---- %<nop>ACTIONSEARCH{ sentence="life" }% </pre> ! If a non-standard attribute is declared as type =text= you can use perl regular expressions in the search. Searches for values of type =names= will match any-to-any. For example, ! ! %<nop>ACTIONSEARCH{ car="VolkswagenBeetle,MercedesCoupe" }% ! ! will match both of the following actions: ! ! %<nop>ACTION{ car="VolkswagenBeetle,AudiSport" ... }% ! %<nop>ACTION{ car="ToyotaSupra,MercedesCoupe,ColtLancer" ... }% #SettingsAnchor ---++ <nop>%TOPIC% Settings These settings can be overridden in the Web<nop>Preferences topic of the current web (by defining ACTIONTRACKERPLUGIN_TABLEHEADER or ACTIONTRACKERPLUGIN_TABLEFORMAT etc). + * Set to 1 to enable debug features, including the undocumented %<nop>ACTIONNOTIFICATIONS{}% and %<nop>ACTIONTRACKERPREFS% features. + * Set DEBUG = 0 * One line description, shown in the TextFormattingRules topic * Set SHORTDESCRIPTION = Adds support for action tags in topics, and automatic notification of action statii ! * The format of an action output. The following fields can be output: web, topic, text, who, due, notify, uid, creator, state, edit, and any EXTRAS you may have. These settings can be overridden in an ACTIONSEARCH command using the =format= and =header= attributes. ! * TABLEHEADER defines the column headings. ! * Set TABLEHEADER = | Assigned to | Due date | Description | State | Notify || ! * TABLEFORMAT defines the contents of the columns ! * Set TABLEFORMAT = | $who | $due | $text | $state | $notify | $edit | ! * If TABLEORIENT is set to "rows", action tables will be aligned as rows of values instead of the default columns of values. * Set TABLEORIENT = cols * The alternative text format of an action, used when mailing action or change notifications. * Set TEXTFORMAT = Action for $who, due $due, $state$n$text * Set the colours for late actions, errors and the table headers. Accepts standard HTML colours. * Set LATECOL = yellow * Set BADDATECOL = red * Set HEADERCOL = orange + + * The format of the action editor. You can also set EDITBOXWIDTH and EDITBOXHEIGHT to override the defaults (which are %EDITBOXWIDTH%x%EDITBOXHEIGHT%) just for the action editor. + * Set EDITHEADER = | Assigned to | Due date | State | Notify | + * Set EDITFORMAT = | $who | $due | $state | $notify | + * Set EDITORIENT = cols + * If set to 1 will edit an action in a separate browser window (requires <nop>JavaScript) + * Set USENEWWINDOW = 1 + * If set to 1, action edits will offer a 'Save Changes' instead of the usual 'Preview Changes' button. If this is set along with the USENEWWINDOW parameter, the subwindow _should_ close on save, but it won't because I haven't worked out how to do this safely in Java<nop>Script. + * Set NOPREVIEW = 1 + #SettingsNotify * The fields to scan to detect changes for actionnotify. Changes in other fields are ignored. * Set NOTIFYCHANGES = $due,$state,$text + * Non-standard attributes - see [[#SettingsStateSet][Defining non-standard attributes]] above. * Set EXTRAS = *************** *** 281,285 **** | ==templates/actionnotify.tmpl== | Page template for notify message | | ==templates/edit.action.tmpl== | Action editor page template | ! | ==templates/editaction.tmpl== | Action editor page subtemplate | | ==lib/TWiki/Plugins/%TOPIC%.pm== | Plugin Perl module | | ==lib/TWiki/Plugins/%TOPIC%/Action.pm== | Perl support module | --- 296,300 ---- | ==templates/actionnotify.tmpl== | Page template for notify message | | ==templates/edit.action.tmpl== | Action editor page template | ! | ==templates/actionform.tmpl== | Action editor page subtemplate | | ==lib/TWiki/Plugins/%TOPIC%.pm== | Plugin Perl module | | ==lib/TWiki/Plugins/%TOPIC%/Action.pm== | Perl support module | *************** *** 320,323 **** --- 335,339 ---- Action lines are joined together if edited by a Mozilla browser, resulting in an odd display. * Work-around: Edit the topic ("Edit" at the bottom of the page, not the "edit" of the ActionTrackerPlugin) and add a new line to the =%<nop>ACTION{...}%=. Basically, each =%<nop>ACTION{...}%= needs to be on its own line. + *OLD* may be fixed. ---+++ Behaviour of egrep *************** *** 340,344 **** | | 30 Jan 2003: Query-by-example action search with notify field; notfication of change emails and actions email are sent as one; notify field was added to topic view and edit; various bug fixes by TWiki:Main/PaulineCheung | | | 30 Apr 2003: Version 2.0; Large sections rewritten to take advantage of improvements in Plugin support, eliminating two scripts in bin. Added UIDs and formattable action searches | ! | | 4 May 2003: Non-standard fields. Configurability of tables and action editor. Non-standard attributes. Eliminated chdir. | | CPAN Dependencies: | Time::ParseDate | | Perl Version: | 5.0 | --- 356,360 ---- | | 30 Jan 2003: Query-by-example action search with notify field; notfication of change emails and actions email are sent as one; notify field was added to topic view and edit; various bug fixes by TWiki:Main/PaulineCheung | | | 30 Apr 2003: Version 2.0; Large sections rewritten to take advantage of improvements in Plugin support, eliminating two scripts in bin. Added UIDs and formattable action searches | ! | | 10 May 2003: Non-standard fields. Configurability of tables and action editor. Non-standard attributes. Eliminated chdir. | | CPAN Dependencies: | Time::ParseDate | | Perl Version: | 5.0 | *************** *** 350,360 **** ---+++ Further development ! Further development of this code is welcomed. It is recommended that you unpack the distribution into a development directory and use the supplied Ant (http://jakarta.apache.org) build file which provides targets to run the test suite, and install and uninstall your development code into a test installation. Please, please, please run and extend the test set! Some ideas: ! * Fix the "close subwindow on save" functionality. See ActionTrackerPlugin.pm, search for $submitScript. ! * It would be nice to generalise the search to support =within= and =late= style searches on all date fields, including non-standard ones. ! * A really brave soul might consider moving action change notification to where it belongs; in the beforeSaveHandler. ! * You could turn this into a full-blooded issue tracker by constraining state transitions. ---+++ Copyright --- 366,377 ---- ---+++ Further development ! Further development of this code is welcomed. It is recommended that you unpack the distribution into a development directory and use the supplied Ant (http://jakarta.apache.org) build file which provides targets to run the test suite, and install and uninstall your development code into a test installation. Please, please, _please_ run, and extend if necessary, the test set! Some ideas: ! 1 Fix the "close subwindow on save" functionality. See ActionTrackerPlugin.pm, search for $submitScript. ! 1 It would be nice to generalise the search to support =within= and =late= style searches on all date fields, including non-standard ones. ! 1 A really brave soul might consider moving action change notification to where it belongs; in the beforeSaveHandler. ! 1 You could turn this into a full-blooded issue tracker by constraining state transitions. ! 1 Make it work for a PC server ---+++ Copyright |
From: <cra...@us...> - 2003-05-10 14:11:18
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv1321/ActionTrackerPlugin Modified Files: ActionTrackerPlugin.xml Log Message: Release candidate 1 for 10 May release Index: ActionTrackerPlugin.xml =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/ActionTrackerPlugin.xml,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** ActionTrackerPlugin.xml 4 May 2003 13:10:52 -0000 1.5 --- ActionTrackerPlugin.xml 10 May 2003 14:11:14 -0000 1.6 *************** *** 19,22 **** --- 19,23 ---- <property name="test.zip" value="${plugin.lib}/test.zip" /> + <!-- Caution: also used in uninstall, so don't use * in shared dirs --> <patternset id="installed.files"> <include name="${ant.project.name}.xml"/> *************** *** 25,29 **** <include name="${plugin.data}*.txt"/> <include name="bin/actionnotify"/> ! <include name="templates/*.tmpl"/> <include name="${test.zip}"/> </patternset> --- 26,32 ---- <include name="${plugin.data}*.txt"/> <include name="bin/actionnotify"/> ! <include name="templates/actionnotify.tmpl"/> ! <include name="templates/edit.action.tmpl"/> ! <include name="templates/actionform.tmpl"/> <include name="${test.zip}"/> </patternset> |
From: <cra...@us...> - 2003-05-09 01:34:27
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/data/TWiki In directory sc8-pr-cvs1:/tmp/cvs-serv16655/ActionTrackerPlugin/data/TWiki Modified Files: ActionTrackerPlugin.txt Log Message: Fixes for problems reported by Petric Frank Index: ActionTrackerPlugin.txt =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/data/TWiki/ActionTrackerPlugin.txt,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ActionTrackerPlugin.txt 4 May 2003 13:10:52 -0000 1.4 --- ActionTrackerPlugin.txt 8 May 2003 20:54:04 -0000 1.5 *************** *** 63,80 **** E-mail addresses of people are found by the process [[#TranslatingNamesToEMailAddresses][described below]]. ! ---+++++ Assigning actions to groups ! To assign an action to a group you must set up a pseudo-user that represents the group. Create a new topic in the '%MAINWEB%' web with the name of the group as the name of the page, and then add lines using the format<br /> ! _three spaces_ * Email:<br /> ! or<br /> ! _three spaces_ * E-mail:<br /> ! one per member of the group. For example, you might have the topic Main.<nop>EmpireBuilders with contents: <pre> ! * Email: At...@hu... ! * E-mail: Gen...@mo... </pre> ! You can then assign actions using =who="EmpireBuilders"=. Note that this technique allows you to assign actions to groups of people who are *not* registered with your TWiki (and may not wish to be). ! ! Note that you can also use pseudo-users in =notify=. ---+++ Action searches --- 63,76 ---- E-mail addresses of people are found by the process [[#TranslatingNamesToEMailAddresses][described below]]. ! You can also use the shortahnd =me= for the currently logged-in user (this is 'TWikiGuest' unless you have been prompted for a username and password). In actions this will automatically be expanded when the topic is saved, and in searches it will match the currently logged in user. ! ---+++++ Assigning actions or notifies to groups ! ! You can assign an action to a group defined using a TWiki group topic (see %TWIKIWEB%.TWikiDocumentation). Alternatively you can give a list of people as the value of the attribute. For example, <pre> ! %ACTION<nop>{who=TWikiAdminGroup ...}% ! %ACTION<nop>{who="KnutHaraldsen,MagnusMagnusson" ...}% </pre> ! __Note__ in general you should not use these mechanisms for assigning actions using =who=, because the actions so created are not specific. Actions should be assigned to one person only. ---+++ Action searches *************** *** 82,87 **** Write the command =%<nop>ACTIONSEARCH{ attributes }%= anywhere in a TWiki topic. Standard attributes are | *Name* | *Value* | *Description* | ! | =who= | See [[#PeopleAnchor][People]], or use =me= for the currently logged-in user (this is 'TWikiGuest' unless you have been prompted for a username and password) | The name of the person responsible | ! | =notify= | same as =who= | Persons who want to be notified of a change | | =state= | =late=, =open= or =closed= | Set to =late= to search for late actions; Set to "open" to search for open actions;<br /> Set to "closed" to search for closed actions. See [[#Settings][Settings]] for details on how to extend the state set. | | =within= | a number of days | Search for actions that are within a number of days of their due date | --- 78,83 ---- Write the command =%<nop>ACTIONSEARCH{ attributes }%= anywhere in a TWiki topic. Standard attributes are | *Name* | *Value* | *Description* | ! | =who= | See [[#PeopleAnchor][People]] | Person responsible for closing the action. | ! | =notify= | See [[#PeopleAnchor][People]] | Persons who want to be notified of a change | | =state= | =late=, =open= or =closed= | Set to =late= to search for late actions; Set to "open" to search for open actions;<br /> Set to "closed" to search for closed actions. See [[#Settings][Settings]] for details on how to extend the state set. | | =within= | a number of days | Search for actions that are within a number of days of their due date | *************** *** 176,185 **** #TranslatingNamesToEMailAddresses The wiki name of the user to be notified is translated to a mail address according to the following rules: ! * If they are listed in WebNotify *in any web*, the mail address given there is used. ! * If this fails and they have a personal page, and that personal page contains a line or lines matching<br /> ! _three spaces_ * Email: _email address_ <br /> or<br /> _three spaces_ * E-mail: _email address_ <br /> ! then the notification is sent to *all* those e-mail addresses. This is how you assign actions to groups. * If this fails and the 'who' name is a valid e-mail address, for example pe...@do..., then that name is used. --- 172,184 ---- #TranslatingNamesToEMailAddresses The wiki name of the user to be notified is translated to a mail address according to the following rules: ! * If the user has a personal page, and that personal page contains a line or lines matching<br /> ! _spaces_ * Email: _email address_ <br /> or<br /> _three spaces_ * E-mail: _email address_ <br /> ! Alternatively if the topic is a group definition (the name ends in 'Group') then the line<br /> _spaces_ * Set GROUP =<br /> is used to determine the wikinames of the people in the group. These are resolved to email addresses recursively. ! then the notification is sent to that address. If that fails, ! * If they appear in *any* WebNotify in *any* web, in the form of a line that gives an email address, then that address is used. ! * If they are listed in WebNotify *in any web*, the mail address given there is used. ! *all* those e-mail addresses. This is how you assign actions to groups. * If this fails and the 'who' name is a valid e-mail address, for example pe...@do..., then that name is used. *************** *** 258,262 **** * If set to 1 will edit an action in a separate browser window (requires <nop>JavaScript) * Set USENEWWINDOW = 1 ! * If set to 1, action edits will offer a 'Save Changes' instead of the usual 'Preview Changes' button. If this is set along with the USENEWWINDOW parameter, the subwindow will close on save. * Set NOPREVIEW = 1 * Set the colours for late actions, errors and the table headers. Accepts standard HTML colours. --- 257,261 ---- * If set to 1 will edit an action in a separate browser window (requires <nop>JavaScript) * Set USENEWWINDOW = 1 ! * If set to 1, action edits will offer a 'Save Changes' instead of the usual 'Preview Changes' button. If this is set along with the USENEWWINDOW parameter, the subwindow _should_ close on save, but it won't because I haven't worked out how to do this safely. * Set NOPREVIEW = 1 * Set the colours for late actions, errors and the table headers. Accepts standard HTML colours. *************** *** 264,276 **** * Set BADDATECOL = red * Set HEADERCOL = orange - * The command to use to recover revision info. This is only required if you want to use actionnotify with the 'changedsince' parameter, and must be the command used to find out the revision number of a topic (in standard RCS format) at a given date. The response is searched to find the string "revision x.y" where x.y was the revision at the given date. - * Set LOGCMD = /usr/bin/rlog -d'%DATE%' %FILENAME% #SettingsNotify * The fields to scan to detect changes for actionnotify. Changes in other fields are ignored. * Set NOTIFYCHANGES = $due,$state,$text ---++ Plugin Installation Instructions ! __Note:__ These instructions are for the TWiki maintainer. No changes to your browser are required. This plugin makes extensive use of new features added to TWiki in the Feb 2003 release. Earlier versions lack all the features described here. Make sure you install using the zip appropriate to your installation. * Make sure you have Time::ParseDate installed in your perl installation (available from www.cpan.org) * Download the ZIP file from the Plugin web (see below). Contents: --- 263,276 ---- * Set BADDATECOL = red * Set HEADERCOL = orange #SettingsNotify * The fields to scan to detect changes for actionnotify. Changes in other fields are ignored. * Set NOTIFYCHANGES = $due,$state,$text + * Non-standard attributes - see [[#SettingsStateSet][Defining non-standard attributes]] above. + * Set EXTRAS = ---++ Plugin Installation Instructions ! __Note:__ These instructions are for the TWiki maintainer. No changes to your browser are required. *This plugin makes extensive use of new features added to TWiki in the 1 Feb 2003 release*. Earlier versions lack all the features described here. Make sure you install using the zip appropriate to your installation. If you install an earlier version of the plugin with the 1 Feb 2003 release, note that change notification will not function correctly. ! * Make sure you have Time::ParseDate installed in your perl installation (available from www.cpan.org) * Download the ZIP file from the Plugin web (see below). Contents: *************** *** 280,284 **** | ==bin/actionnotify== | Mailer script | | ==templates/actionnotify.tmpl== | Page template for notify message | ! | ==templates/editaction.tmpl== | Action editor page template | | ==lib/TWiki/Plugins/%TOPIC%.pm== | Plugin Perl module | | ==lib/TWiki/Plugins/%TOPIC%/Action.pm== | Perl support module | --- 280,285 ---- | ==bin/actionnotify== | Mailer script | | ==templates/actionnotify.tmpl== | Page template for notify message | ! | ==templates/edit.action.tmpl== | Action editor page template | ! | ==templates/editaction.tmpl== | Action editor page subtemplate | | ==lib/TWiki/Plugins/%TOPIC%.pm== | Plugin Perl module | | ==lib/TWiki/Plugins/%TOPIC%/Action.pm== | Perl support module | *************** *** 286,307 **** | ==lib/TWiki/Plugins/%TOPIC%/ActionSet.pm== | Perl support module | | ==lib/TWiki/Plugins/%TOPIC%/Attrs.pm== | Perl support module | ! | ==lib/TWiki/Plugins/%TOPIC%/Bin.pm== | Perl support module | | ==lib/TWiki/Plugins/%TOPIC%/test.zip== | Test scripts | * Unzip ==%TOPIC%.zip== in your twiki installation directory. * Add ==Plugins.%TOPIC%== to the ==INSTALLEDPLUGINS== variable in %TWIKIWEB%.TWikiPreferences (or any WebPreferences topic). * If the plugin is installed and enabled correctly you should see a formatted action below: %ACTION{who=TWikiGuest,due="1 Jan 2003",open}% Example action ---++ %RED%Known Issues%ENDCOLOR% ---+++ Use of unpublished functions ! The following unpublished TWiki core functions and constants are used: <pre> ! TWiki::cmdQuote ! TWiki::egrepCmd TWiki::getGmDate() TWiki::getTWikiLibDir() ! TWiki::Net::sendEmail( ! TWiki::notifyTopicname ! TWiki::securityFilter </pre> --- 287,318 ---- | ==lib/TWiki/Plugins/%TOPIC%/ActionSet.pm== | Perl support module | | ==lib/TWiki/Plugins/%TOPIC%/Attrs.pm== | Perl support module | ! | ==lib/TWiki/Plugins/%TOPIC%/AttrDef.pm== | Perl support module | ! | ==lib/TWiki/Plugins/%TOPIC%/Config.pm== | Configuration module | ! | ==lib/TWiki/Plugins/%TOPIC%/Format.pm== | Perl support module | | ==lib/TWiki/Plugins/%TOPIC%/test.zip== | Test scripts | * Unzip ==%TOPIC%.zip== in your twiki installation directory. * Add ==Plugins.%TOPIC%== to the ==INSTALLEDPLUGINS== variable in %TWIKIWEB%.TWikiPreferences (or any WebPreferences topic). + * Configure lib/TWiki/Plugins/ActionTrackerPlugin/Config.pm appropriately for your installation. Several of the configuration items are the same as in lib/TWiki.cfg - you can copy your local values from there if you're not sure what you're doing. * If the plugin is installed and enabled correctly you should see a formatted action below: %ACTION{who=TWikiGuest,due="1 Jan 2003",open}% Example action + ---+++ Upgrade notes + Earlier versions of this plugin installed a number of files that are no longer required. Relative to the root of the TWiki installaion these are: + | *File* | *What's happened* | + | data/Plugins/ActionTrackerPlugin.txt | Moved to data/TWiki | + | templates/actionchangenotify.tmpl | Merged with actionnotify.tmpl | + | bin/editaction | Merged into plugin code, using hooks added in 1 Feb 2003 TWiki release | + | bin/previewaction | Merged into plugin code, using hooks added in 1 Feb 2003 TWiki release | + + The mechanism for defining notification groups as lists of "EMail" lines in a topic in Main is no longer supported. Please upgrade to the mechanism described herein. + ---++ %RED%Known Issues%ENDCOLOR% ---+++ Use of unpublished functions ! The following unpublished TWiki core functions are used: <pre> ! TWiki::initialize() TWiki::getGmDate() TWiki::getTWikiLibDir() ! TWiki::Net::sendEmail() </pre> *************** *** 328,333 **** | | 26 Sep 2002: Added changedsince notify support, added support for editing in a seperate window, incorporated attribute syntax corrections contributed by Main.PeterThoeny, sorted ACTIONSEARCH output and action notifications | | | 30 Jan 2003: Query-by-example action search with notify field; notfication of change emails and actions email are sent as one; notify field was added to topic view and edit; various bug fixes by TWiki:Main/PaulineCheung | ! | | 30 Apr 2003: Version 2.0; Large sections rewritten to take advantage of improvements in Plugin support. Added UIDs and formattable action searches | ! | | 4 May 2003: Added configurability to tables and action editor, and did a large number of code refactorings. | | CPAN Dependencies: | Time::ParseDate | | Perl Version: | 5.0 | --- 339,344 ---- | | 26 Sep 2002: Added changedsince notify support, added support for editing in a seperate window, incorporated attribute syntax corrections contributed by Main.PeterThoeny, sorted ACTIONSEARCH output and action notifications | | | 30 Jan 2003: Query-by-example action search with notify field; notfication of change emails and actions email are sent as one; notify field was added to topic view and edit; various bug fixes by TWiki:Main/PaulineCheung | ! | | 30 Apr 2003: Version 2.0; Large sections rewritten to take advantage of improvements in Plugin support, eliminating two scripts in bin. Added UIDs and formattable action searches | ! | | 4 May 2003: Non-standard fields. Configurability of tables and action editor. Non-standard attributes. Eliminated chdir. | | CPAN Dependencies: | Time::ParseDate | | Perl Version: | 5.0 | *************** *** 339,343 **** ---+++ Further development ! Further development of this code is welcomed. It is recommended that you unpack the distribution into a development directory and use the supplied Ant (http://jakarta.apache.org) build file which provides targets to run the test suite, and install and uninstall your development code into a test installation. ---+++ Copyright --- 350,360 ---- ---+++ Further development ! Further development of this code is welcomed. It is recommended that you unpack the distribution into a development directory and use the supplied Ant (http://jakarta.apache.org) build file which provides targets to run the test suite, and install and uninstall your development code into a test installation. Please, please, please run and extend the test set! ! ! Some ideas: ! * Fix the "close subwindow on save" functionality. See ActionTrackerPlugin.pm, search for $submitScript. ! * It would be nice to generalise the search to support =within= and =late= style searches on all date fields, including non-standard ones. ! * A really brave soul might consider moving action change notification to where it belongs; in the beforeSaveHandler. ! * You could turn this into a full-blooded issue tracker by constraining state transitions. ---+++ Copyright |
From: <cra...@us...> - 2003-05-09 01:30:21
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv17720/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin Added Files: Config.pm Log Message: Fixes for problems reported by Petric Frank --- NEW FILE: Config.pm --- # # Copyright (C) Motorola 2002 - All rights reserved # # TWiki extension that adds tags for action tracking # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License # as published by the Free Software Foundation; either version 2 # of the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details, published at # http://www.gnu.org/copyleft/gpl.html # use TWiki; # required for unpublished constants! # Action tracker configuration. # This configuration is defined to import variables and functions that are not # accessible through the Func module but are defined in TWiki, and other # standard variables used by the action tracker (such as $rlogCmd). # They are defined here so that if they subsequently disappear # from TWiki:: the action tracker can easily be reconfigured. { package ActionTrackerPlugin::Config; use vars qw( $rlogCmd $cmdQuote $egrepCmd $securityFilter $notifyTopicname ); # RCS log command $rlogCmd = "/usr/bin/rlog -d'%DATE%' %FILENAME%"; # Command quote ' for unix, \" for Windows. Copy from TWiki.cfg $cmdQuote = "'"; # Unix egrep command. Copy from TWiki.cfg $egrepCmd = "/bin/egrep"; # Regex security filter. Copy from TWiki.cfg $securityFilter = "[\\\*\?\~\^\$\@\%\`\"\'\&\;\|\<\>\x00-\x1F]"; # Name of topic for email notifications. Copy from TWiki.cfg $notifyTopicname = "WebNotify"; } 1; |
From: <cra...@us...> - 2003-05-09 01:30:19
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/fakewiki/TWiki In directory sc8-pr-cvs1:/tmp/cvs-serv17720/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/fakewiki/TWiki Modified Files: TestMaker.pm Log Message: Fixes for problems reported by Petric Frank Index: TestMaker.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/fakewiki/TWiki/TestMaker.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** TestMaker.pm 4 May 2003 13:12:23 -0000 1.3 --- TestMaker.pm 8 May 2003 20:56:13 -0000 1.4 *************** *** 32,40 **** chop($pwd); my ($p,$f,$l) = caller(1); ! print STDERR "Prefs from $pwd/../../../../../data/TWiki/$plugin.txt\n"; open PF,"<$pwd/../../../../../data/TWiki/$plugin.txt"; while (<PF>) { ! if ($_ =~ /^\s+\* Set (\w+) = ([^\r\n]+)/o) { ! $prefs{"${ucw}_$1"} = $2; } } --- 32,42 ---- chop($pwd); my ($p,$f,$l) = caller(1); ! print STDERR "*** Prefs loaded from $pwd/../../../../../data/TWiki/$plugin.txt\n"; open PF,"<$pwd/../../../../../data/TWiki/$plugin.txt"; while (<PF>) { ! if ($_ =~ /^\s+\* Set (\w+) = (.*)$/o) { ! my $at = $1; ! my $thng = $2; ! $prefs{"${ucw}_$at"} = $thng; } } |
From: <cra...@us...> - 2003-05-09 01:28:33
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test In directory sc8-pr-cvs1:/tmp/cvs-serv17620/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test Modified Files: SimpleActionSetTests.pm Log Message: Fixes for problems reported by Petric Frank Index: SimpleActionSetTests.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/SimpleActionSetTests.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** SimpleActionSetTests.pm 4 May 2003 13:13:49 -0000 1.1 --- SimpleActionSetTests.pm 8 May 2003 20:56:02 -0000 1.2 *************** *** 2,10 **** use lib ('fakewiki'); use lib ('../../../..'); ! use lib ('../../../../TWiki/Plugins'); ! use ActionTrackerPlugin::Action; ! use ActionTrackerPlugin::ActionSet; ! use ActionTrackerPlugin::Attrs; ! use ActionTrackerPlugin::Format; use Assert; use TWiki::TestMaker; --- 2,9 ---- use lib ('fakewiki'); use lib ('../../../..'); ! use TWiki::Plugins::ActionTrackerPlugin::Action; ! use TWiki::Plugins::ActionTrackerPlugin::ActionSet; ! use TWiki::Plugins::ActionTrackerPlugin::Attrs; ! use TWiki::Plugins::ActionTrackerPlugin::Format; use Assert; use TWiki::TestMaker; *************** *** 32,35 **** --- 31,35 ---- "Test_Blah_B_open_ontime"); $actions->add($action); + my $junk = $actions->toString(); } |
From: <cra...@us...> - 2003-05-09 01:18:40
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins In directory sc8-pr-cvs1:/tmp/cvs-serv16655/ActionTrackerPlugin/lib/TWiki/Plugins Modified Files: ActionTrackerPlugin.pm Log Message: Fixes for problems reported by Petric Frank Index: ActionTrackerPlugin.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ActionTrackerPlugin.pm 4 May 2003 13:10:53 -0000 1.4 --- ActionTrackerPlugin.pm 8 May 2003 20:54:04 -0000 1.5 *************** *** 87,91 **** TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_EXTRAS" ); ! $types = ActionTrackerPlugin::Action::extendTypes( $extras ) if ( $extras ); &TWiki::Func::writeDebug( "- TWiki::Plugins::ActionTrackerPlugin::initPlugin($web.$topic) is OK" ) if $debug; --- 87,97 ---- TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_EXTRAS" ); ! if ( $extras ) { ! my $e = ActionTrackerPlugin::Action::extendTypes( $extras ); ! if ( defined( $e )) { ! print STDERR "Bottlin $e\n"; ! TWiki::Func::writeWarning( "- TWiki::Plugins::ActionTrackerPlugin ERROR $e" ); ! } ! } &TWiki::Func::writeDebug( "- TWiki::Plugins::ActionTrackerPlugin::initPlugin($web.$topic) is OK" ) if $debug; *************** *** 179,184 **** my $query = TWiki::Func::getCgiQuery(); my $tmpl = TWiki::Func::readTemplate( "editaction", ""); ! my $date = &TWiki::getGmDate(); $tmpl =~ s/%DATE%/$date/go; my $user = TWiki::Func::getWikiUserName(); --- 185,193 ---- my $query = TWiki::Func::getCgiQuery(); + # editaction.tmpl is a sub-template inserted into the parent template + # as %TEXT%. This is done so we can use the standard template mechanism + # without screwing up the content of the subtemplate. my $tmpl = TWiki::Func::readTemplate( "editaction", ""); ! my $date = TWiki::getGmDate(); $tmpl =~ s/%DATE%/$date/go; my $user = TWiki::Func::getWikiUserName(); *************** *** 193,197 **** $fields .= $query->hidden( -name=>'cmd', -value=>"" ); ! # Throw away $_[0] and re-read the topic, extracting meta-data my $oldText = TWiki::Func::readTopicText( $_[2], $_[1]); my $text = ""; --- 202,208 ---- $fields .= $query->hidden( -name=>'cmd', -value=>"" ); ! # Throw away $_[0] and re-read the topic, extracting meta-data. ! # Oh, how I wish the topic reading/writing was smarter! Or even ! # that already extracted meta-data was passed in here! my $oldText = TWiki::Func::readTopicText( $_[2], $_[1]); my $text = ""; *************** *** 216,220 **** } ! # Find the action my $uid = $query->param( "action" ); my ( $action, $pretext, $posttext ) = --- 227,232 ---- } ! # Find the action. This re-reads the topic, but the cost doesn't seem ! # to be too high. my $uid = $query->param( "action" ); my ( $action, $pretext, $posttext ) = *************** *** 236,242 **** $submitCmd = "Save"; if ( $useNewWindow ) { ! # I'd like to do this, but not sure how. Like this, the ONSUBMIT ! # overrides the ACTION and closes the window before the POST ! # is done. There's probably something like window.submit(). #$submitScript = "ONCLICK=\"document.form.submit();window.close();return true\""; } --- 248,256 ---- $submitCmd = "Save"; if ( $useNewWindow ) { ! # I'd like close the subwindow here, but not sure how. Like this, ! # the ONCLICK overrides the ACTION and closes the window before ! # the POST is done. All the various solutions I've found on the ! # web do something like "wait x seconds" before closing the ! # subwindow, but this seems very risky. #$submitScript = "ONCLICK=\"document.form.submit();window.close();return true\""; } *************** *** 273,279 **** --- 287,296 ---- $tmpl =~ s/%EBW%/$ebw/go; $text = $action->{text}; + # Process the text so it's nice to edit. This gets undone in Action.pm + # when the action is saved. $text =~ s/^\t/ /gos; $text =~ s/<br( \/)?>/\n/gios; $text =~ s/<p( \/)?>/\n\n/gios; + $tmpl =~ s/%TEXT%/$text/go; $tmpl =~ s/%HIDDENFIELDS%/$fields/go; *************** *** 386,389 **** --- 403,407 ---- my $hdrs = $attrs->remove( "header" ); my $orient = $attrs->remove( "orient" ); + my $sort = $attrs->remove( "sort" ); if ( defined( $fmts ) || defined( $hdrs ) || defined( $orient )) { if ( !defined( $fmts ) ) { *************** *** 403,413 **** } - my $sort = $attrs->remove( "sort" ); - my $actions = ActionTrackerPlugin::ActionSet::allActionsInWebs( $web, $attrs ); - - # by default actions will be sorted by due date $actions->sort( $sort ); - return embedJS() . $actions->formatAsHTML( $fmt, "href", $useNewWindow ); } --- 421,426 ---- *************** *** 428,435 **** require TWiki::Plugins::ActionTrackerPlugin::ActionSet; require TWiki::Plugins::ActionTrackerPlugin::Attrs; }; unless( $libsFound ) { # Could not find ActionTrackerPlugin utility libs possibly because ! # of relative use lib dir and chdir after initialization. # Try again with absolute TWiki lib dir path eval { --- 441,449 ---- require TWiki::Plugins::ActionTrackerPlugin::ActionSet; require TWiki::Plugins::ActionTrackerPlugin::Attrs; + require TWiki::Plugins::ActionTrackerPlugin::AttrDef; }; unless( $libsFound ) { # Could not find ActionTrackerPlugin utility libs possibly because ! # of relative use of lib dir and chdir after initialization. # Try again with absolute TWiki lib dir path eval { *************** *** 440,443 **** --- 454,458 ---- require "$libDir/TWiki/Plugins/ActionTrackerPlugin/ActionSet.pm"; require "$libDir/TWiki/Plugins/ActionTrackerPlugin/Attrs.pm"; + require "$libDir/TWiki/Plugins/ActionTrackerPlugin/AttrDef.pm"; }; } *************** *** 474,478 **** my ( $web, $expr ) = @_; ! use TWiki::Plugins::ActionTrackerPlugin::ActionNotify; my $text = ActionTrackerPlugin::ActionNotify::doNotifications( $web, $expr, 1 ); --- 489,496 ---- my ( $web, $expr ) = @_; ! eval { ! require TWiki::Plugins::ActionTrackerPlugin::ActionNotify; ! }; ! my $text = ActionTrackerPlugin::ActionNotify::doNotifications( $web, $expr, 1 ); |
From: <cra...@us...> - 2003-05-09 01:14:36
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv16908/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin Modified Files: ActionNotify.pm ActionSet.pm Log Message: Fixes for problems reported by Petric Frank Index: ActionNotify.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/ActionNotify.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ActionNotify.pm 4 May 2003 13:11:13 -0000 1.3 --- ActionNotify.pm 8 May 2003 20:54:25 -0000 1.4 *************** *** 18,25 **** use integer; ! use TWiki; use TWiki::Net; use TWiki::Plugins::ActionTrackerPlugin::Action; use TWiki::Plugins::ActionTrackerPlugin::ActionSet; use TWiki::Plugins::ActionTrackerPlugin::Format; --- 18,27 ---- use integer; ! use TWiki;# for unpublished functions ! use TWiki::Net; use TWiki::Plugins::ActionTrackerPlugin::Action; use TWiki::Plugins::ActionTrackerPlugin::ActionSet; + use TWiki::Plugins::ActionTrackerPlugin::Config; use TWiki::Plugins::ActionTrackerPlugin::Format; *************** *** 27,32 **** { package ActionTrackerPlugin::ActionNotify; - my $vcLogCmd; - # PUBLIC actionnotify script entry point. Reinitialises TWiki. # --- 29,32 ---- *************** *** 63,72 **** my $format = new ActionTrackerPlugin::Format( $hdr, $bdy, $textform, $changes, $vert ); - $vcLogCmd = - TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_LOGCMD" ); - my $notify = {}; - _gatherNotables( $notify ); - my $result = ""; my $webs = $attrs->get( "web" ) || ".*"; --- 63,67 ---- *************** *** 96,140 **** } # Now cycle over the list of people and find their sets of actions ! # or changes ! my $mainweb = TWiki::Func::getMainWebname(); foreach my $key ( keys %people ) { ! if ( defined( $key ) ) { ! my $compare_key = $key; ! $key =~ s/\s//go; ! $key =~ s/$mainweb\.//go; ! my $mailaddr = _getMailAddress( $key, $notify ); ! if ( !defined( $mailaddr ) ) { ! TWiki::Func::writeWarning( "No mail address found for $key" ); ! if ( $debugMailer ) { ! $result .= "No mail address found for $key<br />" ! } ! next; ! } ! ! my $actionsString = ""; ! my $actionsHTML = ""; ! if ( $actions ) { ! my $subact = $actions->search("who=\"$key\""); ! $subact->sort(); ! $actionsString = $subact->formatAsString( $format ) || ""; ! $actionsHTML = $subact->formatAsHTML( $format, "href", 0 ) || ""; ! } ! my $changesString = $notifications{$compare_key}{text} || ""; ! my $changesHTML = $notifications{$compare_key}{html} || ""; ! my $message = _composeActionsMail($actionsString, $actionsHTML, ! $changesString, $changesHTML, ! $date, $mailaddr, $format ); ! if ( $debugMailer ) { ! $result .= $message; ! } else { ! my $error = TWiki::Net::sendEmail( $message ); ! if ( defined( $error )) { ! $error = "ActionTrackerPlugin:ActionNotify: $error"; ! TWiki::Func::writeWarning( $error ); ! } } } --- 91,160 ---- } + # Resolve all mail addresses + my $mailAddress = {}; + my $unsatisfied = 0; + foreach my $key ( keys %people ) { + if ( !defined( _getMailAddress( $key, $mailAddress ))) { + $unsatisfied = 1; + } + } + + # If we could not find everyone, gather up WebNotifys as well. + _loadWebNotifies( $mailAddress ) if ( $unsatisfied ); + # Now cycle over the list of people and find their sets of actions ! # or changes. When we find actions or changes for someone then ! # combine them and add them to the notifications for each indicated ! # mail address. ! my %actionsPerEmail; ! my %changesPerEmail; foreach my $key ( keys %people ) { ! # first expand the mail address(es) ! my $mailaddr = _getMailAddress( $key, $mailAddress ); ! if ( !defined( $mailaddr ) ) { ! TWiki::Func::writeWarning( "No mail address found for $key" ); ! $result .= "No mail address found for $key<br />" if ( $debugMailer ); ! next; ! } ! # find all the actions for this wikiname ! my $myActions; ! if ( $actions ) { ! $myActions = $actions->search("who=\"$key\""); ! } ! # now add these to the lists for each mail address ! foreach my $actor ( split( /,/, $mailaddr )) { ! $actionsPerEmail{$actor} = $myActions; ! $changesPerEmail{$actor} = $notifications{$key}; ! } ! } ! ! # Finally send out the messages ! foreach my $email ( keys %actionsPerEmail ) { ! my $actionsString = ""; ! my $actionsHTML = ""; ! my $changesString = ""; ! my $changesHTML = ""; ! if ( $actionsPerEmail{$email} ) { ! $actionsString = $actionsPerEmail{$email}->formatAsString( $format ); ! $actionsHTML = $actionsPerEmail{$email}->formatAsHTML( $format, "href", 0 ); ! } ! if ( $changesPerEmail{$email} ) { ! $changesString = $changesPerEmail{$email}{text}; ! $changesHTML = $changesPerEmail{$email}{html}; ! } ! ! my $message = _composeActionsMail($actionsString, $actionsHTML, ! $changesString, $changesHTML, ! $date, $email, $format ); ! if ( $debugMailer ) { ! $result .= $message; ! } else { ! my $error = TWiki::Net::sendEmail( $message ); ! if ( defined( $error )) { ! $error = "ActionTrackerPlugin:ActionNotify: $error"; ! TWiki::Func::writeWarning( $error ); } } *************** *** 145,150 **** # PRIVATE Process all known webs to get the list of notifiable people ! sub _gatherNotables { ! my ( $notify ) = @_; my $dataDir = TWiki::Func::getDataDir(); --- 165,170 ---- # PRIVATE Process all known webs to get the list of notifiable people ! sub _loadWebNotifies { ! my ( $mailAddress ) = @_; my $dataDir = TWiki::Func::getDataDir(); *************** *** 155,159 **** foreach $web ( @weblist ) { if ( -d "$dataDir/$web" ) { ! _gatherNotablesFromWeb( $web, $notify ); } } --- 175,179 ---- foreach $web ( @weblist ) { if ( -d "$dataDir/$web" ) { ! _loadWebNotify( $web, $mailAddress ); } } *************** *** 162,167 **** # PRIVATE Get the actions that match attrs, and the contents # of WebNotify, for a web ! sub _gatherNotablesFromWeb { ! my( $web, $notify ) = @_; if( ! TWiki::Func::webExists( $web ) ) { --- 182,187 ---- # PRIVATE Get the actions that match attrs, and the contents # of WebNotify, for a web ! sub _loadWebNotify { ! my( $web, $mailAddress ) = @_; if( ! TWiki::Func::webExists( $web ) ) { *************** *** 171,194 **** } ! # get the notify list for this web ! _addWebNotify( $web, $notify ); ! } ! ! # PRIVATE Read the WebNotify topic in this web and add the entries to a map ! # of name->address ! sub _addWebNotify { ! my ( $web, $notify ) = @_; ! ! my $topicname = $TWiki::notifyTopicname; return undef unless TWiki::Func::topicExists( $web, $topicname ); my $list = {}; my $mainweb = TWiki::Func::getMainWebname(); ! foreach ( split( /\n/, TWiki::Func::readTopicText( $web, $topicname, undef, 1 ))) { ! next unless /^\s+\*\s([A-Za-z0-9\.]+)\s+\-\s+/; ! my $who = $1; ! $who =~ s/^$mainweb\.//o if ( defined($who) ); ! next unless (/([\w\-\.\+]+\@[\w\-\.\+]+)/); ! $notify->{$who} = $1; } } --- 191,210 ---- } ! my $topicname = $ActionTrackerPlugin::Config::notifyTopicname; return undef unless TWiki::Func::topicExists( $web, $topicname ); my $list = {}; my $mainweb = TWiki::Func::getMainWebname(); ! my $text = TWiki::Func::readTopicText( $web, $topicname, undef, 1 ); ! foreach my $line ( split( /\n/, $text)) { ! if ( $line =~ /^\s+\*\s([\w\.]+)\s+-\s+([\w\-\.\+]+\@[\w\-\.\+]+)/o ) { ! my $who = $1; ! my $addr = $2; ! $who = ActionTrackerPlugin::Action::_canonicalName( $who ); ! if ( !defined( $mailAddress->{$who} )) { ! TWiki::Func::writeWarning( "ActionTrackerPlugin:ActionNotify: mail address for $who found in WebNotify" ); ! $mailAddress->{$who} = $addr; ! } ! } } } *************** *** 198,203 **** # personal topic in the Main web and looking for Email: sub _getMailAddress { ! my ( $who, $notify ) = @_; if ( $who =~ m/,/o ) { # Multiple addresses --- 214,223 ---- # personal topic in the Main web and looking for Email: sub _getMailAddress { ! my ( $who, $mailAddress ) = @_; + if ( defined( $mailAddress->{$who} )) { + return $mailAddress->{$who}; + } + if ( $who =~ m/,/o ) { # Multiple addresses *************** *** 207,243 **** my @persons = split( /,/, $who ); foreach my $person ( @persons ) { ! my $addressee .= _getMailAddress( $person, $notify ); $addresses .= "," if ($addresses ne ""); $addresses .= $addressee; } ! $notify->{$who} = $addresses; ! } elsif ( $who =~ /([\w\-\.\+]+\@[\w\-\.\+]+)/ ) { # Valid mail address ! $notify->{$who} = $who; } else { ! my $mainweb = TWiki::Func::getMainWebname(); ! $who =~ s/^$mainweb\.//o if ( defined( $who ) ); ! ! if ( !defined( $notify->{$who} ) ) { ! if ( TWiki::Func::topicExists( $mainweb, $who ) ) { ! my $text = TWiki::Func::readTopicText( $mainweb, $who, undef, 1 ); ! ! my $addresses = ""; ! # parse Email: format lines from topic while ( $text =~ s/^\s+\*\s*E-?mail:\s*([^\s\r\n]*)//imo ) { ! $addresses .= "," if ($addresses ne ""); $addresses .= $1; } ! ! # parse WebNotify format line ! while ( $text =~ s/^\s+\*\s([A-Za-z0-9\.]+)\s+\-\s+([^\s\r\n]+)//mo ) { ! $addresses .= "," if ($addresses ne ""); ! $addresses .= $2; ! } ! $notify->{$who} = $addresses if ( $addresses ne "" ); ! } } } ! return $notify->{$who}; } --- 227,271 ---- my @persons = split( /,/, $who ); foreach my $person ( @persons ) { ! my $addressee = _getMailAddress( $person, $mailAddress ); $addresses .= "," if ($addresses ne ""); $addresses .= $addressee; } ! $mailAddress->{$who} = $addresses; ! } elsif ( $who =~ /([\w\-\.\+]+\@[\w\-\.\+]+)/o ) { # Valid mail address ! $mailAddress->{$who} = $who; } else { ! $who = ActionTrackerPlugin::Action::_canonicalName( $who ); ! $who =~ /(\w+)\.(\w+)/o; ! my ( $inweb, $intopic ) = ( $1, $2 ); ! if ( TWiki::Func::topicExists( $inweb, $intopic ) ) { ! my $text = TWiki::Func::readTopicText( $inweb, $intopic, undef, 1 ); ! my $addresses = ""; ! ! # If it's a Group topic, match * Set GROUP = ! if ( $intopic =~ m/Group$/o ) { ! if ( $text =~ m/^\s+\*\s+Set\s+GROUP\s*=\s*([^\r\n]*)/so ) { ! # define our mail address to eliminate infinite recursion ! $mailAddress->{$who} = "RECURSIVE GROUP DEF"; ! foreach my $person ( split( /\s*,\s*/, $1 )) { ! my $addressee = _getMailAddress( $person, $mailAddress ); ! $addresses .= "," if ( $addresses ne "" ); ! $addresses .= $addressee; ! } ! } ! } else { ! # parse Email: format lines from personal topic while ( $text =~ s/^\s+\*\s*E-?mail:\s*([^\s\r\n]*)//imo ) { ! $addresses .= "," if ( $addresses ne "" ); $addresses .= $1; } ! } ! ! if ( defined( $addresses ) && $addresses !~ /^\s*$/o ) { ! $mailAddress->{$who} = $addresses; ! } } } ! return $mailAddress->{$who}; } *************** *** 286,293 **** $text = TWiki::Func::expandCommonVariables( $text, $TWiki::mainTopicname ); $text =~ s/<img src=.*?[^>]>/[IMG]/goi; # remove all images my $sup = TWiki::Func::getScriptUrlPath(); my $sun = TWiki::Func::getUrlHost() . $sup; $text =~ s/href=\"$sup/href=\"$sun/ogi; ! $text =~ s|</*nop[ /]*>||goi; return $text; --- 314,322 ---- $text = TWiki::Func::expandCommonVariables( $text, $TWiki::mainTopicname ); $text =~ s/<img src=.*?[^>]>/[IMG]/goi; # remove all images + # add the url host to any in-twiki urls that lack it my $sup = TWiki::Func::getScriptUrlPath(); my $sun = TWiki::Func::getUrlHost() . $sup; $text =~ s/href=\"$sup/href=\"$sun/ogi; ! $text =~ s/<\/?nop( \/)?>//goi; return $text; *************** *** 301,305 **** my $dataDir = TWiki::Func::getDataDir(); my $fname = "$dataDir\/$theWeb\/$theTopic.txt"; ! my $tmp = $vcLogCmd; $tmp =~ s/%DATE%/$date/o; $tmp =~ s/%FILENAME%/$fname/o; --- 330,334 ---- my $dataDir = TWiki::Func::getDataDir(); my $fname = "$dataDir\/$theWeb\/$theTopic.txt"; ! my $tmp = $ActionTrackerPlugin::Config::rlogCmd; $tmp =~ s/%DATE%/$date/o; $tmp =~ s/%FILENAME%/$fname/o; *************** *** 375,379 **** # Also assumed: the output of the egrepCmd must be of the form # file.txt: ...matched text... ! my $grep = `${TWiki::egrepCmd} ${TWiki::cmdQuote}%ACTION\\{.*\\}%${TWiki::cmdQuote} $dd/$theWeb/*.txt`; my $number = 0; --- 404,410 ---- # Also assumed: the output of the egrepCmd must be of the form # file.txt: ...matched text... ! my $cmd = $ActionTrackerPlugin::Config::egrepCmd; ! my $q = $ActionTrackerPlugin::Config::cmdQuote; ! my $grep = `$cmd $q%ACTION\\{.*\\}%$q $dd/$theWeb/*.txt`; my $number = 0; *************** *** 387,392 **** $processed{$topic} = 1; } - #debug - #$notifications->{"$theWeb.$topic"} = "$theWeb.$topic searched<br>"; } } --- 418,421 ---- *************** *** 414,419 **** my $theWeb = $1; _findChangesInWeb( $theWeb, $date, $format, $notifications ); - #debug - #$notifications->{$theWeb} = "Web $theWeb searched<br>"; } } --- 443,446 ---- Index: ActionSet.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/ActionSet.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** ActionSet.pm 4 May 2003 13:11:13 -0000 1.4 --- ActionSet.pm 8 May 2003 20:54:25 -0000 1.5 *************** *** 18,26 **** use integer; - use TWiki; # required for unpublished constants! use TWiki::Func; use TWiki::Plugins::ActionTrackerPlugin::Attrs; use TWiki::Plugins::ActionTrackerPlugin::Format; # Perl object that represents a set of actions. --- 18,26 ---- use integer; use TWiki::Func; use TWiki::Plugins::ActionTrackerPlugin::Attrs; use TWiki::Plugins::ActionTrackerPlugin::Format; + use TWiki::Plugins::ActionTrackerPlugin::Config; # Perl object that represents a set of actions. *************** *** 56,61 **** @{$this->{ACTIONS}} = sort { foreach my $sf ( @_sortfields ) { ! my $c = ( $a->{$sf} cmp $b->{$sf} ); ! return $c if ( $c != 0 ); } # default to sorting on due --- 56,68 ---- @{$this->{ACTIONS}} = sort { foreach my $sf ( @_sortfields ) { ! my ( $x, $y ) = ( $a->{$sf}, $b->{$sf} ); ! if ( defined( $x ) && defined( $y )) { ! my $c = ( $x cmp $y ); ! return $c if ( $c != 0 ); ! } elsif ( defined( $x ) ) { ! return -1; ! } elsif ( defined( $y ) ) { ! return 1; ! } } # default to sorting on due *************** *** 84,87 **** --- 91,96 ---- my $chosen = new ActionTrackerPlugin::ActionSet(); + my $sort = $attr->remove( "sort" ); + foreach $action ( @{$this->{ACTIONS}} ) { if ( $action->matches( $attr ) ) { *************** *** 90,93 **** --- 99,105 ---- } + # by default actions will be sorted by due date + $chosen->sort( $sort ); + return $chosen; } *************** *** 156,160 **** foreach $action ( @{$this->{ACTIONS}} ) { ! my @persons = split( /[,\s]+/, $action->{who} ); foreach my $person ( @persons ) { $whos->{$person} = 1; --- 168,172 ---- foreach $action ( @{$this->{ACTIONS}} ) { ! my @persons = split( /,/, $action->{who} ); foreach my $person ( @persons ) { $whos->{$person} = 1; *************** *** 178,183 **** # Also assumed: the output of the egrepCmd must be of the form # file.txt: ...matched text... ! # SMELL: uses unpublished TWiki:: constants ! my $grep = `${TWiki::egrepCmd} ${TWiki::cmdQuote}%ACTION\\{.*\\}%${TWiki::cmdQuote} $dd/$web/*.txt`; my $number = 0; my $topics = $attrs->get( "topic" ) || ""; --- 190,196 ---- # Also assumed: the output of the egrepCmd must be of the form # file.txt: ...matched text... ! my $cmd = $ActionTrackerPlugin::Config::egrepCmd; ! my $q = $ActionTrackerPlugin::Config::cmdQuote; ! my $grep = `$cmd $q%ACTION\\{.*\\}%$q $dd/$web/*.txt`; my $number = 0; my $topics = $attrs->get( "topic" ) || ""; *************** *** 214,218 **** foreach $web ( @weblist ) { if ( -d "$dataDir/$web" && $web =~ /^$webs$/ ) { ! $web =~ s/$TWiki::securityFilter//go; # FIXME: This bypasses the official API $web =~ /(.*)/; # untaint $web = $1; --- 227,231 ---- foreach $web ( @weblist ) { if ( -d "$dataDir/$web" && $web =~ /^$webs$/ ) { ! $web =~ s/$ActionTrackerPlugin::Config::securityFilter//go; # FIXME: This bypasses the official API $web =~ /(.*)/; # untaint $web = $1; |
From: <cra...@us...> - 2003-05-09 01:12:29
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test In directory sc8-pr-cvs1:/tmp/cvs-serv17079/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test Modified Files: ActionNotifyTests.pm Log Message: Fixes for problems reported by Petric Frank Index: ActionNotifyTests.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/ActionNotifyTests.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ActionNotifyTests.pm 4 May 2003 13:13:00 -0000 1.1 --- ActionNotifyTests.pm 8 May 2003 20:54:56 -0000 1.2 *************** *** 2,11 **** use lib ('fakewiki'); use lib ('../../../..'); ! use lib ('../../../../TWiki/Plugins'); ! use ActionTrackerPlugin::Action; ! use ActionTrackerPlugin::ActionSet; ! use ActionTrackerPlugin::ActionNotify; ! use ActionTrackerPlugin::Attrs; ! use ActionTrackerPlugin::Format; use lib ('.'); use Assert; --- 2,10 ---- use lib ('fakewiki'); use lib ('../../../..'); ! use TWiki::Plugins::ActionTrackerPlugin::Action; ! use TWiki::Plugins::ActionTrackerPlugin::ActionSet; ! use TWiki::Plugins::ActionTrackerPlugin::ActionNotify; ! use TWiki::Plugins::ActionTrackerPlugin::Attrs; ! use TWiki::Plugins::ActionTrackerPlugin::Format; use lib ('.'); use Assert; *************** *** 19,47 **** TWiki::TestMaker::init("ActionTrackerPlugin"); ! TWiki::TestMaker::writeTopic("Test", "Topic1", " ! %ACTION{who=Main.Sam,due=\"1 Jan 02\",open}% A0: Sam_open_late"); ! TWiki::TestMaker::writeTopic("Test", "Topic2", " ! %ACTION{who=Fred,due=\"1 Jan 02\",open}% A1: Fred_open_ontime"); ! TWiki::TestMaker::writeTopic("Test", "WebNotify", " ! * Main.Fred - fred\@sesame.street.com "); - - TWiki::TestMaker::writeTopic("Main", "Topic2", " - %ACTION{who=Main.Fred,due=\"1 Jan 02\",closed}% A2: Fred_closed_ontime - %ACTION{who=Joe,due=\"29 Jan 2010\",open}% A3: Joe_open_ontime - %ACTION{who=TheWholeBunch,due=\"29 Jan 2001\",open}% A4: Joe_open_ontime"); - TWiki::TestMaker::writeTopic("Main", "WebNotify", " ! * Main.Sam - sam\@sesame.street.com "); ! TWiki::TestMaker::writeTopic("Main", "Joe", " ! * Email: joe\@sesame.street.com "); ! TWiki::TestMaker::writeTopic("Main", "TheWholeBunch", " ! * Email: joe\@sesame.street.com ! * Email: fred\@sesame.street.com ! * E-mail: sam\@sesame.street.com ! * Main.GungaDin - gunga-din\@war_lords-home.ind "); # Action changes are hard to fake because the RCS files are not there. TWiki::TestMaker::writeRcsTopic("Test", "ActionChanged", "head 1.2; --- 18,64 ---- TWiki::TestMaker::init("ActionTrackerPlugin"); ! TWiki::TestMaker::writeTopic("Main", "ActorOne", " ! * Email: actor-1\@an-address.net ! "); ! TWiki::TestMaker::writeTopic("Main", "ActorTwo", " ! * Email: actorTwo\@another-address.net ! "); ! TWiki::TestMaker::writeTopic("Main", "ActorThree", " ! * Email: actor3\@yet-another-address.net ! "); ! TWiki::TestMaker::writeTopic("Main", "ActorFour", " ! * E-mail: actorfour\@yet-another-address.net ! "); ! TWiki::TestMaker::writeTopic("Main", "ActorFive", " ! * NoE-mailhere: actor5\@wrong-address ! "); ! TWiki::TestMaker::writeTopic("Main", "ActorSix", " ! * E-mail: actor6\@correct-address ! "); ! TWiki::TestMaker::writeTopic("Main", "TWikiFormGroup", " ! \t\t* Set GROUP = ActorThree, ActorFour "); TWiki::TestMaker::writeTopic("Main", "WebNotify", " ! * Main.ActorFive - actor5\@correct.address ! * Main.ActorSix - actor6\@wrong.address "); ! TWiki::TestMaker::writeTopic("Test", "WebNotify", " ! * Main.ActorEight - actor-8\@correct.address "); ! TWiki::TestMaker::writeTopic("Main", "EMailGroup", " ! * Set GROUP = actorTwo\@another-address.net,actorfour\@yet-another-address.net "); + + TWiki::TestMaker::writeTopic("Test", "Topic1", " + %ACTION{who=\"ActorOne,ActorTwo,ActorThree,ActorFour,ActorFive,ActorSix,ActorSeven,ActorEight\" due=\"3 Jan 02\" state=open}% A1: ontime"); + TWiki::TestMaker::writeTopic("Test", "Topic2", " + %ACTION{who=\"ActorOne,ActorTwo,ActorThree,ActorFour,ActorFive,ActorSix,actor.7\@seven.net,ActorEight\" due=\"3 Jan 02\" state=closed}% A2: closed"); + TWiki::TestMaker::writeTopic("Main", "Topic1", " + %ACTION{who=\"ActorOne,ActorTwo,ActorThree,ActorFour,ActorFive,ActorSix,actor.7\@seven.net,ActorEight\",due=\"3 Jan 01\",state=open}% A3: late + %ACTION{who=TWikiFormGroup,due=\"3 Jan 01\",state=open}% A4: late "); + TWiki::TestMaker::writeTopic("Main", "Topic2", " + %ACTION{who=EMailGroup,due=\"3 Jan 01\",state=open}% A5: late + %ACTION{who=\"ActorOne,ActorTwo,ActorThree,ActorFour,TWikiFormGroup,ActorFive,ActorSix,actor.7\@seven.net,ActorEight,EMailGroup\",due=\"3 Jan 99\",open}% A6: late"); + # Action changes are hard to fake because the RCS files are not there. TWiki::TestMaker::writeRcsTopic("Test", "ActionChanged", "head 1.2; *************** *** 75,81 **** text \@%META:TOPICINFO{author=\"guest\" date=\"1032890093\" format=\"1.0\" version=\"1.2\"}% ! %ACTION{who=Mowgli,due=\"22-jun-2002\",notify=RikkiTikkiTavi\@\@here.com}% Date change ! %ACTION{who=Mowgli,due=\"22-jun-2002\",notify=RikkiTikkiTavi\@\@here.com}% Stuck in ! %ACTION{who=RikkiTikkiTavi,due=\"22-jul-2001\",notify=Mowgli\@\@there.com}% Text change from original \@ --- 92,98 ---- text \@%META:TOPICINFO{author=\"guest\" date=\"1032890093\" format=\"1.0\" version=\"1.2\"}% ! %ACTION{who=ActorFive,due=\"22-jun-2002\",notify=Main.ActorFive}% A7: Date change ! %ACTION{who=ActorFive,due=\"22-jun-2002\"}% Stuck in ! %ACTION{who=ActorFour,due=\"22-jul-2001\",notify=\"Main.ActorSix,Main.ActorEight\"}% A8: Text change from original \@ *************** *** 89,173 **** a3 3 %META:TOPICINFO{author=\"guest\" date=\"1032811587\" format=\"1.0\" version=\"1.1\"}% ! %ACTION{who=Mowgli,due=\"22-jun-2001\",notify=RikkiTikkiTavi\@\@here.com}% Date change ! %ACTION{who=RikkiTikkiTavi,due=\"22-jul-2001\",notify=Mowgli\@\@there.com}% Text change \@ "); } - sub testNotablesInMain { - my $notify = {}; - ActionTrackerPlugin::ActionNotify::_gatherNotablesFromWeb("Main", $notify ); - Assert::sEquals($notify->{"Sam"}, "sam\@sesame.street.com"); - } - - sub testNotablesInTest { - my $notify = {}; - ActionTrackerPlugin::ActionNotify::_gatherNotablesFromWeb("Test", $notify ); - Assert::sEquals($notify->{"Fred"}, "fred\@sesame.street.com"); - } - - sub testAllNotables { - my $notify = {}; - ActionTrackerPlugin::ActionNotify::_gatherNotables($notify); - Assert::sEquals($notify->{"Sam"}, "sam\@sesame.street.com"); - Assert::sEquals($notify->{"Fred"}, "fred\@sesame.street.com"); - - my $address = ActionTrackerPlugin::ActionNotify::_getMailAddress("Fred", $notify); - Assert::sEquals($address, "fred\@sesame.street.com"); - $address = ActionTrackerPlugin::ActionNotify::_getMailAddress("Sam", $notify); - Assert::sEquals($address, "sam\@sesame.street.com"); - $address = ActionTrackerPlugin::ActionNotify::_getMailAddress("Joe", $notify); - Assert::sEquals($address, "joe\@sesame.street.com"); - $address = ActionTrackerPlugin::ActionNotify::_getMailAddress("TheWholeBunch", $notify); - Assert::sEquals($address, - "joe\@sesame.street.com,fred\@sesame.street.com,sam\@sesame.street.com,gunga-din\@war_lords-home.ind"); - } - sub testWholeShebang { # Do the whole shebang; the output generation is rather dependent on the # correct format of the template, however... ActionTrackerPlugin::ActionNotify::actionNotify( "late" ); ! Assert::equals(scalar(@TWiki::Net::sent), 3); ! my $html = shift(@TWiki::Net::sent); ! Assert::sContains($html, "From: mailsender"); ! Assert::sContains($html, "To: joe\@sesame.street.com,fred\@sesame.street.com,sam\@sesame.street.com,gunga-din\@war_lords-home.ind"); ! Assert::sContains($html, "Subject: Outstanding actions on mailsender"); ! Assert::htmlContains($html, "<table border=\"$ActionTrackerPlugin::Format::border\"><tr bgcolor=\"$ActionTrackerPlugin::Format::hdrcol\"><th> Assigned to </th><th> Due date </th><th> Description </th><th> State </th><th> </th></tr><tr valign=\"top\"><td> Main.TheWholeBunch </td><td bgcolor=\"$ActionTrackerPlugin::Format::latecol\"> Mon, 29 Jan 2001 (LATE) </td><td> [[Main.Topic2#AcTion2][ A4: Joe_open_ontime ]] </td><td> open </td><td> <a href=\"scripturl/edit.cgi/Main/Topic2?skin=action&action=AcTion2\">edit</a> </td></tr></table>"); ! Assert::sContains($html, "Action for Main.TheWholeBunch, due Mon, 29 Jan 2001 (LATE), open"); ! $html = shift(@TWiki::Net::sent); ! Assert::sContains($html, "From: mailsender"); ! Assert::sContains($html, "To: sam\@sesame.street.com"); ! Assert::sContains($html, "Subject: Outstanding actions on mailsender"); ! Assert::htmlContains($html, "<table border=\"$ActionTrackerPlugin::Format::border\"><tr bgcolor=\"$ActionTrackerPlugin::Format::hdrcol\"><th> Assigned to </th><th> Due date </th><th> Description </th><th> State </th><th> </th></tr><tr valign=\"top\"><td> Main.Sam </td><td bgcolor=\"$ActionTrackerPlugin::Format::latecol\"> Tue, 1 Jan 2002 (LATE) </td><td> [[Test.Topic1#AcTion0][ A0: Sam_open_late ]] </td><td> open </td><td> <a href=\"scripturl/edit.cgi/Test/Topic1?skin=action&action=AcTion0\">edit</a> </td></tr> ! </table>"); ! $html = shift(@TWiki::Net::sent); ! Assert::sContains($html, "From: mailsender"); ! Assert::sContains($html, "To: fred\@sesame.street.com"); ! Assert::sContains($html, "Subject: Outstanding actions on mailsender"); ! Assert::htmlContains($html, "<table border=\"$ActionTrackerPlugin::Format::border\"><tr bgcolor=\"$ActionTrackerPlugin::Format::hdrcol\"><th> Assigned to </th><th> Due date </th><th> Description </th><th> State </th><th> </th></tr><tr valign=\"top\"><td> Main.Fred </td><td bgcolor=\"$ActionTrackerPlugin::Format::latecol\"> Tue, 1 Jan 2002 (LATE) </td><td> [[Test.Topic2#AcTion0][ A1: Fred_open_ontime ]] </td><td> open </td><td> <a href=\"scripturl/edit.cgi/Test/Topic2?skin=action&action=AcTion0\">edit</a> </td></tr> ! </table>"); ! Assert::sContains($html, "Action for Main.Fred, due Tue, 1 Jan 2002 (LATE), open"); } sub testChangedSince { ActionTrackerPlugin::ActionNotify::actionNotify( "changedsince=\"1 dec 2001\"" ); ! my $html = shift(@TWiki::Net::sent); ! Assert::sContains($html, "From: mailsender"); ! Assert::sContains($html, "To: Mowgli\@there.com"); ! Assert::sContains($html, "Subject: Changes to actions on mailsender"); ! Assert::sContains($html, "Changes to actions since Sat Dec 1 00:00:00 2001"); ! Assert::htmlContains($html, "<tr><td>text</td><td> Text change</td><td> Text change from original</td></tr>"); ! Assert::sContains($html, "Action for Main.RikkiTikkiTavi, due Sun, 22 Jul 2001 (LATE), open\n"); ! Assert::sContains($html, "Attribute \"text\" changed, was \"Text change\", now \"Text change from original\""); ! ! $html = shift(@TWiki::Net::sent); ! Assert::sContains($html, "From: mailsender"); ! Assert::sContains($html, "To: RikkiTikkiTavi\@here.com"); ! Assert::sContains($html, "Subject: Changes to actions on mailsender"); ! Assert::sContains($html, "Changes to actions since Sat Dec 1 00:00:00 2001"); ! Assert::htmlContains($html, "<td> Main.Mowgli </td>"); ! Assert::htmlContains($html, "<tr><td>due</td><td>Fri, 22 Jun 2001 (LATE)</td><td>Sat, 22 Jun 2002</td></tr>"); ! Assert::equals(scalar(@TWiki::Net::sent), 0); } } --- 106,269 ---- a3 3 %META:TOPICINFO{author=\"guest\" date=\"1032811587\" format=\"1.0\" version=\"1.1\"}% ! %ACTION{who=ActorFive,due=\"22-jun-2001\",notify=Main.ActorFive}% A7: Date change ! %ACTION{who=\"Main.ActorFour\",due=\"22-jul-2001\",notify=ActorFive}% A8: Text change \@ "); } sub testWholeShebang { # Do the whole shebang; the output generation is rather dependent on the # correct format of the template, however... ActionTrackerPlugin::ActionNotify::actionNotify( "late" ); ! Assert::equals(scalar(@TWiki::Net::sent), 8); ! my $html; ! # Actor 1 - wikiname in main, not a member of any groups ! #actor-1\@an-address.net ! #A3 A6 ! # Actor 2 - wikiname in main and member of emailgroup only ! #actorTwo\@another-address.net ! #A3 A5 A6 ! # Actor 3 - wikiname in main and member of twikigroup only ! #actor3\@yet-another-address.net ! #A3 A4 A6 ! # Actor 4 - wikiname in main and member of emailgroup and twikigroup ! #actorfour\@yet-another-address.net ! #A3 A4 A5 A6 ! # Actor 5 - wikiname in main, address in Main.WebNotify ! #actor5\@correct.address ! #A3 A6 A7 ! # Actor 6 - wikiname in main and wrong address in Main.WebNotify ! #actor6\@correct-address ! #A3 A6 A8 ! # Actor 7 - email address on action line ! #actor.7\@seven.net ! #A3 A6 ! # Actor 8 - no topic in main, address in Test.WebNotify ! #actor-8\@correct.address ! #A3 A6 A8 ! ! # A1 - on time ! # A2 - closed ! # A3 - open, late ! # A4 - notify TWikiGroup ! # A5 - notify EMailGroup ! # A6 - notify everyone many times ! my $ok = ""; ! while ( $html = shift(@TWiki::Net::sent)) { ! Assert::assert($html !~ /A[1|2]/, $html); ! Assert::assert($html !~ /^To: (.*),/os); ! #$html =~ /To: (.*)/; ! #print STDERR "Shebang $1\n"; ! if ($html =~ /To: actor-1\@an-address\.net/) { ! Assert::assert($html =~ /A3:/,$html); ! Assert::assert($html !~ /A4:/,$html); ! Assert::assert($html !~ /A5:/,$html); ! Assert::assert($html =~ /A6:/,$html); ! $ok .= "A"; ! } elsif ($html =~ /To: actorTwo\@another-address\.net/) { ! Assert::assert($html =~ /A3:/,$html); ! Assert::assert($html !~ /A4:/,$html); ! Assert::assert($html =~ /A5:/,$html); ! Assert::assert($html =~ /A6:/,$html); ! $ok .= "B"; ! } elsif ($html =~ /To: actor3\@yet-another-address\.net/) { ! Assert::assert($html =~ /A3:/,$html); ! Assert::assert($html =~ /A4:/,$html); ! Assert::assert($html !~ /A5:/,$html); ! Assert::assert($html =~ /A6:/,$html); ! $ok .= "C"; ! } elsif ($html =~ /To: actorfour\@yet-another-address\.net/) { ! Assert::assert($html =~ /A3:/,$html); ! Assert::assert($html =~ /A4:/,$html); ! Assert::assert($html =~ /A5:/,$html); ! Assert::assert($html =~ /A6:/,$html); ! $ok .= "D"; ! } elsif ($html =~ /To: actor5\@correct.address/) { ! Assert::assert($html =~ /A3:/,$html); ! Assert::assert($html !~ /A4:/,$html); ! Assert::assert($html !~ /A5:/,$html); ! Assert::assert($html =~ /A6:/,$html); ! $ok .= "E"; ! } elsif ($html =~ /To: actor6\@correct-address/) { ! Assert::assert($html =~ /A3:/,$html); ! Assert::assert($html !~ /A4:/,$html); ! Assert::assert($html !~ /A5:/,$html); ! Assert::assert($html =~ /A6:/,$html); ! $ok .= "F"; ! } elsif ($html =~ /To: actor\.7\@seven\.net/) { ! Assert::assert($html =~ /A3:/,$html); ! Assert::assert($html !~ /A4:/,$html); ! Assert::assert($html !~ /A5:/,$html); ! Assert::assert($html =~ /A6:/,$html); ! $ok .= "G"; ! } elsif ($html =~ /To: actor-8\@correct\.address/) { ! Assert::assert($html =~ /A3:/,$html); ! Assert::assert($html !~ /A4:/,$html); ! Assert::assert($html !~ /A5:/,$html); ! Assert::assert($html =~ /A6:/,$html); ! $ok .= "H"; ! } else { ! Assert::assert(0, $html); ! } ! } ! Assert::equals(length($ok),8); ! Assert::sContains($ok, "A"); ! Assert::sContains($ok, "B"); ! Assert::sContains($ok, "C"); ! Assert::sContains($ok, "D"); ! Assert::sContains($ok, "E"); ! Assert::sContains($ok, "F"); ! Assert::sContains($ok, "G"); ! Assert::sContains($ok, "H"); } + #actor5\@correct.address + #A3 A6 A7 + # Actor 6 - wikiname in main and wrong address in Main.WebNotify + #actor6\@correct-address + #A3 A6 A8 + # Actor 8 - no topic in main, address in Test.WebNotify + #actor-8\@correct.address + #A3 A6 A8 sub testChangedSince { ActionTrackerPlugin::ActionNotify::actionNotify( "changedsince=\"1 dec 2001\"" ); ! Assert::equals(scalar(@TWiki::Net::sent), 3); ! my %saw; ! while( $html = shift(@TWiki::Net::sent) ) { ! Assert::sContains($html, "From: mailsender"); ! Assert::sContains($html, "Subject: Changes to actions on mailsender"); ! if ($html=~ /To: actor5\@correct.address/) { ! Assert::sContains($html, "Subject: Changes to actions on mailsender"); ! Assert::sContains($html, "Changes to actions since Sat Dec 1 00:00:00 2001"); ! Assert::sContains($html, "Attribute \"due\" changed, was \"Fri, 22 Jun 2001 (LATE)\", now \"Sat, 22 Jun 2002\""); ! $saw{1} = 1; ! } elsif ($html =~ /To: actor6\@correct-address/) { ! Assert::assert($html !~ /A3:/,$html); ! Assert::assert($html !~ /A4:/,$html); ! Assert::assert($html !~ /A5:/,$html); ! Assert::assert($html !~ /A6:/,$html); ! Assert::assert($html !~ /A7:/,$html); ! Assert::assert($html =~ /A8:/,$html); ! Assert::sContains($html, "Attribute \"text\" changed, was \"A8: Text change\", now \"A8: Text change from original\""); ! Assert::htmlContains($html, "<tr><td>text</td><td> A8: Text change</td><td> A8: Text change from original</td></tr>"); ! $saw{2} = 1; ! } elsif ($html =~ /To: actor-8\@correct.address/) { ! Assert::assert($html !~ /A3:/,$html); ! Assert::assert($html !~ /A4:/,$html); ! Assert::assert($html !~ /A5:/,$html); ! Assert::assert($html !~ /A6:/,$html); ! Assert::assert($html !~ /A7:/,$html); ! Assert::assert($html =~ /A8:/,$html); ! Assert::sContains($html, "Attribute \"text\" changed, was \"A8: Text change\", now \"A8: Text change from original\""); ! Assert::htmlContains($html, "<tr><td>text</td><td> A8: Text change</td><td> A8: Text change from original</td></tr>"); ! $saw{3} = 1; ! } else { ! Assert::assert(0, "Not good $html"); ! } ! } ! Assert::assert($saw{1} == 1,"Arg"); ! Assert::assert($saw{2} == 1,"Arrgh"); ! Assert::assert($saw{3} == 1,"Aaaaaargh"); } } |
From: <cra...@us...> - 2003-05-09 01:04:03
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv16655/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin Modified Files: Action.pm Log Message: Fixes for problems reported by Petric Frank Index: Action.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/Action.pm,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** Action.pm 4 May 2003 13:10:53 -0000 1.4 --- Action.pm 8 May 2003 20:54:05 -0000 1.5 *************** *** 61,65 **** # is defined 'nomatch' then the attribute will be ignored in match # expressions. ! my %types = ( changedsince => --- 61,65 ---- # is defined 'nomatch' then the attribute will be ignored in match # expressions. ! my %basetypes = ( changedsince => *************** *** 115,119 **** new ActionTrackerPlugin::AttrDef( 'ignore', 0, 0, 0, undef ), ); ! # PUBLIC Constructor sub new { --- 115,121 ---- new ActionTrackerPlugin::AttrDef( 'ignore', 0, 0, 0, undef ), ); ! ! my %types = %basetypes; ! # PUBLIC Constructor sub new { *************** *** 162,169 **** --- 164,175 ---- $this->{topic} = $topic; $this->{ACTION_NUMBER} = $number; + $descr =~ s/^\s+//o; $descr =~ s/\s+$//o; + + # Translate newlines in the description to XHTML tags $descr =~ s/\n\n/<p \/>/gos; $descr =~ s/\n/<br \/>/gos; + $this->{text} = $descr; *************** *** 206,209 **** --- 212,226 ---- } + sub unextendTypes { + %types = %basetypes; + } + + # STATIC Debug only + sub dumpTypes { + foreach my $key ( keys %types ) { + print STDERR "$key ", $types{$key}->toString(), "\n"; + } + } + # PUBLIC get the base type of an attribute name i.e. # with the formatting attributes stripped off. *************** *** 211,215 **** my $vbl = shift; my $type = $types{$vbl}; ! return $type->{type} if ( defined( $type ) ); return undef; } --- 228,234 ---- my $vbl = shift; my $type = $types{$vbl}; ! if ( defined( $type ) ) { ! return $type->{type}; ! } return undef; } *************** *** 239,250 **** } if ( !defined( $this->{created} )) { $this->{created} = $now; - $this->{creator} = $me; } ! if ( $this->{state} eq "closed" && !defined( $this->{closed} )) { ! $this->{closed} = $now; ! $this->{closer} = $me; } } --- 258,280 ---- } + if ( !defined( $this->{due} )) { + $this->{due} = $now; + } + + if ( !defined( $this->{creator} )) { + $this->{creator} = $me; + } + if ( !defined( $this->{created} )) { $this->{created} = $now; } ! if ( $this->{state} eq "closed" ) { ! if ( !defined( $this->{closer} )) { ! $this->{closer} = $me; ! } ! if ( !defined( $this->{closed} )) { ! $this->{closed} = $now; ! } } } *************** *** 278,285 **** my $who = shift; ! return undef if !defined( $who ); if ( $who !~ /([A-Za-z0-9\.\+\-\_]+\@[A-Za-z0-9\.\-]+)/ ) { ! $who = TWiki::Func::getWikiName() if ( $who eq "me" ); ! $who = "$mainweb.$who" unless $who =~ /\./o; } return $who; --- 308,321 ---- my $who = shift; ! if ( !defined( $who )) { ! return undef; ! } if ( $who !~ /([A-Za-z0-9\.\+\-\_]+\@[A-Za-z0-9\.\-]+)/ ) { ! if ( $who eq "me" ) { ! $who = TWiki::Func::getWikiName(); ! } ! if ( $who !~ /\./o ) { ! $who = "$mainweb.$who"; ! } } return $who; *************** *** 327,341 **** } - # PUBLIC due time, as a date string - sub dueString { - my $this = shift; - return formatTime( $this->{due}, "string" ); - } - # PUBLIC return number of seconds to go before due date, negative if action # is late sub secsToGo { my $this = shift; ! $now = time() unless ( defined( $now ) ); if ( defined( $this->{due} )) { return $this->{due} - $now; --- 363,373 ---- } # PUBLIC return number of seconds to go before due date, negative if action # is late sub secsToGo { my $this = shift; ! if ( !defined( $now )) { ! $now = time(); ! } if ( defined( $this->{due} )) { return $this->{due} - $now; *************** *** 360,365 **** sub isLate { my $this = shift; ! return 0 if ( $this->{state} eq "closed" ); ! return ( ($this->{due} - $now) <= 0 ); } --- 392,399 ---- sub isLate { my $this = shift; ! if ( $this->{state} eq "closed" ) { ! return 0; ! } ! return ( ($this->{due} - $now) < 0 ); } *************** *** 369,377 **** sub _matchType_names { my ( $this, $vbl, $val ) = @_; ! return 0 unless defined( $this->{$vbl} ); foreach my $name ( split( /\s*,\s*/, $val )) { my $who = _canonicalName( $name ); $who =~ s/\./\\./go; ! return 1 if ( $this->{$vbl} =~ /$who/ ); } return 0; --- 403,415 ---- sub _matchType_names { my ( $this, $vbl, $val ) = @_; ! if ( !defined( $this->{$vbl} )) { ! return 0; ! } foreach my $name ( split( /\s*,\s*/, $val )) { my $who = _canonicalName( $name ); $who =~ s/\./\\./go; ! if ( $this->{$vbl} =~ /$who/ ) { ! return 1; ! } } return 0; *************** *** 423,438 **** # function match my $fn = "_matchField_$attrName"; ! return 0 unless ( $this->$fn( $attrVal )); } elsif ( defined( $attrType ) && defined( &{$class."::_matchType_$attrType"} ) ) { my $fn = "_matchType_$attrType"; ! return 0 unless ( $this->$fn( $attrName, $attrVal )); ! } elsif ( defined( $attrType ) && ! $attrType =~ m/nomatch/o ) { ! # do nothing } elsif ( defined( $attrVal ) && defined( $this->{$attrName} ) ) { # re match ! return 0 unless ( $this->{$attrName} =~ m/$attrVal/ ); } else { return 0; --- 461,479 ---- # function match my $fn = "_matchField_$attrName"; ! if ( !$this->$fn( $attrVal )) { ! return 0; ! } } elsif ( defined( $attrType ) && defined( &{$class."::_matchType_$attrType"} ) ) { my $fn = "_matchType_$attrType"; ! if ( !$this->$fn( $attrName, $attrVal )) { ! return 0; ! } } elsif ( defined( $attrVal ) && defined( $this->{$attrName} ) ) { # re match ! if ( $this->{$attrName} !~ m/$attrVal/ ) { ! return 0; ! } } else { return 0; *************** *** 452,456 **** # date formatting) sub _formatField_due { ! my $this = shift; my $bgcol = 0; my $text = formatTime( $this->{due}, "string" ); --- 493,497 ---- # date formatting) sub _formatField_due { ! my ( $this, $asHTML ) = @_; my $bgcol = 0; my $text = formatTime( $this->{due}, "string" ); *************** *** 460,464 **** } elsif ( $this->isLate() ) { $bgcol = $ActionTrackerPlugin::Format::latecol; ! $text .= " (LATE)"; } --- 501,507 ---- } elsif ( $this->isLate() ) { $bgcol = $ActionTrackerPlugin::Format::latecol; ! if ( !$asHTML ) { ! $text .= " (LATE)"; ! } } *************** *** 490,494 **** my ( $this, $asHTML, $type, $newWindow ) = @_; ! return "" unless ( $asHTML ); my $url = "%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/" . --- 533,540 ---- my ( $this, $asHTML, $type, $newWindow ) = @_; ! if ( !$asHTML ) { ! # Can't edit from plain text ! return ""; ! } my $url = "%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/" . *************** *** 507,511 **** my ( $this, $asHTML ) = @_; my $uid = $this->{uid}; ! return "<nop>$uid" if ( $asHTML ); return ( $uid, 0 ); } --- 553,559 ---- my ( $this, $asHTML ) = @_; my $uid = $this->{uid}; ! if ( $asHTML ) { ! return "<nop>$uid"; ! } return ( $uid, 0 ); } *************** *** 525,532 **** my $sum = 0; ! return 100 if ( defined( $this->{uid} ) && ! "$this->{uid}" eq "$old->{uid}" ); ! return 0 if ( defined( $this->{uid} ) && ! "$this->{uid}" ne "$old->{uid}" ); # identical text --- 573,582 ---- my $sum = 0; ! if ( defined( $this->{uid} )) { ! if ( defined( $old->{uid} ) && $this->{uid} eq $old->{uid} ) { ! return 100; ! } ! return 0; ! } # identical text *************** *** 536,546 **** $sum += _partialMatch( $old->{text}, $this->{text} ) * 4; } ! $sum += 3 if ( $this->{ACTION_NUMBER} == $old->{ACTION_NUMBER} ); ! $sum += 2 if ( defined( $this->{notify} ) && defined( $old->{notify} ) && ! $this->{notify} eq $old->{notify} ); ! $sum += 2 if ( defined( $this->{who} ) && ! $this->{who} eq $old->{who} ); ! $sum += 1 if ( $this->{due} == $old->{due} ); ! $sum += 1 if ( $this->{state} eq $old->{state} ); return $sum; --- 586,606 ---- $sum += _partialMatch( $old->{text}, $this->{text} ) * 4; } ! if ( $this->{ACTION_NUMBER} == $old->{ACTION_NUMBER} ) { ! $sum += 3; ! } ! if ( defined( $this->{notify} ) && defined( $old->{notify} ) && ! $this->{notify} eq $old->{notify} ) { ! $sum += 2; ! } ! if ( defined( $this->{who} ) && ! $this->{who} eq $old->{who} ) { ! $sum += 2; ! } ! if ( $this->{due} == $old->{due} ) { ! $sum += 1; ! } ! if ( $this->{state} eq $old->{state} ) { ! $sum += 1; ! } return $sum; *************** *** 580,587 **** my ( $this, $old, $format, $notifications ) = @_; ! return 0 if ( !$this->{notify} ); my $changes = $format->formatChangesAsString( $old, $this ); ! return 0 if ( $changes eq "" ); my $plain_text = $format->formatStringTable( [ $this ] ); --- 640,651 ---- my ( $this, $old, $format, $notifications ) = @_; ! if ( !$this->{notify} ) { ! return 0; ! } my $changes = $format->formatChangesAsString( $old, $this ); ! if ( $changes eq "" ) { ! return 0; ! } my $plain_text = $format->formatStringTable( [ $this ] ); *************** *** 658,662 **** if ( $attrname ne 'text' && $type->{type} ne 'ignore' ) { my $val = $query->param( $attrname ); ! $attrs .= " $attrname=\"$val\"" if ( defined( $val )); } } --- 722,728 ---- if ( $attrname ne 'text' && $type->{type} ne 'ignore' ) { my $val = $query->param( $attrname ); ! if ( defined( $val )) { ! $attrs .= " $attrname=\"$val\""; ! } } } |
From: <cra...@us...> - 2003-05-09 01:00:23
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test In directory sc8-pr-cvs1:/tmp/cvs-serv17777/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test Added Files: ExtendedActionSetTests.pm README.txt Log Message: Fixes for problems reported by Petric Frank --- NEW FILE: ExtendedActionSetTests.pm --- # Tests for module ActionSet.pm use lib ('fakewiki'); use lib ('../../../..'); use TWiki::Plugins::ActionTrackerPlugin::Action; use TWiki::Plugins::ActionTrackerPlugin::ActionSet; use TWiki::Plugins::ActionTrackerPlugin::Attrs; use TWiki::Plugins::ActionTrackerPlugin::Format; use Assert; use TWiki::TestMaker; use TWiki::Func; # tests of actionset when action fields have been extended { package ExtendedActionSetTests; my $actions; # Build the fixture sub setUp { TWiki::TestMaker::init("ActionTrackerPlugin"); ActionTrackerPlugin::Action::forceTime("2 Jan 2002"); ActionTrackerPlugin::Action::extendTypes("|ap,text,12|"); $actions = new ActionTrackerPlugin::ActionSet(); $action = new ActionTrackerPlugin::Action("Test", "Topic", 0, "who=A,due=1-Jan-02,open", "Test_Main_A_open_late"); $actions->add($action); $action = new ActionTrackerPlugin::Action("Test", "Topic", 1, "ap=1 who=Main.A,due=1-Jan-02,closed=1-dec-01", "Test_Main_A_closed_ontime"); $actions->add($action); $action = new ActionTrackerPlugin::Action("Test", "Topic", 2, "ap=2 who=Blah.B,due=\"29 Jan 2010\",open", "Test_Blah_B_open_ontime"); $actions->add($action); } sub tearDown { ActionTrackerPlugin::Action::unextendTypes(); } sub testSort { my $chosen = $actions->search("state=open sort=\"\$ap,\$due\""); my $fmt = new ActionTrackerPlugin::Format("|AP|","|\$ap|","\$ap"); my $s = $chosen->formatAsString($fmt); Assert::sEquals($s,"2\n\$ap\n"); } } 1; --- NEW FILE: README.txt --- The test module has a number of modules and entry points. Each module is a test class in the spirit of JUnit, and contains a set of test functions that address a specific piece of functionality, usually one of the main perl modules. The modules can be run independently using perl -w <module>.pl for example perl -w ActionTests.pl. The submodule directory 'faketwiki' fakes the functions of a TWiki and is used to build test fixtures. It is a long way from implementing the full functionality of TWiki! This all ought to be converted to use PerlUnit. |
From: <cra...@us...> - 2003-05-09 00:43:05
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/bin In directory sc8-pr-cvs1:/tmp/cvs-serv16655/ActionTrackerPlugin/bin Modified Files: actionnotify Log Message: Fixes for problems reported by Petric Frank Index: actionnotify =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/bin/actionnotify,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** actionnotify 27 Apr 2003 18:02:41 -0000 1.2 --- actionnotify 8 May 2003 20:54:04 -0000 1.3 *************** *** 21,25 **** my $attrs = join( ',', @ARGV ); ! ActionNotify::actionNotify( $attrs ); 1; --- 21,25 ---- my $attrs = join( ',', @ARGV ); ! ActionTrackerPlugin::ActionNotify::actionNotify( $attrs ); 1; |
From: <cra...@us...> - 2003-05-09 00:32:37
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test In directory sc8-pr-cvs1:/tmp/cvs-serv17506/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test Modified Files: FileActionSetTests.pm LiveActionSetTests.pm Log Message: Fixes for problems reported by Petric Frank Index: FileActionSetTests.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/FileActionSetTests.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** FileActionSetTests.pm 4 May 2003 13:13:37 -0000 1.1 --- FileActionSetTests.pm 8 May 2003 20:55:48 -0000 1.2 *************** *** 2,10 **** use lib ('fakewiki'); use lib ('../../../..'); ! use lib ('../../../../TWiki/Plugins'); ! use ActionTrackerPlugin::Action; ! use ActionTrackerPlugin::ActionSet; ! use ActionTrackerPlugin::Attrs; ! use ActionTrackerPlugin::Format; use Assert; use TWiki::TestMaker; --- 2,9 ---- use lib ('fakewiki'); use lib ('../../../..'); ! use TWiki::Plugins::ActionTrackerPlugin::Action; ! use TWiki::Plugins::ActionTrackerPlugin::ActionSet; ! use TWiki::Plugins::ActionTrackerPlugin::Attrs; ! use TWiki::Plugins::ActionTrackerPlugin::Format; use Assert; use TWiki::TestMaker; Index: LiveActionSetTests.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/LiveActionSetTests.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** LiveActionSetTests.pm 4 May 2003 13:13:37 -0000 1.1 --- LiveActionSetTests.pm 8 May 2003 20:55:48 -0000 1.2 *************** *** 2,10 **** use lib ('fakewiki'); use lib ('../../../..'); ! use lib ('../../../../TWiki/Plugins'); ! use ActionTrackerPlugin::Action; ! use ActionTrackerPlugin::ActionSet; ! use ActionTrackerPlugin::Attrs; ! use ActionTrackerPlugin::Format; use Assert; use TWiki::TestMaker; --- 2,9 ---- use lib ('fakewiki'); use lib ('../../../..'); ! use TWiki::Plugins::ActionTrackerPlugin::Action; ! use TWiki::Plugins::ActionTrackerPlugin::ActionSet; ! use TWiki::Plugins::ActionTrackerPlugin::Attrs; ! use TWiki::Plugins::ActionTrackerPlugin::Format; use Assert; use TWiki::TestMaker; *************** *** 89,99 **** # Make sure they are sorted correctly ! #%ACTION{who=E,due=\"29 Jan 2001\",open}% Main_Topic2_E_open_ontime"); ! #%ACTION{who=A,due=\"1 Jan 02\",open}% Test_Topic2_A_open_late"); ! #%ACTION{who=Main.A,due=\"1 Jan 02\",closed}% Main_Topic2_A_closed_ontime ! #%ACTION{who=Main.C,due=\"16 Dec 02\",open}% Test_Topic1_C_open_ontime ! #%ACTION{who=B,due=\"29 Jan 2010\",open}% Main_Topic2_B_open_ontime ! Assert::assert($chosen =~ /Main_Topic2_E_open_ontime.*Test_Topic2_A_open_late.*Main_Topic2_A_closed_ontime.*Test_Topic1_C_open_ontime.*Main_Topic2_B_open_ontime/so); } --- 88,98 ---- # Make sure they are sorted correctly ! #%ACTION{who=E,due=\"29 Jan 2001\",open}% Main_Topic2_E_open_ontime"); ! #%ACTION{who=A,due=\"1 Jan 02\",open}% Test_Topic2_A_open_late"); ! #%ACTION{who=Main.A,due=\"1 Jan 02\",closed}% Main_Topic2_A_closed_ontime ! #%ACTION{who=Main.C,due=\"16 Dec 02\",open}% Test_Topic1_C_open_ontime ! #%ACTION{who=B,due=\"29 Jan 2010\",open}% Main_Topic2_B_open_ontime ! Assert::assert($chosen =~ /Main_Topic2_E_open_ontime.*Test_Topic2_A_open_late.*Main_Topic2_A_closed_ontime.*Test_Topic1_C_open_ontime.*Main_Topic2_B_open_ontime/so, $chosen); } |
From: <cra...@us...> - 2003-05-09 00:26:46
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv17014/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin Modified Files: AttrDef.pm Log Message: Fixes for problems reported by Petric Frank Index: AttrDef.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/AttrDef.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** AttrDef.pm 4 May 2003 13:12:35 -0000 1.1 --- AttrDef.pm 8 May 2003 20:54:35 -0000 1.2 *************** *** 56,60 **** my $this = shift; ! return $this->{candef} == 1; } } --- 56,60 ---- my $this = shift; ! return $this->{defineable} == 1; } } |
From: <cra...@us...> - 2003-05-09 00:26:32
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv17079/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin Modified Files: Format.pm Log Message: Fixes for problems reported by Petric Frank Index: Format.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/Format.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** Format.pm 4 May 2003 13:11:28 -0000 1.2 --- Format.pm 8 May 2003 20:54:56 -0000 1.3 *************** *** 261,264 **** --- 261,267 ---- } + # PRIVATE generate an HTML table from a 2D-array of rows and + # a, optional list of anchors, one for each row. The anchors + # are more useful if the table is oriented as rows. sub _generateHTMLTable { my ( $this, $rows, $anchors ) = @_; *************** *** 310,318 **** $text .= "$horzrow\n"; } ! return "$text\n"; } ! # PUBLIC Get the changes in the change fields between the old object and ! # the new object. sub formatChangesAsHTML { my ( $this, $old, $new ) = @_; --- 313,321 ---- $text .= "$horzrow\n"; } ! return $text; } ! # PUBLIC Get the changes in the selected change fields between ! # the old object and the new object. sub formatChangesAsHTML { my ( $this, $old, $new ) = @_; *************** *** 413,418 **** foreach my $option ( @{$type->{values}} ) { $field .= "<OPTION NAME=\"$option\""; ! if ( defined( $this->{$attrname} ) && ! $this->{$attrname} eq $option ) { $field .= " SELECTED"; } --- 416,421 ---- foreach my $option ( @{$type->{values}} ) { $field .= "<OPTION NAME=\"$option\""; ! if ( defined( $object->{$attrname} ) && ! $object->{$attrname} eq $option ) { $field .= " SELECTED"; } |
From: <cra...@us...> - 2003-05-09 00:09:29
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test In directory sc8-pr-cvs1:/tmp/cvs-serv17275/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test Modified Files: ActionSetTests.pl ActionTests.pm Log Message: Fixes for problems reported by Petric Frank Index: ActionSetTests.pl =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/ActionSetTests.pl,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ActionSetTests.pl 4 May 2003 13:11:37 -0000 1.3 --- ActionSetTests.pl 8 May 2003 20:55:18 -0000 1.4 *************** *** 5,12 **** --- 5,14 ---- use FileActionSetTests; use LiveActionSetTests; + use ExtendedActionSetTests; Assert::runTests("SimpleActionSetTests"); Assert::runTests("FileActionSetTests"); Assert::runTests("LiveActionSetTests"); + Assert::runTests("ExtendedActionSetTests"); 1; Index: ActionTests.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/ActionTests.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ActionTests.pm 4 May 2003 13:13:00 -0000 1.1 --- ActionTests.pm 8 May 2003 20:55:18 -0000 1.2 *************** *** 3,10 **** use lib ('.'); use lib ('../../../..'); ! use lib ('../../../../TWiki/Plugins'); ! use ActionTrackerPlugin::Action; ! use ActionTrackerPlugin::Format; ! use ActionTrackerPlugin::Attrs; use Assert; use Time::ParseDate; --- 3,9 ---- use lib ('.'); use lib ('../../../..'); ! use TWiki::Plugins::ActionTrackerPlugin::Action; ! use TWiki::Plugins::ActionTrackerPlugin::Format; ! use TWiki::Plugins::ActionTrackerPlugin::Attrs; use Assert; use Time::ParseDate; *************** *** 70,82 **** } sub testMatches { my $action = new ActionTrackerPlugin::Action( "Test", "Topic", 0, ! "who=\"JohnDoe,SlyStallone\" due=\"2 Jun 02\" state=open notify=\"SamPeckinpah,QuentinTarantino\" created=\"1 Jan 1999\" creator=\"ThomasMoore\"", "A new action"); my $attrs = new ActionTrackerPlugin::Attrs("who=JohnDoe"); ! Assert::assert($action->matches($attrs)); $attrs = new ActionTrackerPlugin::Attrs("who=Main.JohnDoe"); Assert::assert($action->matches($attrs)); $attrs = new ActionTrackerPlugin::Attrs("who=JohnSmith"); Assert::assert(!$action->matches($attrs)); --- 69,91 ---- } + sub testCommas { + my $action = + new ActionTrackerPlugin::Action( "Test", "Topic", 0, + "who=\"JohnDoe,SlyStallone\",due=\"2 Jun 02\",notify=\"SamPeckinpah,QuentinTarantino\",creator=\"ThomasMoore\"", "Sod"); + Assert::sEquals($action->{who},"Main.JohnDoe,Main.SlyStallone"); + Assert::sEquals($action->{notify},"Main.SamPeckinpah,Main.QuentinTarantino"); + } + sub testMatches { my $action = new ActionTrackerPlugin::Action( "Test", "Topic", 0, ! "who=\"JohnDoe,SlyStallone,TestRunner\" due=\"2 Jun 02\" state=open notify=\"SamPeckinpah,QuentinTarantino\" created=\"1 Jan 1999\" creator=\"ThomasMoore\"", "A new action"); my $attrs = new ActionTrackerPlugin::Attrs("who=JohnDoe"); ! Assert::assert($action->matches($attrs),$attrs->toString()); $attrs = new ActionTrackerPlugin::Attrs("who=Main.JohnDoe"); Assert::assert($action->matches($attrs)); + $attrs = new ActionTrackerPlugin::Attrs("who=me"); + Assert::assert($action->matches($attrs)); $attrs = new ActionTrackerPlugin::Attrs("who=JohnSmith"); Assert::assert(!$action->matches($attrs)); *************** *** 156,160 **** # now again, only closed ! $action = new ActionTrackerPlugin::Action( "Test", "Topic", 0, "who=\"JohnDoe,SlyStallone\" due=\"2 Jun 02\" closed=\"2 Dec 00\" closer=\"Death\" notify=\"SamPeckinpah,QuentinTarantino\" created=\"1 Jan 1999\" creator=\"ThomasMoore\"", "A new action"); $attrs = new ActionTrackerPlugin::Attrs("closed"); Assert::assert($action->matches($attrs)); --- 165,169 ---- # now again, only closed ! $action = new ActionTrackerPlugin::Action( "Test", "Topic", 0, "who=\"JohnDoe,SlyStallone\",due=\"2 Jun 02\" closed=\"2 Dec 00\" closer=\"Death\" notify=\"SamPeckinpah,QuentinTarantino\" created=\"1 Jan 1999\" creator=\"ThomasMoore\"", "A new action"); $attrs = new ActionTrackerPlugin::Attrs("closed"); Assert::assert($action->matches($attrs)); *************** *** 167,173 **** sub testStringFormattingOpen { my $action = new ActionTrackerPlugin::Action( "Test", "Topic", 0, "who=\"JohnDoe\" due=\"2 Jun 02\" state=open notify=\"SamPeckinpah,QuentinTarantino\" created=\"1 Jan 1999\" creator=\"ThomasMoore\"", "A new action"); ! my $fmt = new ActionTrackerPlugin::Format("","","Who: \$who \$who\n"); my $s = $fmt->formatStringTable([$action]); ! Assert::sEquals($s, "Who: Main.JohnDoe Main.JohnDoe\n"); $fmt = new ActionTrackerPlugin::Format("","","Due: \$due\n"); # make it late --- 176,182 ---- sub testStringFormattingOpen { my $action = new ActionTrackerPlugin::Action( "Test", "Topic", 0, "who=\"JohnDoe\" due=\"2 Jun 02\" state=open notify=\"SamPeckinpah,QuentinTarantino\" created=\"1 Jan 1999\" creator=\"ThomasMoore\"", "A new action"); ! my $fmt = new ActionTrackerPlugin::Format("|Who|Due|","|\$who|","Who: \$who \$who\n","\$who,\$due","vertical"); my $s = $fmt->formatStringTable([$action]); ! Assert::sEquals($s, "Who: Main.JohnDoe Main.JohnDoe\n",$fmt->toString()); $fmt = new ActionTrackerPlugin::Format("","","Due: \$due\n"); # make it late *************** *** 242,246 **** $s = $fmt->formatHTMLTable([$action], "href", 0); Assert::sContains($s, ! "<td bgcolor=\"yellow\"> Sun, 2 Jun 2002 (LATE) </td>"); # make it ontime ActionTrackerPlugin::Action::forceTime("1 Jun 2002"); --- 251,255 ---- $s = $fmt->formatHTMLTable([$action], "href", 0); Assert::sContains($s, ! "<td bgcolor=\"yellow\"> Sun, 2 Jun 2002 </td>"); # make it ontime ActionTrackerPlugin::Action::forceTime("1 Jun 2002"); *************** *** 301,305 **** my $action = new ActionTrackerPlugin::Action( "Test", "Topic", 7, ! "due=\"2 Jun 02\" state=closed", "A new action"); ActionTrackerPlugin::Action::forceTime("31 May 2002"); my $tim = Time::ParseDate::parsedate("31 May 2002"); --- 310,314 ---- my $action = new ActionTrackerPlugin::Action( "Test", "Topic", 7, ! "state=closed", "A new action"); ActionTrackerPlugin::Action::forceTime("31 May 2002"); my $tim = Time::ParseDate::parsedate("31 May 2002"); *************** *** 316,319 **** --- 325,335 ---- $s = $fmt->formatStringTable([$action]); Assert::sEquals($s, "|Main.TestRunner|Fri, 31 May 2002|"); + $action = + new ActionTrackerPlugin::Action( "Test", "Topic", 8, + "who=me", "action"); + $action->populateMissingFields(); + $fmt = new ActionTrackerPlugin::Format("","","|\$who|\$due|"); + $s = $fmt->formatStringTable([$action]); + Assert::sEquals($s, "|Main.TestRunner|Fri, 31 May 2002|"); } *************** *** 457,460 **** --- 473,485 ---- $attrs = ActionTrackerPlugin::Attrs->new("sentence=\"\\d+ years\""); Assert::assert($action->matches($attrs)); + + $s = ActionTrackerPlugin::Action::extendTypes("|state,select,17,life,\"5 years\",\"community service\"|"); + Assert::assert(!defined($s),$s); + ActionTrackerPlugin::Action::unextendTypes(); + $s = ActionTrackerPlugin::Action::extendTypes("|who,text,17|"); + Assert::sEquals($s,"Attempt to redefine attribute 'who' in EXTRAS" ); + $s = ActionTrackerPlugin::Action::extendTypes("|fleegle|"); + Assert::sEquals($s,"Bad EXTRAS definition 'fleegle' in EXTRAS" ); + ActionTrackerPlugin::Action::unextendTypes(); } *************** *** 528,532 **** $s =~ s/<td><input type=\"text\" name=\"$n\" value=\"(.*?)\" size=\"(.*?)\/><\/td>//gim; } ! Assert::assert($s =~ s/<td><SELECT NAME=\"state\" SIZE=\"1\"><OPTION NAME=\"open\">open<\/OPTION><OPTION NAME=\"closed\">closed<\/OPTION><\/SELECT><\/td>//om); Assert::assert($s =~ s/<table border=\"1\">//mo); $s =~ s/<tr( bgcolor=\"orange\")?>//gom; --- 553,557 ---- $s =~ s/<td><input type=\"text\" name=\"$n\" value=\"(.*?)\" size=\"(.*?)\/><\/td>//gim; } ! Assert::assert($s =~ s/<td><SELECT NAME=\"state\" SIZE=\"1\"><OPTION NAME=\"open\" SELECTED>open<\/OPTION><OPTION NAME=\"closed\">closed<\/OPTION><\/SELECT><\/td>//om); Assert::assert($s =~ s/<table border=\"1\">//mo); $s =~ s/<tr( bgcolor=\"orange\")?>//gom; |
From: <cra...@us...> - 2003-05-09 00:09:26
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test In directory sc8-pr-cvs1:/tmp/cvs-serv17432/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test Modified Files: ActionTrackerPluginTests.pm Assert.pm Log Message: Fixes for problems reported by Petric Frank Index: ActionTrackerPluginTests.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/ActionTrackerPluginTests.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** ActionTrackerPluginTests.pm 4 May 2003 13:13:12 -0000 1.1 --- ActionTrackerPluginTests.pm 8 May 2003 20:55:33 -0000 1.2 *************** *** 2,8 **** use lib ('fakewiki'); use lib ('../../../..'); ! use lib ('../../../../TWiki/Plugins'); ! use ActionTrackerPlugin; ! use lib ('.'); use Assert; use TWiki::TestMaker; --- 2,6 ---- use lib ('fakewiki'); use lib ('../../../..'); ! use TWiki::Plugins::ActionTrackerPlugin; use Assert; use TWiki::TestMaker; *************** *** 76,80 **** sub testActionSearchFormat { my $chosen = TWiki::Plugins::ActionTrackerPlugin::handleActionSearch("Main", "web=\".*\" who=Sam header=\"|Who|Due|\" format=\"|\$who|\$due|\""); ! Assert::sEquals($chosen, "<table border=\"1\"><tr bgcolor=\"orange\"><th>Who</th><th>Due</th></tr><tr valign=\"top\"><td>Main.Sam</td><td bgcolor=\"yellow\">Thu, 3 Jan 2002 (LATE)</td></tr></table>"); } --- 74,78 ---- sub testActionSearchFormat { my $chosen = TWiki::Plugins::ActionTrackerPlugin::handleActionSearch("Main", "web=\".*\" who=Sam header=\"|Who|Due|\" format=\"|\$who|\$due|\""); ! Assert::sEquals($chosen, "<table border=\"1\"><tr bgcolor=\"orange\"><th>Who</th><th>Due</th></tr><tr valign=\"top\"><td>Main.Sam</td><td bgcolor=\"yellow\">Thu, 3 Jan 2002</td></tr></table>"); } *************** *** 126,138 **** text $tblhdr". action("AcTion2","Main.ActorThree",undef,"Sun, 11 Mar 2001","The *world* is flat","closed"). ! action("AcTion3","Main.ActorFour",$ActionTrackerPlugin::Format::latecol,"Sun, 11 Mar 2001 (LATE)","_Late_ the late great *date*","open"). ! action("AcTion4","Main.ActorFiveVeryLongNameBecauseItsATest",$ActionTrackerPlugin::Format::latecol,"Wed, 13 Feb 2002 (LATE)","This is an action with a lot of associated text to test <br /> * the VingPazingPoodleFactor, <br /> * when large actions get edited by the edit button.<br /> * George Bush is a brick.<br /> * Who should really be built<br /> * Into a very high wall.","open"). action("AcTion5","Main.ActorSix",$ActionTrackerPlugin::Format::badcol,"BAD DATE FORMAT see Plugins.ActionTrackerPlugin#DateFormats","Bad date","open")."</table> break the table here $tblhdr". ! action("AcTion6","Main.ActorSeven",$ActionTrackerPlugin::Format::latecol,"Tue, 1 Jan 2002 (LATE)","Create the mailer, %USERNAME%","open")."</table> * A list * $tblhdr". ! action("AcTion7","Main.ActorEight","yellow","Tue, 1 Jan 2002 (LATE)","Create the mailer","open")."</table> * endofthelist --- 124,136 ---- text $tblhdr". action("AcTion2","Main.ActorThree",undef,"Sun, 11 Mar 2001","The *world* is flat","closed"). ! action("AcTion3","Main.ActorFour",$ActionTrackerPlugin::Format::latecol,"Sun, 11 Mar 2001","_Late_ the late great *date*","open"). ! action("AcTion4","Main.ActorFiveVeryLongNameBecauseItsATest",$ActionTrackerPlugin::Format::latecol,"Wed, 13 Feb 2002","This is an action with a lot of associated text to test <br /> * the VingPazingPoodleFactor, <br /> * when large actions get edited by the edit button.<br /> * George Bush is a brick.<br /> * Who should really be built<br /> * Into a very high wall.","open"). action("AcTion5","Main.ActorSix",$ActionTrackerPlugin::Format::badcol,"BAD DATE FORMAT see Plugins.ActionTrackerPlugin#DateFormats","Bad date","open")."</table> break the table here $tblhdr". ! action("AcTion6","Main.ActorSeven",$ActionTrackerPlugin::Format::latecol,"Tue, 1 Jan 2002","Create the mailer, %USERNAME%","open")."</table> * A list * $tblhdr". ! action("AcTion7","Main.ActorEight","yellow","Tue, 1 Jan 2002","Create the mailer","open")."</table> * endofthelist *************** *** 192,196 **** my $text = "%ACTION{}%"; TWiki::Plugins::ActionTrackerPlugin::beforeSaveHandler($text,"Topic","Web"); ! Assert::sContains($text, "%ACTION{ state=\"open\" creator=\"Main.TestRunner\" created=\"3-Jun-2002\" who=\"Main.TestRunner\" uid=\"WebTopic102153000n0\" }% No description"); } } --- 190,201 ---- my $text = "%ACTION{}%"; TWiki::Plugins::ActionTrackerPlugin::beforeSaveHandler($text,"Topic","Web"); ! $text =~ s/ state=\"open\"//o; ! $text =~ s/ creator=\"Main.TestRunner\"//o; ! $text =~ s/ created=\"3-Jun-2002\"//o; ! $text =~ s/ due=\"3-Jun-2002\"//o; ! $text =~ s/ who=\"Main.TestRunner\"//o; ! $text =~ s/ uid=\"WebTopic102153000n0\"//o; ! $text =~ s/ No description//o; ! Assert::sEquals($text, "%ACTION{ }%"); } } Index: Assert.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/Assert.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Assert.pm 4 May 2003 13:12:01 -0000 1.3 --- Assert.pm 8 May 2003 20:55:33 -0000 1.4 *************** *** 181,185 **** print STDERR "\t...$fn\n"; $fn = "$pkg$fn"; ! die $@ unless defined( eval "&$fn()" ); $cnt++; } --- 181,185 ---- print STDERR "\t...$fn\n"; $fn = "$pkg$fn"; ! die "OMIGOD $fn $@" unless defined( eval "&$fn()" ); $cnt++; } |
From: <cra...@us...> - 2003-05-09 00:06:00
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/fakewiki/TWiki In directory sc8-pr-cvs1:/tmp/cvs-serv17620/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/fakewiki/TWiki Modified Files: Func.pm Log Message: Fixes for problems reported by Petric Frank Index: Func.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/test/fakewiki/TWiki/Func.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** Func.pm 4 May 2003 13:12:12 -0000 1.3 --- Func.pm 8 May 2003 20:56:02 -0000 1.4 *************** *** 46,50 **** sub getPreferencesValue { my $thing = shift; ! if ($TWiki::TestMaker::prefs{$thing}) { return $TWiki::TestMaker::prefs{$thing}; } else { --- 46,50 ---- sub getPreferencesValue { my $thing = shift; ! if (defined($TWiki::TestMaker::prefs{$thing})) { return $TWiki::TestMaker::prefs{$thing}; } else { |
From: <ma...@us...> - 2003-05-08 14:18:59
|
Update of /cvsroot/twikiplugins/twikiplugins/SeeSkin/pub/Plugins/SeeSkinToo In directory sc8-pr-cvs1:/tmp/cvs-serv23362/SeeSkin/pub/Plugins/SeeSkinToo Modified Files: menu-top.css Log Message: minor mozilla fix: shrink size of 'History' so it's background doesn't occlude the 'diff' border. Index: menu-top.css =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/SeeSkin/pub/Plugins/SeeSkinToo/menu-top.css,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** menu-top.css 8 May 2003 13:02:49 -0000 1.5 --- menu-top.css 8 May 2003 14:18:54 -0000 1.6 *************** *** 88,91 **** --- 88,92 ---- -moz-border-radius:1ex; } + #diffs>a {font-size:0.9em;} #diffs ul, #diffs li {font-size:0.8em;padding-left: 0; padding-right: 1ex; } #menu #editmore { /*position: absolute; right: 1ex; top:1ex; */font-style: italic;} |
From: <ma...@us...> - 2003-05-08 13:02:53
|
Update of /cvsroot/twikiplugins/twikiplugins/SeeSkin/pub/Plugins/SeeSkinToo In directory sc8-pr-cvs1:/tmp/cvs-serv20901/SeeSkin/pub/Plugins/SeeSkinToo Modified Files: menu-top.css Log Message: Index: menu-top.css =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/SeeSkin/pub/Plugins/SeeSkinToo/menu-top.css,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** menu-top.css 15 Apr 2003 09:27:10 -0000 1.4 --- menu-top.css 8 May 2003 13:02:49 -0000 1.5 *************** *** 118,122 **** img { border: 0; } p,td,th,tr { font-size: 1.0em; } ! pre { font-family: monospace; font-size: 1.1em; } strong, b { font-weight: bold; } code { font-size: 1.1em; } --- 118,122 ---- img { border: 0; } p,td,th,tr { font-size: 1.0em; } ! pre { font-family: monospace; font-size: 1.1em; overflow: auto; background-color: #ddd; } strong, b { font-weight: bold; } code { font-size: 1.1em; } *************** *** 132,138 **** .skiplink { display: none; } ! /* ------ for debugging layout positioning ------*/ /*div { border: 1px dotted orange; } #topsection, #midsection, #bottsection { border: 1px dashed red; }*/ ! /*table,td,th,tr { border: 1px dashed rgb(160, 82, 45); }*/ \ No newline at end of file --- 132,138 ---- .skiplink { display: none; } ! .deem {font-size: xx-small;} /* ------ for debugging layout positioning ------*/ /*div { border: 1px dotted orange; } #topsection, #midsection, #bottsection { border: 1px dashed red; }*/ ! /*table,td,th,tr { border: 1px dashed rgb(160, 82, 45); }*/ |
From: Nicholas L. <nj...@pl...> - 2003-05-07 22:32:12
|
On Wed, May 07, 2003 at 03:06:04PM -0700, David LeBlanc wrote: > I have been unable to update from CVS for a week - has something changed? ssh access works for me: nic@inktiger:~/devel/twiki/twiki$ cvs up -PAd nic...@cv...'s password: cvs server: Updating . cvs server: Updating bin P bin/.htaccess.txt .... Looks like the pserver is having issues: nic@inktiger:~/devel/twiki/s$ cvs -d:pserver:ano...@cv...:/cvsroot/twiki login Logging in to :pserver:ano...@cv...:2401/cvsroot/twiki CVS password: cvs [login aborted]: reading from server: Connection reset by peer -- Nicholas Lee - nj.lee at plumtree.co dot nz, somewhere on the fish Maui caught. gpg. 8072 4F86 EDCD 4FC1 18EF 5BDD 07B0 9597 6D58 D70C icq. 1612865 Quixotic Eccentricity |
From: David L. <wh...@oz...> - 2003-05-07 22:22:23
|
I have been unable to update from CVS for a week - has something changed? Dave LeBlanc Seattle, WA USA |
From: <cra...@us...> - 2003-05-04 13:19:00
|
Update of /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin In directory sc8-pr-cvs1:/tmp/cvs-serv3320/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin Modified Files: ActionNotify.pm ActionSet.pm Log Message: Extensive mods and new test; as described in ActionTrackerPlugin.txt Index: ActionNotify.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/ActionNotify.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** ActionNotify.pm 27 Apr 2003 18:03:35 -0000 1.2 --- ActionNotify.pm 4 May 2003 13:11:13 -0000 1.3 *************** *** 25,29 **** # This module contains the functionality of the bin/actionnotify script ! { package ActionNotify; my $vcLogCmd; --- 25,29 ---- # This module contains the functionality of the bin/actionnotify script ! { package ActionTrackerPlugin::ActionNotify; my $vcLogCmd; *************** *** 50,58 **** my ( $webName, $expr, $debugMailer ) = @_; ! my $attrs = ActionTrackerPlugin::Attrs->new( $expr ); my $hdr = TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TABLEHEADER" ); my $bdy = TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TABLEFORMAT" ); my $textform = TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TEXTFORMAT" ); --- 50,60 ---- my ( $webName, $expr, $debugMailer ) = @_; ! my $attrs = new ActionTrackerPlugin::Attrs( $expr ); my $hdr = TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TABLEHEADER" ); my $bdy = TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TABLEFORMAT" ); + my $vert = + TWiki::Func::getPreferencesFlag( "ACTIONTRACKERPLUGIN_TABLEVERTICAL" ); my $textform = TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_TEXTFORMAT" ); *************** *** 60,64 **** TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_NOTIFYCHANGES" ); ! my $format = Format->new( $hdr, $bdy, $textform, $changes ); $vcLogCmd = TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_LOGCMD" ); --- 62,66 ---- TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_NOTIFYCHANGES" ); ! my $format = new ActionTrackerPlugin::Format( $hdr, $bdy, $textform, $changes, $vert ); $vcLogCmd = TWiki::Func::getPreferencesValue( "ACTIONTRACKERPLUGIN_LOGCMD" ); *************** *** 73,101 **** # people who can be notified. my %notifications = (); ! my $date = ""; ! if ( defined $attrs->get( "changedsince" ) ) { ! $date = $attrs->get( "changedsince" ); # need to get rid of formatting done in actionnotify perl script $date =~ s/[, ]+/ /go; $date = _getRelativeDate( $date ); _findChangesInWebs( $webs, $date, $format, \%notifications ); ! } ! ! # Get all the actions that match the search ! my $actions = ActionSet::allActionsInWebs( $webs, $attrs ); ! ! # Obtain a set of all the unique individuals who have ! # actions or changes ! my $people = $actions->getActionees(); ! foreach my $key ( keys %notifications ) { ! if ( defined ( $notifications{$key} ) ) { ! $people->{$key} = 1; } } # Now cycle over the list of people and find their sets of actions # or changes my $mainweb = TWiki::Func::getMainWebname(); ! foreach my $key ( keys %$people ) { if ( defined( $key ) ) { my $compare_key = $key; --- 75,103 ---- # people who can be notified. my %notifications = (); ! my %people = (); ! ! my $date = $attrs->remove( "changedsince" ); ! if ( defined( $date )) { # need to get rid of formatting done in actionnotify perl script $date =~ s/[, ]+/ /go; $date = _getRelativeDate( $date ); _findChangesInWebs( $webs, $date, $format, \%notifications ); ! foreach my $key ( keys %notifications ) { ! if ( defined ( $notifications{$key} ) ) { ! $people{$key} = 1; ! } } } + my $actions; + if ( scalar( keys %$attrs ) > 0 ) { + # Get all the actions that match the search + $actions = ActionTrackerPlugin::ActionSet::allActionsInWebs( $webs, $attrs ); + $actions->getActionees( \%people ); + } # Now cycle over the list of people and find their sets of actions # or changes my $mainweb = TWiki::Func::getMainWebname(); ! foreach my $key ( keys %people ) { if ( defined( $key ) ) { my $compare_key = $key; *************** *** 103,107 **** $key =~ s/$mainweb\.//go; my $mailaddr = _getMailAddress( $key, $notify ); ! my $message; if ( !defined( $mailaddr ) ) { TWiki::Func::writeWarning( "No mail address found for $key" ); --- 105,109 ---- $key =~ s/$mainweb\.//go; my $mailaddr = _getMailAddress( $key, $notify ); ! if ( !defined( $mailaddr ) ) { TWiki::Func::writeWarning( "No mail address found for $key" ); *************** *** 112,119 **** } ! my $subact = $actions->search("who=\"$key\""); ! $subact->sort(); ! my $actionsString = $subact->formatAsString( $format ) || ""; ! my $actionsHTML = $subact->formatAsHTML( "href", $format, 0 ) || ""; my $changesString = $notifications{$compare_key}{text} || ""; my $changesHTML = $notifications{$compare_key}{html} || ""; --- 114,126 ---- } ! my $actionsString = ""; ! my $actionsHTML = ""; ! if ( $actions ) { ! my $subact = $actions->search("who=\"$key\""); ! $subact->sort(); ! $actionsString = $subact->formatAsString( $format ) || ""; ! $actionsHTML = $subact->formatAsHTML( $format, "href", 0 ) || ""; ! } ! my $changesString = $notifications{$compare_key}{text} || ""; my $changesHTML = $notifications{$compare_key}{html} || ""; *************** *** 122,137 **** $changesString, $changesHTML, $date, $mailaddr, $format ); - if ( $debugMailer ) { - $message =~ s/</</go; $result .= $message; } else { my $error = TWiki::Net::sendEmail( $message ); ! print STDERR $error if defined( $error ); } } } ! return "<pre>$result</pre>" if ( $debugMailer ); } --- 129,145 ---- $changesString, $changesHTML, $date, $mailaddr, $format ); if ( $debugMailer ) { $result .= $message; } else { my $error = TWiki::Net::sendEmail( $message ); ! if ( defined( $error )) { ! $error = "ActionTrackerPlugin:ActionNotify: $error"; ! TWiki::Func::writeWarning( $error ); ! } } } } ! return $result; } *************** *** 158,162 **** if( ! TWiki::Func::webExists( $web ) ) { ! print STDERR "* ERROR: TWiki actionnotify did not find web $web\n"; return; } --- 166,171 ---- if( ! TWiki::Func::webExists( $web ) ) { ! my $error = "ActionTrackerPlugin:ActionNotify: did not find web $web"; ! TWiki::Func::writeWarning( $error ); return; } *************** *** 264,267 **** --- 273,277 ---- } + $since = "" unless ( $since ); $text =~ s/%SINCE%/$since/go; if ( $changesString ne "" ) { *************** *** 289,293 **** sub _getRevAtDate { my ( $theWeb, $theTopic, $date ) = @_; ! my $fname = "$TWiki::dataDir\/$theWeb\/$theTopic.txt"; my $tmp = $vcLogCmd; $tmp =~ s/%DATE%/$date/o; --- 299,304 ---- sub _getRevAtDate { my ( $theWeb, $theTopic, $date ) = @_; ! my $dataDir = TWiki::Func::getDataDir(); ! my $fname = "$dataDir\/$theWeb\/$theTopic.txt"; my $tmp = $vcLogCmd; $tmp =~ s/%DATE%/$date/o; *************** *** 327,334 **** my $text = TWiki::Func::readTopicText( $theWeb, $theTopic, $oldrev, 1 ); ! my $oldActions = ActionSet->new(); my $actionNumber = 0; while ( $text =~ s/%ACTION{([^%]*)}%([^\n\r]+)//so ) { ! my $action = Action->new( $theWeb, $theTopic, $actionNumber++, $1, $2 ); $oldActions->add( $action ); } --- 338,345 ---- my $text = TWiki::Func::readTopicText( $theWeb, $theTopic, $oldrev, 1 ); ! my $oldActions = new ActionTrackerPlugin::ActionSet(); my $actionNumber = 0; while ( $text =~ s/%ACTION{([^%]*)}%([^\n\r]+)//so ) { ! my $action = new ActionTrackerPlugin::Action( $theWeb, $theTopic, $actionNumber++, $1, $2 ); $oldActions->add( $action ); } *************** *** 336,343 **** # Recover the current action set. $text = TWiki::Func::readTopicText( $theWeb, $theTopic, undef, 1 ); ! my $currentActions = ActionSet->new(); $actionNumber = 0; while ( $text =~ s/%ACTION{([^%]*)}%([^\n\r]+)//so ) { ! my $action = Action->new( $theWeb, $theTopic, $actionNumber++, $1, $2 ); $currentActions->add( $action ); } --- 347,354 ---- # Recover the current action set. $text = TWiki::Func::readTopicText( $theWeb, $theTopic, undef, 1 ); ! my $currentActions = new ActionTrackerPlugin::ActionSet(); $actionNumber = 0; while ( $text =~ s/%ACTION{([^%]*)}%([^\n\r]+)//so ) { ! my $action = new ActionTrackerPlugin::Action( $theWeb, $theTopic, $actionNumber++, $1, $2 ); $currentActions->add( $action ); } *************** *** 354,358 **** sub _findChangesInWeb { my ( $theWeb, $theDate, $format, $notifications ) = @_; ! my $actions = ActionSet->new(); my $dd = TWiki::Func::getDataDir() || ".."; --- 365,369 ---- sub _findChangesInWeb { my ( $theWeb, $theDate, $format, $notifications ) = @_; ! my $actions = new ActionTrackerPlugin::ActionSet(); my $dd = TWiki::Func::getDataDir() || ".."; *************** *** 364,377 **** # Also assumed: the output of the egrepCmd must be of the form # file.txt: ...matched text... ! chdir( "$dd/$theWeb" ); ! my $grep = `${TWiki::egrepCmd} ${TWiki::cmdQuote}%ACTION\\{.*\\}%${TWiki::cmdQuote} *.txt`; ! if ( $? ne 0 ) { ! print STDERR "grep $dd/$theWeb/*.txt failed"; ! } my $number = 0; my %processed; ! while ( $grep =~ s/^([^\.\n]+)\.txt:.*%ACTION{([^\}]*)}%//m ) { my $topic = $1; if ( !$processed{$topic} ) { --- 375,384 ---- # Also assumed: the output of the egrepCmd must be of the form # file.txt: ...matched text... ! my $grep = `${TWiki::egrepCmd} ${TWiki::cmdQuote}%ACTION\\{.*\\}%${TWiki::cmdQuote} $dd/$theWeb/*.txt`; my $number = 0; my %processed; ! while ( $grep =~ s/^.*\/([^\/\.\n]+)\.txt:.*%ACTION{([^\}]*)}%//m ) { my $topic = $1; if ( !$processed{$topic} ) { Index: ActionSet.pm =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/ActionTrackerPlugin/lib/TWiki/Plugins/ActionTrackerPlugin/ActionSet.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** ActionSet.pm 27 Apr 2003 18:03:35 -0000 1.3 --- ActionSet.pm 4 May 2003 13:11:13 -0000 1.4 *************** *** 18,27 **** use integer; ! use TWiki; ! use TWiki::Plugins::ActionTrackerPlugin::Attrs; use TWiki::Func; # Perl object that represents a set of actions. ! { package ActionSet; # PUBLIC constructor --- 18,29 ---- use integer; ! use TWiki; # required for unpublished constants! use TWiki::Func; + use TWiki::Plugins::ActionTrackerPlugin::Attrs; + use TWiki::Plugins::ActionTrackerPlugin::Format; + # Perl object that represents a set of actions. ! { package ActionTrackerPlugin::ActionSet; # PUBLIC constructor *************** *** 49,53 **** sub sort { my ( $this, $order ) = @_; - if ( defined( $order ) ) { $order =~ s/[^\w,]//g; --- 51,54 ---- *************** *** 76,84 **** # PUBLIC Search the set of actions for actions that match the given # attributes string. Return an ActionSet. sub search { my ( $this, $attrs ) = @_; my $attr = new ActionTrackerPlugin::Attrs( $attrs ); my $action; ! my $chosen = ActionSet->new(); foreach $action ( @{$this->{ACTIONS}} ) { --- 77,86 ---- # PUBLIC Search the set of actions for actions that match the given # attributes string. Return an ActionSet. + # If the search expression is empty, all actions match. sub search { my ( $this, $attrs ) = @_; my $attr = new ActionTrackerPlugin::Attrs( $attrs ); my $action; ! my $chosen = new ActionTrackerPlugin::ActionSet(); foreach $action ( @{$this->{ACTIONS}} ) { *************** *** 91,94 **** --- 93,105 ---- } + sub toString { + my $this = shift; + my $txt = "ActionSet{"; + foreach my $action ( @{$this->{ACTIONS}} ) { + $txt .= "\n " . $action->toString(); + } + return "$txt\n}"; + } + # PUBLIC format the action set as an HTML table # Pass $type="name" to to get an anchor to a position *************** *** 97,112 **** # $newWindow=0 to get jump in same window. sub formatAsHTML { ! my ( $this, $type, $format, $newWindow ) = @_; ! ! my $text = ! "<table border=$Action::border><tr bgcolor=\"$Action::hdrcol\">" . ! $format->getHTMLHeads() . "</tr>"; ! ! foreach my $action ( @{$this->{ACTIONS}} ) { ! my $row = $action->formatAsHTML( $type, $format, $newWindow ); ! $text .= "<tr valign=\"top\">$row</tr>"; ! } ! ! return "$text</table>"; } --- 108,113 ---- # $newWindow=0 to get jump in same window. sub formatAsHTML { ! my ( $this, $format, $jump, $newWindow ) = @_; ! return $format->formatHTMLTable( \@{$this->{ACTIONS}}, $jump, $newWindow ); } *************** *** 114,125 **** sub formatAsString { my ( $this, $format ) = @_; ! my $action; ! my $text = ""; ! ! foreach $action ( @{$this->{ACTIONS}} ) { ! $text .= $action->formatAsString( $format ) . "\n"; ! } ! ! return $text; } --- 115,119 ---- sub formatAsString { my ( $this, $format ) = @_; ! return $format->formatStringTable( \@{$this->{ACTIONS}} ); } *************** *** 157,163 **** # PUBLIC get a map of all people who have actions in this action set ! sub getActionees() { ! my $this = shift; ! my $whos = {}; my $action; --- 151,156 ---- # PUBLIC get a map of all people who have actions in this action set ! sub getActionees { ! my ( $this, $whos ) = @_; my $action; *************** *** 168,172 **** } } - return $whos; } --- 161,164 ---- *************** *** 175,182 **** sub allActionsInWeb { my ( $web, $attrs ) = @_; ! my $actions = ActionSet->new(); ! my $dd = TWiki::Func::getDataDir() || ".."; ! # Known problem; if there's only one file in the web matching # *.txt then the file name won't be printed, at least with GNU # grep. The GNU -H switch, which would solve the problem, is --- 167,175 ---- sub allActionsInWeb { my ( $web, $attrs ) = @_; ! my $actions = new ActionTrackerPlugin::ActionSet(); ! my $dd = TWiki::Func::getDataDir() || "../data"; ! # "../data" because this is a cgi script executed in bin ! # SMELL: if there's only one file in the web matching # *.txt then the file name won't be printed, at least with GNU # grep. The GNU -H switch, which would solve the problem, is *************** *** 186,196 **** # file.txt: ...matched text... # SMELL: uses unpublished TWiki:: constants ! chdir( "$dd/$web" ); ! my $grep = `${TWiki::egrepCmd} ${TWiki::cmdQuote}%ACTION\\{.*\\}%${TWiki::cmdQuote} *.txt`; ! #&TWiki::Func::writeWarning( "Grep $dd/$web $grep" ); my $number = 0; my $topics = $attrs->get( "topic" ) || ""; my $lastTopic = ""; ! while ( $grep =~ s/^([^\._]+)\.txt:.*%ACTION{([^\}]*)}%([^\r\n]*)//m ) { my $topic = $1; my $sat = $2; --- 179,187 ---- # file.txt: ...matched text... # SMELL: uses unpublished TWiki:: constants ! my $grep = `${TWiki::egrepCmd} ${TWiki::cmdQuote}%ACTION\\{.*\\}%${TWiki::cmdQuote} $dd/$web/*.txt`; my $number = 0; my $topics = $attrs->get( "topic" ) || ""; my $lastTopic = ""; ! while ( $grep =~ s/^.*\/([^\/\.\n]+)\.txt:.*%ACTION{([^\}]*)}%([^\r\n]*)//m ) { my $topic = $1; my $sat = $2; *************** *** 199,203 **** $number = 0 if ( $topic ne $lastTopic ); if ( ! $topics || $topic =~ /^$topics$/ ) { ! my $action = Action->new( $web, $topic, $number++, $sat, $text ); if ( $action->matches( $attrs ) ) { $actions->add( $action ) --- 190,194 ---- $number = 0 if ( $topic ne $lastTopic ); if ( ! $topics || $topic =~ /^$topics$/ ) { ! my $action = new ActionTrackerPlugin::Action( $web, $topic, $number++, $sat, $text ); if ( $action->matches( $attrs ) ) { $actions->add( $action ) *************** *** 215,219 **** my ( $theweb, $attrs ) = @_; my $webs = $attrs->get( "web" ) || $theweb; ! my $actions = ActionSet->new(); my $dataDir = TWiki::Func::getDataDir(); opendir( DIR, "$dataDir" ) or die "could not open $dataDir"; --- 206,210 ---- my ( $theweb, $attrs ) = @_; my $webs = $attrs->get( "web" ) || $theweb; ! my $actions = new ActionTrackerPlugin::ActionSet(); my $dataDir = TWiki::Func::getDataDir(); opendir( DIR, "$dataDir" ) or die "could not open $dataDir"; *************** *** 236,240 **** return $actions; } - } --- 227,230 ---- |
From: <cra...@us...> - 2003-05-04 13:18:57
|
Update of /cvsroot/twikiplugins/twikiplugins/PowerEditPlugin/templates In directory sc8-pr-cvs1:/tmp/cvs-serv6758/PowerEditPlugin/templates Modified Files: applet.power.tmpl edit.power.tmpl Log Message: Index: applet.power.tmpl =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/PowerEditPlugin/templates/applet.power.tmpl,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** applet.power.tmpl 15 Mar 2003 16:07:25 -0000 1.1 --- applet.power.tmpl 4 May 2003 13:18:54 -0000 1.2 *************** *** 19,23 **** _A("CODE","com.ccsoft.edit.TWikiEdit") + _A("NAME","TWikiEdit"); ! var _tag; var _attrs; var_alt=""; var _jpp="http://java.sun.com/products/plugin/1.3.1/"; if (_usePlugins && _ie == true) { --- 19,23 ---- _A("CODE","com.ccsoft.edit.TWikiEdit") + _A("NAME","TWikiEdit"); ! var _tag; var _attrs; var _alt; var _jpp="http://java.sun.com/products/plugin/1.3.1/"; if (_usePlugins && _ie == true) { *************** *** 26,29 **** --- 26,30 ---- _A("CODEBASE",_jpp+"jinstall-131-win32.cab#Version=1,3,1,0"); _needParams=true; + _alt="You need the appropriate IE Java plugin"; } else if (_usePlugins && _ns == true && _ns6 == false) { _tag="EMBED"; *************** *** 35,43 **** _A("editboxheight","%EDITBOXHEIGHT%"); _needParams=false; } else { _tag="APPLET"; _attrs=_aStd; _needParams=true; ! _alt="You need a Java enabled browser"; } document.writeln("<"+_tag+_attrs+_A("WIDTH","100%")+_A("HEIGHT","75%")+">"); --- 36,45 ---- _A("editboxheight","%EDITBOXHEIGHT%"); _needParams=false; + _alt="<NOEMBED>You need the appropriate Netscape Java plugin</NOEMBED>"; } else { _tag="APPLET"; _attrs=_aStd; _needParams=true; ! _alt=="You need a Java enabled browser"; } document.writeln("<"+_tag+_attrs+_A("WIDTH","100%")+_A("HEIGHT","75%")+">"); *************** *** 55,58 **** --- 57,61 ---- document.writeln(_alt+"</" + _tag + ">"); //--></SCRIPT> + <NOSCRIPT>You need a JavaScript enabled browser</NOSCRIPT> %CONTROLS% %TEXT% Index: edit.power.tmpl =================================================================== RCS file: /cvsroot/twikiplugins/twikiplugins/PowerEditPlugin/templates/edit.power.tmpl,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** edit.power.tmpl 15 Mar 2003 16:07:25 -0000 1.1 --- edit.power.tmpl 4 May 2003 13:18:54 -0000 1.2 *************** *** 4,14 **** <title> %WIKITOOLNAME% . %WEB% . %TOPIC% %TMPL:P{"titleaction"}%</title> <meta http-equiv="Content-Type" content="text/html; charset=%CHARSET%" /> <meta name="robots" content="noindex" /> %HTTP_EQUIV_ON_EDIT% <base href="%SCRIPTURL%/view%SCRIPTSUFFIX%/%WEB%/%TOPIC%" /> <script language="JavaScript"> <!--HIDE - function initForm() { - document.main.text.focus(); - } function checkAll( theButton, theButtonOffset, theNum, theCheck ) { --- 4,12 ---- <title> %WIKITOOLNAME% . %WEB% . %TOPIC% %TMPL:P{"titleaction"}%</title> <meta http-equiv="Content-Type" content="text/html; charset=%CHARSET%" /> + <meta name="expires" content="0" /> <meta name="robots" content="noindex" /> %HTTP_EQUIV_ON_EDIT% <base href="%SCRIPTURL%/view%SCRIPTSUFFIX%/%WEB%/%TOPIC%" /> <script language="JavaScript"> <!--HIDE function checkAll( theButton, theButtonOffset, theNum, theCheck ) { *************** *** 38,42 **** </script> </head> ! <body bgcolor="#ffffff" onLoad="initForm()"> #PageTop <form name="main" action="%SCRIPTURLPATH%/preview%SCRIPTSUFFIX%/%INTURLENCODE{"%WEB%/%TOPIC%"}%" method="post"> --- 36,40 ---- </script> </head> ! <body bgcolor="#ffffff"> #PageTop <form name="main" action="%SCRIPTURLPATH%/preview%SCRIPTSUFFIX%/%INTURLENCODE{"%WEB%/%TOPIC%"}%" method="post"> |