← Index
NYTProf Performance Profile   « block view • line view • sub view »
For /usr/local/src/github.com/foswiki/core/bin/view
  Run on Sun Dec 4 17:17:59 2011
Reported on Sun Dec 4 17:26:49 2011

Filename/usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugins/SubscribePlugin.pm
StatementsExecuted 67 statements in 1.92ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
2115.69ms175sFoswiki::Plugins::SubscribePlugin::::_SUBSCRIBEFoswiki::Plugins::SubscribePlugin::_SUBSCRIBE
84184µs84µsFoswiki::Plugins::SubscribePlugin::::CORE:substFoswiki::Plugins::SubscribePlugin::CORE:subst (opcode)
11132µs114µsFoswiki::Plugins::SubscribePlugin::::initPluginFoswiki::Plugins::SubscribePlugin::initPlugin
11126µs33µsFoswiki::Plugins::SubscribePlugin::::BEGIN@4Foswiki::Plugins::SubscribePlugin::BEGIN@4
11120µs128µsFoswiki::Plugins::SubscribePlugin::::BEGIN@7Foswiki::Plugins::SubscribePlugin::BEGIN@7
0000s0sFoswiki::Plugins::SubscribePlugin::::_alertFoswiki::Plugins::SubscribePlugin::_alert
0000s0sFoswiki::Plugins::SubscribePlugin::::_subscribeFoswiki::Plugins::SubscribePlugin::_subscribe
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# See the bottom of the file for description, copyright and license information
2package Foswiki::Plugins::SubscribePlugin;
3
4261µs240µs
# spent 33µs (26+7) within Foswiki::Plugins::SubscribePlugin::BEGIN@4 which was called: # once (26µs+7µs) by Foswiki::Plugin::BEGIN@2.16 at line 4
use strict;
# spent 33µs making 1 call to Foswiki::Plugins::SubscribePlugin::BEGIN@4 # spent 7µs making 1 call to strict::import
512µsrequire Foswiki::Func;
6
721.25ms2236µs
# spent 128µs (20+108) within Foswiki::Plugins::SubscribePlugin::BEGIN@7 which was called: # once (20µs+108µs) by Foswiki::Plugin::BEGIN@2.16 at line 7
use vars qw( $UID $WEB $TOPIC);
# spent 128µs making 1 call to Foswiki::Plugins::SubscribePlugin::BEGIN@7 # spent 108µs making 1 call to vars::import
8
912µsour $VERSION = '$Rev$';
1011µsour $RELEASE = '03 Dec 2008';
1112µsour $SHORTDESCRIPTION =
12'This is a companion plugin to the MailerContrib. It allows you to trivially add a "Subscribe me" link to topics to get subscribed to changes.';
1311µsour $NO_PREFS_IN_TOPIC = 1;
14
1511µsour $UID;
161800nsour $WEB;
171800nsour $TOPIC;
18
19
# spent 114µs (32+83) within Foswiki::Plugins::SubscribePlugin::initPlugin which was called: # once (32µs+83µs) by Foswiki::Plugin::__ANON__[/usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugin.pm:235] at line 228 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Plugin.pm
sub initPlugin {
20432µs ( $TOPIC, $WEB ) = @_;
21
22182µs Foswiki::Func::registerTagHandler( 'SUBSCRIBE', \&_SUBSCRIBE );
# spent 82µs making 1 call to Foswiki::Func::registerTagHandler
23 $UID = 1;
24
25 return 1;
26}
27
28# Show a button inviting (un)subscription to this topic
29
# spent 175s (5.69ms+175) within Foswiki::Plugins::SubscribePlugin::_SUBSCRIBE which was called 2 times, avg 87.7s/call: # 2 times (5.69ms+175s) by Foswiki::Func::__ANON__[/usr/local/src/github.com/foswiki/core/lib/Foswiki/Func.pm:573] at line 568 of /usr/local/src/github.com/foswiki/core/lib/Foswiki/Func.pm, avg 87.7s/call
sub _SUBSCRIBE {
3020121µs my ( $session, $params, $topic, $web ) = @_;
31
32266µs my $query = Foswiki::Func::getCgiQuery();
# spent 66µs making 2 calls to Foswiki::Func::getCgiQuery, avg 33µs/call
33 my $form;
342101µs my $suid = $query->param('subscribe_uid');
# spent 101µs making 2 calls to Foswiki::Request::param, avg 51µs/call
35
362124µs my $cur_user = Foswiki::Func::getWikiName();
# spent 124µs making 2 calls to Foswiki::Func::getWikiName, avg 62µs/call
37
38 # SMELL: this means that subscription changes can only happen from a
39 # url to a topic that contains a %SUBCRIBE% tag, rather than the url
40 # params meaning something. It also leads to incorrect display to the
41 # user if subscription data is rendered prior to the processing (like
42 # subing while displaying the webNotify topic)
43 if ( $suid && $suid == $UID ) {
44
45 # make sure we're not doing this twice..
46 $query->delete('subscribe_uid');
47
48 # We have been asked to subscribe
49 my $topics = $query->param('subscribe_topic');
50 $topics =~ /^(.*)$/;
51 $topics = $1; # Untaint - we will check it later
52 my $who = $query->param('subscribe_subscriber');
53 $who ||= $cur_user;
54 if ( $who eq $Foswiki::cfg{DefaultUserWikiName} ) {
55 $form = _alert("$who cannot subscribe");
56 }
57 else {
58 my $unsubscribe = $query->param('subscribe_remove');
59 _subscribe( $web, $topics, $who, $cur_user, $unsubscribe );
60 }
61 }
62
63280µs my $who = $params->{who} || Foswiki::Func::getWikiName();
# spent 80µs making 2 calls to Foswiki::Func::getWikiName, avg 40µs/call
6420269µs if ( $who eq $Foswiki::cfg{DefaultUserWikiName} ) {
65 $form = '';
66 }
67 else {
68 my $topics = $params->{topic} || $topic;
69 my $unsubscribe = 0;
70 require Foswiki::Contrib::MailerContrib;
712175s if (
# spent 175s making 2 calls to Foswiki::Contrib::MailerContrib::isSubscribedTo, avg 87.7s/call
72 Foswiki::Contrib::MailerContrib::isSubscribedTo(
73 $web, $who, $topics
74 )
75 )
76 {
77 $unsubscribe = 'yes';
78 }
79
80 my $url;
81233µs if ( $Foswiki::Plugins::VERSION < 1.2 ) {
82 $url = Foswiki::Func::getScriptUrl( $WEB, $TOPIC, 'view' )
83 . "?subscribe_topic=$topics;subscribe_subscriber=$who;subscribe_remove=$unsubscribe;subscribe_uid=$UID";
84 }
85 else {
862981µs $url = Foswiki::Func::getScriptUrl(
# spent 981µs making 2 calls to Foswiki::Func::getScriptUrl, avg 491µs/call
87 $WEB, $TOPIC, 'view',
88 subscribe_topic => $topics,
89 subscribe_subscriber => $who,
90 subscribe_remove => $unsubscribe,
91 subscribe_uid => $UID
92 );
93 }
94
95 $form = $params->{format};
96 my $actionName = 'Subscribe';
97 if ( $unsubscribe eq 'yes' ) {
98 $form = $params->{formatunsubscribe}
99 if ( $params->{formatunsubscribe} );
100 $actionName = 'Unsubscribe';
101 }
1028141µs if ($form) {
103273µs $form =~ s/\$url/$url/g;
# spent 73µs making 2 calls to Foswiki::Plugins::SubscribePlugin::CORE:subst, avg 36µs/call
10424µs $form =~ s/\$wikiname/$who/g;
# spent 4µs making 2 calls to Foswiki::Plugins::SubscribePlugin::CORE:subst, avg 2µs/call
10524µs $form =~ s/\$topics/$topics/g;
# spent 4µs making 2 calls to Foswiki::Plugins::SubscribePlugin::CORE:subst, avg 2µs/call
10624µs $form =~ s/\$action/%MAKETEXT{"$actionName"}%/g;
# spent 4µs making 2 calls to Foswiki::Plugins::SubscribePlugin::CORE:subst, avg 2µs/call
107 }
108 else {
109 $form = CGI::a( { href => $url }, $actionName );
110 }
111 }
112
113 $UID++;
114 return $form;
115}
116
117sub _alert {
118 my ($mess) = @_;
119 return "<span class='twikiAlert'>$mess</span>";
120}
121
122# Handle a (un)subscription request
123sub _subscribe {
124 my ( $web, $topics, $subscriber, $cur_user, $unsubscribe ) = @_;
125
126#print STDERR "_subscribe($web, $topics, $subscriber, $cur_user, $unsubscribe);\n";
127
128 return _alert("bad subscriber '$subscriber'")
129 if !(
130 (
131 $Foswiki::cfg{LoginNameFilterIn}
132 && $subscriber =~ m/($Foswiki::cfg{LoginNameFilterIn})/
133 )
134 || $subscriber =~ m/^([A-Z0-9._%-]+@[A-Z0-9.-]+\.[A-Z]{2,4})$/i
135 || $subscriber =~ m/($Foswiki::regex{wikiWordRegex})/o
136 )
137 || $subscriber eq $Foswiki::cfg{DefaultUserWikiName};
138 $subscriber = $1; # untaint
139
140 if ( $unsubscribe && $unsubscribe =~ /^(on|true|yes)$/i ) {
141 $unsubscribe = '-';
142
143 #$mess = 'unsubscribed from';
144 }
145 else {
146 undef $unsubscribe;
147 }
148 require Foswiki::Contrib::MailerContrib;
149 Foswiki::Contrib::MailerContrib::changeSubscription( $web, $subscriber,
150 $topics, $unsubscribe );
151
152 #return _alert("$subscriber has been $mess <nop>$web.<nop>$topics");
153 return "";
154}
155
15618µs1;
157__END__
 
# spent 84µs within Foswiki::Plugins::SubscribePlugin::CORE:subst which was called 8 times, avg 11µs/call: # 2 times (73µs+0s) by Foswiki::Plugins::SubscribePlugin::_SUBSCRIBE at line 103, avg 36µs/call # 2 times (4µs+0s) by Foswiki::Plugins::SubscribePlugin::_SUBSCRIBE at line 104, avg 2µs/call # 2 times (4µs+0s) by Foswiki::Plugins::SubscribePlugin::_SUBSCRIBE at line 106, avg 2µs/call # 2 times (4µs+0s) by Foswiki::Plugins::SubscribePlugin::_SUBSCRIBE at line 105, avg 2µs/call
sub Foswiki::Plugins::SubscribePlugin::CORE:subst; # opcode