From 1323d6459826c6d77f419d361bb6506764dd5243 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Thu, 1 Oct 2009 17:03:40 -0700 Subject: [PATCH 01/18] Add article with pagination, and 3 column layout templates. Fixes bug #11083 --- docs/changelog/7.x.x.txt | 1 + .../packages-7.8.1/article-with-pagination.wgpkg | Bin 0 -> 1574 bytes docs/upgrades/packages-7.8.1/layout.css.wgpkg | Bin 0 -> 1075 bytes docs/upgrades/packages-7.8.1/three-columns.wgpkg | Bin 0 -> 1699 bytes 4 files changed, 1 insertion(+) create mode 100644 docs/upgrades/packages-7.8.1/article-with-pagination.wgpkg create mode 100644 docs/upgrades/packages-7.8.1/layout.css.wgpkg create mode 100644 docs/upgrades/packages-7.8.1/three-columns.wgpkg diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index e19ebc027..67819cdb0 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -32,6 +32,7 @@ - fixed #11076: WebGUI::Account::Friends message_rpp - fixed #11067: My Purchases Detail Template - Status Message broken - fixed #11081: Prop style in 7.8.0? + - fixed #11083: TGC template bug fixes, round #1 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/docs/upgrades/packages-7.8.1/article-with-pagination.wgpkg b/docs/upgrades/packages-7.8.1/article-with-pagination.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..8b441cf73b588ae790e718e112a80cac1e799b07 GIT binary patch literal 1574 zcmV+>2HE)^iwFP!00000|Ls_9Q`$M>!QoaA0ask#|vnI*n*qY%MDihyNv)h=-DUICPgf6aF67huz+HnTCOn55UdN}%3 z335b9bU`NajD+_P4ic(t$rlL~mvF6*jm_`6xRvE*)3F#Q&Q7GHs#ta%#eYus_UF4o z_Bz>@chmW|kKKjy%|vV>5CAKTX>-BUw3(6#ONe3|1!eMxMG;MmH$sldGr<*C%QOcF zoqr;DmL5m%Bc}3I8*bl{Q)3uLZ0@n>kFj5*F;u|#&726YILpr1_d*~^Iv-D`dS){n z`#Ty1{clLTgv=!`ESi;8$E6|OG6t1Ka_Ntjw`MflOwoyz@Y`AbkfuAQp82vG96$- z8!&WZohv?0Q9&c{L&q_0=?+xJRM0!93~?72!6_RyoiSyoVwJ zI5ERevDw6vBCG(;;ADnd-y^ZAnC@6i_0`4KeKBe370>|MIC2e>(92*UV$p`Pml~=C za%`g{3lb18TK8!ue00N$LkLlhi1{(SxKQC-&~S;+8UK)6;F<36EKzW0PO@0B)HRPR zw#~qmgQsCjpgbvNGiJ_J&^hCotN`ZLx6;CXrf+8zF;je|4zNG?ji5GKS$e^P4yGz* zb@fU@#pcw6w@KyC;C9-chvEPyHKd~y*7!#@1w+&I_NSDAsb!m40_z`wO54mi5KOjw z+)?a!LYLgNp>oi9Woz*wdPjijwFcmZC`+bPFa?+CK=9ca5zsHpKt)5?NSD1SNhVhJ zASs~>1c=KQX>DC2w%vYa=6rzrY5cF~?cwF|V6dy@#$a$!s5IxUMb!z9*d5FDjUQ}m z_Ika}W-o9~X4;u}ySW7Mu3)ZvfajV7DfGl&jOJ3S@1iiNRR+0@^VCp$dC$@hTtO0H zu4uIKL->H2%*;S}S`He{%qTjaq@XhASP2>q&)K&;iEgmD?J`V>05SI%aD&0o#mQ(L zMwpUZOT=8YRzxC``+1R=xad@vbz>``?;~jR4cD?}zZAEn6Xpl>9SGF2M$l?G<%{Fw zfQwlU2QtB5qq(XrHSTJ9y2s0uggH{-F*!Xlwpne9lcReBhDUd$l0=i?H?ZmJcKp5~PYxk9Vt zP^3M|b=mNzv{*hbQLc7e;Aa4u%L_lu1<>%BWsk1f zHQl;4?J8==Gqb3G!-yL*ksd(~*Vvjiu|Odl;m37N0_b?6KMiu5k#r=R5ZWpMxTdZZR=w!G?ZrW5CE=Sh*De(Ur7&G+Yc!}J>C Y6@ga-UJ-aj;8#T8KMgJLH2@p{0A1@Bn*aa+ literal 0 HcmV?d00001 diff --git a/docs/upgrades/packages-7.8.1/layout.css.wgpkg b/docs/upgrades/packages-7.8.1/layout.css.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..c84b3a6f176517ed377a1faa7465d062233d861e GIT binary patch literal 1075 zcmV-31kC#%iwFP!00000|Ls;=Z`(E)^>cp(Az&{<;z+VAN8VGKHBHdO%V4_~tiwP{ zw8TahRg$XX2Kn#fMKUSdN&6538(=(ep6dl2AYAr8D#jrdrNt!2#og2SDuyU~+AJq0hMJsuJ_G$PnN-!D z`Sl|8KkR;Cql$3~ajF|kYU=kTq1UX7xujE&!=P0l=R6$*1V5@?Z3~z@+_ng8@1d|C&*)5FkL^x4UD7|1as}>TW&>$DCSd|Ur@5Rg%lMUWcdr; zV#L@Po1jIRH%+$yiiz_K7U@nJae-{&E8J0hQl-2 zz2R_N;Ic&Apru4^NP_2Bv*mbxKL`TX4?+W4;02mAec^(rlU7GL=DE(ctKW6=-eaVt zG%#`59WF)O2D>8VML*)@?0 z)r+R3QJV}!cN7hxs6X(n$|(AVnW*^phD_PEUgQM>Yx!Zd3f9b-!VpMDvcGM zX`0L;a!!6d0gSJ5#K4?Tz%vANvw@l=koN8}JkJF{*TiM^a9cp7rJ{x z?V?(z>rvCT3pDY=zKXvIZdGg0y`DrHh13F2y7&p|Rvm zV#~gnV+&yC01vJCNs0dK^nP4j6MR$ACc~yy?fy01HB(aEPdm0Iz2Pa9zVSg>@ysY`kI|EjELz zoxC{*oYs9nU!CBrKHMyux^cC){~(OQ)Bb5-rc|oCKwTajjm|^=>-E_vZ#@CTyNzy*+vFwADRq z!#%K9V=oMwov_&k!p2?@hK(lNV9EBc2^WZgY7tFH`mkKygk#2+Ps`20r8cMTD@gxO zQ%dX5{SRNL-_L6wI8C2OQQ+7yelPKV*l9vA6#d_BHTU-du;%u!ZTY{pebt{r!avU- z2`d7RvjhozkAy(cXpB?AD?vB-{f{5iJQtLqA@+wdMl;L=!HQ6^k(?riflquqleCqv zqSnia1aa}|V@4Uw9;r3yBuVTvWT8;}E7_!<5I(}OTbttPdy>Xd7PzMhp*rysP|K|1Lo@IuW&q^Y35YRRV?+80TV^V9)>y z7!tD#!t3yT>LAXsFsi&e zc|AIQ@%{}z_aQ+oMyi`{U$6?S_!ZQuEOy*8K>M$6MjbG7^jNH^CRKcj0!5v zqNY4=3>lqd=kcqU2)(N5*yRzXCVDY>3`h)S)qCg(2*3MB!~(N{Lojm$5yLG>pwv9k zTHaL-@7P@`|KuyAhk_K1rI$!t%1VhUpF8Z;QIVO_g$x3YIVUu&fm$^bk4gF_RfJOF zop5p@nhHh}ZYO(n!=jvTOgQA)?1qR0+cm&&)I4-dg_`ZvVbJb!4O`43Mlt~^+a`06S^X6nh^C99P}xRF@xx7K-8&F$%Teq z7#f8OC+hh zT=LD)--8>y4aaceOZ!-J5`LRTbUY>kj_|`^;vT9hZ9UIxr)YWlzc=Y+ZcgC>UrHTf zRwH2VMb+&&VZ5Oz7B;v^23yI6;B}*5I8d1_s!;H*N1wZPK_zRyRR@Y>1oFy)N&29m zM!6~FYazgCY(r}y~e1oY# zf|C(ShZbS*8g6Lqu>mP64$x{Sa4UzkoIKSOT|wKZguKW7pKi~)-6PpRce^(R4{_uY zzPO|@84!acgw6eSyWQ9i4;+!|+7!PV*;EInU3CPeLw-lFhBCahgv-8Jx=1nbI&S_z zvMVY;bcAH%G;b9^YbL6jTqRkWZlZ9K3d#VxdGzrWRldI^e{0eE2knkiIYSKK4aIti zk-FWpo6CzulM#MFCGeuLpaR-M_$eNsNwU(z+78;xorZ@cF#JelYkrzTM%EXe-hfj8 z?32fXZ_W{&o~N%V8*6iTQ-JYmtSCp0=1nbO2A-iv8|p%VN6u6^#^K{l^6>bIq=EGQ zdU#`XN9=kpSxze?!zI6MUJ9tiQmmqEp#vR?$Cn2u$kWtSoBjfI#(G@m&*IHd0=tv4 zHcTJNpN$0cbi?N9r*=`+;jaxJ66ys?LXtbfbZ$&(mccGiagXu2Uh~LFSX_^{@1mfU} z<6&8Mw8kN8;-S0)+9V!KXR}89E*_pF9tx%V8k6e?TU(xQUY0}Ds#DM~E-k<3PdHax z;51^hOkC#`jrZL}prQHZ)BZK0)63{Ny=KQJuh8j!=j7+pBgcgBw=)i9%6wg;DyqCv zt9UgvRHf>hozz*^V~&~n)Hh#-wO)j+mRE*B`3Qx)Q4d{RophRiT^zmb+#FXM_m?NX tec)5a(biu^Kl$zP)3Z-c@tt$WV`qV#1$GwLS)gcve*xQ1t-Syy003kkIbQ$( literal 0 HcmV?d00001 From df82253967eaaedb5cca4a3a2213907f0bd07f47 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Thu, 1 Oct 2009 22:05:49 -0500 Subject: [PATCH 02/18] Packed template tests are CODE_COP tests --- t/Asset/Template/packed.t | 2 ++ 1 file changed, 2 insertions(+) diff --git a/t/Asset/Template/packed.t b/t/Asset/Template/packed.t index 851937302..074b74031 100644 --- a/t/Asset/Template/packed.t +++ b/t/Asset/Template/packed.t @@ -25,6 +25,8 @@ use CSS::Packer; use JavaScript::Packer; use WebGUI::Asset::Template; +skip_all("Set CODE_COP to enable these tests") unless $ENV{CODE_COP}; + #---------------------------------------------------------------------------- # Init my $session = WebGUI::Test->session; From c3d25bc5a05ca649e165e278c9bbc102c7c7c6a4 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Thu, 1 Oct 2009 22:08:13 -0500 Subject: [PATCH 03/18] make 7.8.0-7.8.1 more quiet --- docs/upgrades/upgrade_7.8.0-7.8.1.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/upgrades/upgrade_7.8.0-7.8.1.pl b/docs/upgrades/upgrade_7.8.0-7.8.1.pl index 867429d9b..73529e4c0 100644 --- a/docs/upgrades/upgrade_7.8.0-7.8.1.pl +++ b/docs/upgrades/upgrade_7.8.0-7.8.1.pl @@ -69,7 +69,7 @@ sub removeSQLFormTables { my $tablesUsed = $session->db->quickScalar("select count(*) from asset where className='WebGUI::Asset::Wobject::SQLForm'"); if (!$tablesUsed) { $session->db->write('DROP TABLE IF EXISTS SQLForm_fieldOrder'); - print "\n\t\tSQL Form not used, dropping table..."; + print "\n\t\tSQL Form not used, dropping table..." unless $quiet; } print "Done.\n" unless $quiet; } From 8f7d01691d47132894be9f9a279a5e8f3f046dc2 Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Fri, 2 Oct 2009 01:02:11 -0500 Subject: [PATCH 04/18] fix skip_all in packed test --- t/Asset/Template/packed.t | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/t/Asset/Template/packed.t b/t/Asset/Template/packed.t index 074b74031..4d547d37d 100644 --- a/t/Asset/Template/packed.t +++ b/t/Asset/Template/packed.t @@ -25,7 +25,9 @@ use CSS::Packer; use JavaScript::Packer; use WebGUI::Asset::Template; -skip_all("Set CODE_COP to enable these tests") unless $ENV{CODE_COP}; +if ( !$ENV{CODE_COP} ) { + plan skip_all => "Set CODE_COP to enable these tests"; +} #---------------------------------------------------------------------------- # Init @@ -34,6 +36,7 @@ my $templates = WebGUI::Asset->getRoot( $session ) ->getLineage( ['descendants'], { includeOnlyClasses => [ 'WebGUI::Asset::Template' ], } ); +WebGUI::Test->tagsToRollback( WebGUI::VersionTag->getWorking( $session ) ); #---------------------------------------------------------------------------- # Tests @@ -68,9 +71,4 @@ for my $templateId ( @$templates ) { } -#---------------------------------------------------------------------------- -# Cleanup -END { - WebGUI::VersionTag->getWorking( $session )->rollback; -} #vim:ft=perl From 5c03cfbfbee7d9617e11e9fbc0496282f1ae14fd Mon Sep 17 00:00:00 2001 From: Doug Bell Date: Fri, 2 Oct 2009 01:03:34 -0500 Subject: [PATCH 05/18] fixed #10544: Child assets under uncommitted parents --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/AssetLineage.pm | 3 +- lib/WebGUI/AssetVersioning.pm | 11 ++++- t/Asset/Asset.t | 88 +++++++++++++++++++++-------------- 4 files changed, 65 insertions(+), 38 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 67819cdb0..96a3bf692 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -33,6 +33,7 @@ - fixed #11067: My Purchases Detail Template - Status Message broken - fixed #11081: Prop style in 7.8.0? - fixed #11083: TGC template bug fixes, round #1 + - fixed #10544: Child assets under uncommitted parents 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/lib/WebGUI/AssetLineage.pm b/lib/WebGUI/AssetLineage.pm index 659b1d9f1..72d33b8d4 100644 --- a/lib/WebGUI/AssetLineage.pm +++ b/lib/WebGUI/AssetLineage.pm @@ -85,7 +85,8 @@ sub addChild { $properties->{assetId} = $id; $properties->{parentId} = $self->getId; my $temp = WebGUI::Asset->newByPropertyHashRef($self->session,$properties) || croak "Couldn't create a new $properties->{className} asset!"; - $temp->{_parent} = $self; + # Do not set the parent here, since it could be stale and poison the child + #$temp->{_parent} = $self; my $newAsset = $temp->addRevision($properties, $now, $options); $self->updateHistory("added child ".$id); $self->session->http->setStatus(201,"Asset Creation Successful"); diff --git a/lib/WebGUI/AssetVersioning.pm b/lib/WebGUI/AssetVersioning.pm index 5db3c4919..f85b91272 100644 --- a/lib/WebGUI/AssetVersioning.pm +++ b/lib/WebGUI/AssetVersioning.pm @@ -101,7 +101,16 @@ sub addRevision { } ); } else { - $workingTag = WebGUI::VersionTag->getWorking($self->session); + my $parentAsset; + if ( not defined( $parentAsset = $self->getParent ) ) { + $parentAsset = WebGUI::Asset->newPending( $self->session, $self->get('parentId') ); + } + if ( $parentAsset->hasBeenCommitted ) { + $workingTag = WebGUI::VersionTag->getWorking( $self->session ); + } + else { + $workingTag = WebGUI::VersionTag->new( $self->session, $parentAsset->get('tagId') ); + } } #Create a dummy revision to be updated with real data later diff --git a/t/Asset/Asset.t b/t/Asset/Asset.t index c3342dff9..ecb964178 100644 --- a/t/Asset/Asset.t +++ b/t/Asset/Asset.t @@ -815,67 +815,83 @@ is($iufpAsset2->get('url'), 'inheriturlfromparent01/iufp2', '... update works pr ################################################################ # -# requestAutoCommit to move uncommitted child to uncommitted parent +# addRevision to uncommitted child of uncommitted parent # ################################################################ my $versionTag5 = WebGUI::VersionTag->getWorking($session); -WebGUI::Test->tagsToRollback($versionTag5); -$versionTag5->set( { name => 'move commit of child to uncommitted parent on requestAutoCommit tests vt1' } ); +$versionTag5->set( { name => 'move revision of uncommitted child to uncommitted parent tests vt1' } ); $properties = { + # '1234567890123456789012' - id => 'moveVersionToParent_01', - title => 'moveVersionToParent_01', - className => 'WebGUI::Asset::Wobject::Layout', - url => 'moveVersionToParent_01', + id => 'moveVersionToParent_01', + title => 'moveVersionToParent_01', + className => 'WebGUI::Asset::Wobject::Layout', + url => 'moveVersionToParent_01', }; -my $parentAsset = $defaultAsset->addChild($properties, $properties->{id}); -my $parentVersionTag = WebGUI::VersionTag->new($session, $parentAsset->get('tagId')); -is($parentVersionTag->get('isCommitted'),0, 'built non-committed parent asset'); +my $parentAsset = $defaultAsset->addChild( $properties, $properties->{id}, undef, { skipAutoCommitWorkflows => 1 } ); +my $parentVersionTag = WebGUI::VersionTag->new( $session, $parentAsset->get('tagId') ); +is( $parentVersionTag->get('isCommitted'), 0, 'built non-committed parent asset' ); - -my $versionTag6 = WebGUI::VersionTag->create($session, {}); -WebGUI::Test->tagsToRollback($versionTag6); -$versionTag6->set( { name => 'move commit of child to uncommitted parent on requestAutoCommit tests vt2' } ); +my $versionTag6 = WebGUI::VersionTag->create( $session, {} ); +$versionTag6->set( { name => 'move revision of uncommitted child to uncommitted parent tests vt2' } ); $versionTag6->setWorking; $properties2 = { + # '1234567890123456789012' - id => 'moveVersionToParent_03', - title => 'moveVersionToParent_03', - className => 'WebGUI::Asset::Wobject::Layout', - url => 'moveVersionToParent_03', + id => 'moveVersionToParent_03', + title => 'moveVersionToParent_03', + className => 'WebGUI::Asset::Wobject::Layout', + url => 'moveVersionToParent_03', }; -my $childAsset = $parentAsset->addChild($properties, $properties2->{id}); -my $testAsset = WebGUI::Asset->newPending($session, $childAsset->get('parentId')); -my $testVersionTag = WebGUI::VersionTag->new($session, $testAsset->get('tagId')); +my $childAsset = $parentAsset->addChild( + $properties2, $properties2->{id}, + $session->datetime->time(), + { skipAutoCommitWorkflows => 1 } +); +my $testAsset = WebGUI::Asset->newPending( $session, $childAsset->get('parentId') ); +my $testVersionTag = WebGUI::VersionTag->new( $session, $testAsset->get('tagId') ); my $childVersionTag; -$childVersionTag = WebGUI::VersionTag->new($session, $childAsset->get('tagId')); -is($childVersionTag->get('isCommitted'),0, 'built non-committed child asset'); +$childVersionTag = WebGUI::VersionTag->new( $session, $childAsset->get('tagId') ); +is( $childVersionTag->get('isCommitted'), 0, 'built non-committed child asset' ); -isnt($testAsset->get('tagId'),$childAsset->get('tagId'),'parent asset and child asset have different version tags'); -isnt($testVersionTag->getId,$childVersionTag->getId,'parent asset and child asset version tags unmatched'); +is( $testAsset->get('tagId'), + $childAsset->get('tagId'), + 'uncommitted parent asset and uncommitted child asset have same version tag at addChild' +); -eval { - $childAsset->requestAutoCommit; - $childVersionTag = WebGUI::VersionTag->new($session, $childAsset->get('tagId')); +$properties2 = { + + # '1234567890123456789012' + id => 'moveVersionToParent_03', + title => 'moveVersionToParent_03a', + className => 'WebGUI::Asset::Wobject::Layout', + url => 'moveVersionToParent_03a', }; -is($childVersionTag->get('isCommitted'),0, 'confirm non-committed child asset'); +sleep 2; +$childAsset->addRevision( $properties2, $session->datetime->time(), { skipAutoCommitWorkflows => 1 } ); -is($testAsset->get('tagId'),$childAsset->get('tagId'),'parent asset and child asset have same version tags'); +is( $parentVersionTag->get('isCommitted'), 0, 'confimr non-committed parent asset after revision' ); +is( $childVersionTag->get('isCommitted'), 0, 'confirm non-committed child asset after revision' ); -eval { - $testVersionTag->commit; -}; +is( $testAsset->get('tagId'), + $childAsset->get('tagId'), + 'uncommitted parent asset and uncommitted child asset have same version tag after addRevision' +); -is($testVersionTag->get('isCommitted'),1,'parent asset is now committed'); +eval { $testVersionTag->commit; }; -$childVersionTag = WebGUI::VersionTag->new($session, $childAsset->get('tagId')); -is($childVersionTag->get('isCommitted'),1,'child asset is now committed'); +$session->log->warn('parent asset is now committed'); +is( $testVersionTag->get('isCommitted'), 1, 'parent asset is now committed' ); + +$childVersionTag = WebGUI::VersionTag->new( $session, $childAsset->get('tagId') ); +$session->log->warn('child asset is now committed'); +is( $childVersionTag->get('isCommitted'), 1, 'child asset is now committed' ); ################################################################ # From 7a439fd702e9ecf9981c416580aa4f6f7efa05b0 Mon Sep 17 00:00:00 2001 From: hao Date: Fri, 2 Oct 2009 07:52:48 -0400 Subject: [PATCH 06/18] Fixed failure in test 250 of t/00_compile.t. not ok 250 - WebGUI/Asset/Wobject/StoryArchive.pm compiles without warnings @ Failed test 'WebGUI/Asset/Wobject/StoryArchive.pm compiles without warnings' @ at 00_compile.t line 52. @ got: 'Argument "." isn't numeric in numeric eq (==) at /Users/hao/Dropbox/PB/wg/webgui/lib/WebGUI/Asset/Wobject/StoryArchive.pm line 383.' @ expected: '' --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/StoryArchive.pm | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 96a3bf692..a71892a55 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -34,6 +34,7 @@ - fixed #11081: Prop style in 7.8.0? - fixed #11083: TGC template bug fixes, round #1 - fixed #10544: Child assets under uncommitted parents + - fixed failure in test 250 of t/00_compile.t 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/lib/WebGUI/Asset/Wobject/StoryArchive.pm b/lib/WebGUI/Asset/Wobject/StoryArchive.pm index c69cc0b91..2153afaf9 100644 --- a/lib/WebGUI/Asset/Wobject/StoryArchive.pm +++ b/lib/WebGUI/Asset/Wobject/StoryArchive.pm @@ -380,7 +380,7 @@ sub getKeywordStaticURL { my $url = $self->getUrl; my @parts = split /\//, $url; my $lastPart = pop @parts; - if (index $lastPart, '.' == -1) { + if (index( $lastPart, '.' ) == -1) { return join '/', $self->getUrl, $self->getKeywordFilename($keyword); } else { From 3fb3644389f3ff5655ac403e62d85b07741a4a45 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 2 Oct 2009 12:43:06 -0700 Subject: [PATCH 07/18] Test for checking syntax in all templates. --- t/templateSyntax.t | 48 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 t/templateSyntax.t diff --git a/t/templateSyntax.t b/t/templateSyntax.t new file mode 100644 index 000000000..b64437b63 --- /dev/null +++ b/t/templateSyntax.t @@ -0,0 +1,48 @@ +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2009 Plain Black Corporation. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------- +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------- + +use FindBin; +use strict; +use warnings; +use lib "$FindBin::Bin/lib"; ##t/lib + +use WebGUI::Test; +use WebGUI::Session; +use Data::Dumper; +use WebGUI::Asset::Template; + +#The goal of this test is to locate poorly used macros in the default +#templates; + +use Test::More; # increment this value for each test you create +my $numTests = 0; + +my $session = WebGUI::Test->session; +my $lib = WebGUI::Test->lib; + +# put your tests here + +$numTests = $session->db->quickScalar('select count(distinct(assetId)) from template'); + +plan tests => $numTests; + +my $getATemplate = WebGUI::Asset::Template->getIsa($session); + +while (my $templateAsset = $getATemplate->()) { + my $output = $templateAsset->process({}); + unlike( + $output, + qr/\AError processing template:/, + sprintf "%s: %s (%s) has no syntax errors", + $templateAsset->getTitle, $templateAsset->getId, $templateAsset->getUrl + ); +} + + From 247166baf2ec338faed65b8372e6282906f5caa1 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 2 Oct 2009 12:45:03 -0700 Subject: [PATCH 08/18] In the CS, do not show a profile link unless the user is not a visitor. Fixes bug #11084 If the post is owned by Visitor, do not show the link because no one is allowed to see Visitor's profile. If the current user is Visitor, do not show the link because Visitor is not allowed to view anyone's profile. --- docs/changelog/7.x.x.txt | 1 + .../root_import_collaboration.wgpkg | Bin 0 -> 38883 bytes lib/WebGUI/Asset/Post.pm | 45 ++++----- lib/WebGUI/Asset/Wobject/Collaboration.pm | 28 +++--- lib/WebGUI/Help/Asset_Collaboration.pm | 5 +- .../i18n/English/Asset_Collaboration.pm | 17 +++- lib/WebGUI/i18n/English/Asset_Template.pm | 4 +- t/Asset/Post.t | 52 +++++++--- .../Wobject/Collaboration/templateVariables.t | 92 ++++++++++++++++++ 9 files changed, 194 insertions(+), 50 deletions(-) create mode 100644 docs/upgrades/packages-7.7.22/root_import_collaboration.wgpkg create mode 100644 t/Asset/Wobject/Collaboration/templateVariables.t diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index a71892a55..31f97fa8c 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -35,6 +35,7 @@ - fixed #11083: TGC template bug fixes, round #1 - fixed #10544: Child assets under uncommitted parents - fixed failure in test 250 of t/00_compile.t + - fixed #11084: option to view private profiles 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/docs/upgrades/packages-7.7.22/root_import_collaboration.wgpkg b/docs/upgrades/packages-7.7.22/root_import_collaboration.wgpkg new file mode 100644 index 0000000000000000000000000000000000000000..ec10bf3e75d16529fb51c9f790723d3bc1d2fcf1 GIT binary patch literal 38883 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 z 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ʆWG|OlFWl@3v=S5M!|F& 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 literal 0 HcmV?d00001 diff --git a/lib/WebGUI/Asset/Post.pm b/lib/WebGUI/Asset/Post.pm index ad8d9e113..6f1dd7c22 100644 --- a/lib/WebGUI/Asset/Post.pm +++ b/lib/WebGUI/Asset/Post.pm @@ -710,30 +710,31 @@ Returns a hash reference of template variables for this Post. =cut sub getTemplateVars { - my $self = shift; + my $self = shift; my $session = $self->session; - my %var = %{$self->get}; + my %var = %{$self->get}; my $postUser = WebGUI::User->new($session, $self->get("ownerUserId")); - $var{"userId"} = $self->get("ownerUserId"); - $var{"user.isPoster"} = $self->isPoster; - $var{"avatar.url"} = $self->getAvatarUrl; - $var{"userProfile.url"} = $postUser->getProfileUrl($self->getUrl()); - $var{"dateSubmitted.human"} =$self->session->datetime->epochToHuman($self->get("creationDate")); - $var{"dateUpdated.human"} =$self->session->datetime->epochToHuman($self->get("revisionDate")); - $var{'title.short'} = $self->chopTitle; - $var{content} = $self->formatContent if ($self->getThread); - $var{'user.canEdit'} = $self->canEdit if ($self->getThread); - $var{"delete.url"} = $self->getDeleteUrl; - $var{"edit.url"} = $self->getEditUrl; - $var{"status"} = $self->getStatus; - $var{"reply.url"} = $self->getReplyUrl; - $var{'reply.withquote.url'} = $self->getReplyUrl(1); - $var{'url'} = $self->getUrl.'#id'.$self->getId; - $var{'url.raw'} = $self->getUrl; - $var{'rating.value'} = $self->get("rating")+0; - $var{'rate.url.thumbsUp'} = $self->getRateUrl(1); - $var{'rate.url.thumbsDown'} = $self->getRateUrl(-1); - $var{'hasRated'} = $self->hasRated; + $var{"userId"} = $self->get("ownerUserId"); + $var{"user.isPoster"} = $self->isPoster; + $var{"avatar.url"} = $self->getAvatarUrl; + $var{"userProfile.url"} = $postUser->getProfileUrl($self->getUrl()); + $var{"hideProfileUrl" } = $self->get('ownerUserId') eq '1' || $session->user->isVisitor; + $var{"dateSubmitted.human"} = $self->session->datetime->epochToHuman($self->get("creationDate")); + $var{"dateUpdated.human"} = $self->session->datetime->epochToHuman($self->get("revisionDate")); + $var{'title.short'} = $self->chopTitle; + $var{content} = $self->formatContent if ($self->getThread); + $var{'user.canEdit'} = $self->canEdit if ($self->getThread); + $var{"delete.url"} = $self->getDeleteUrl; + $var{"edit.url"} = $self->getEditUrl; + $var{"status"} = $self->getStatus; + $var{"reply.url"} = $self->getReplyUrl; + $var{'reply.withquote.url'} = $self->getReplyUrl(1); + $var{'url'} = $self->getUrl.'#id'.$self->getId; + $var{'url.raw'} = $self->getUrl; + $var{'rating.value'} = $self->get("rating")+0; + $var{'rate.url.thumbsUp'} = $self->getRateUrl(1); + $var{'rate.url.thumbsDown'} = $self->getRateUrl(-1); + $var{'hasRated'} = $self->hasRated; my $gotImage; my $gotAttachment; @{$var{'attachment_loop'}} = (); diff --git a/lib/WebGUI/Asset/Wobject/Collaboration.pm b/lib/WebGUI/Asset/Wobject/Collaboration.pm index 0f3efef69..8d13c67a4 100644 --- a/lib/WebGUI/Asset/Wobject/Collaboration.pm +++ b/lib/WebGUI/Asset/Wobject/Collaboration.pm @@ -100,14 +100,16 @@ A reference to a WebGUI::Paginator object. =cut sub appendPostListTemplateVars { - my $self = shift; - my $var = shift; - my $p = shift; - my $page = $p->getPageData; - my $i = 0; - my ($icon, $datetime) = $self->session->quick(qw(icon datetime)); + my $self = shift; + my $session = $self->session; + my $var = shift; + my $p = shift; + my $page = $p->getPageData; + my $i = 0; + my ($icon, $datetime) = $session->quick(qw(icon datetime)); + my $isVisitor = $session->user->isVisitor; foreach my $row (@$page) { - my $post = WebGUI::Asset->new($self->session,$row->{assetId}, $row->{className}, $row->{revisionDate}); + my $post = WebGUI::Asset->new($session,$row->{assetId}, $row->{className}, $row->{revisionDate}); $post->{_parent} = $self; # caching parent for efficiency my $controls = $icon->delete('func=delete',$post->get("url"),"Delete") . $icon->edit('func=edit',$post->get("url")); if ($self->get("sortBy") eq "lineage") { @@ -132,6 +134,7 @@ sub appendPostListTemplateVars { "lastReply.title" => $lastPost->get("title"), "lastReply.user.isVisitor" => $lastPost->get("ownerUserId") eq "1", "lastReply.username" => $lastPost->get("username"), + "lastReply.hideProfileUrl" => $lastPost->get("ownerUserId") eq "1" || $isVisitor, "lastReply.userProfile.url" => $lastPost->getPosterProfileUrl(), "lastReply.dateSubmitted.human" => $datetime->epochToHuman($lastPost->get("creationDate"),"%z"), "lastReply.timeSubmitted.human" => $datetime->epochToHuman($lastPost->get("creationDate"),"%Z"), @@ -158,6 +161,7 @@ sub appendPostListTemplateVars { "dateUpdated.human" => $datetime->epochToHuman($post->get("revisionDate"),"%z"), "timeSubmitted.human" => $datetime->epochToHuman($post->get("creationDate"),"%Z"), "timeUpdated.human" => $datetime->epochToHuman($post->get("revisionDate"),"%Z"), + "hideProfileUrl" => $post->get('ownerUserId') eq '1' || $isVisitor, "userProfile.url" => $post->getPosterProfileUrl, "user.isVisitor" => $post->get("ownerUserId") eq "1", "edit.url" => $post->getEditUrl, @@ -175,7 +179,7 @@ sub appendPostListTemplateVars { if ($row->{className} =~ m/^WebGUI::Asset::Post::Thread/) { $postVars{'rating'} = $post->get('threadRating'); } - push(@{$var->{post_loop}}, \%postVars ); + push(@{$var->{post_loop}}, \%postVars ); $i++; } $p->appendTemplateVars($var); @@ -1222,10 +1226,10 @@ sub getViewTemplateVars { my %var; $var{'user.canPost'} = $self->canPost; $var{'user.canStartThread'} = $self->canStartThread; - $var{"add.url"} = $self->getNewThreadUrl; - $var{"rss.url"} = $self->getRssFeedUrl; - $var{'user.isModerator'} = $self->canModerate; - $var{'user.isVisitor'} = ($self->session->user->isVisitor); + $var{"add.url"} = $self->getNewThreadUrl; + $var{"rss.url"} = $self->getRssFeedUrl; + $var{'user.isModerator'} = $self->canModerate; + $var{'user.isVisitor'} = ($self->session->user->isVisitor); $var{'user.isSubscribed'} = $self->isSubscribed; $var{'sortby.title.url'} = $self->getSortByUrl("title"); $var{'sortby.username.url'} = $self->getSortByUrl("username"); diff --git a/lib/WebGUI/Help/Asset_Collaboration.pm b/lib/WebGUI/Help/Asset_Collaboration.pm index e830ad16f..4605ec3d4 100644 --- a/lib/WebGUI/Help/Asset_Collaboration.pm +++ b/lib/WebGUI/Help/Asset_Collaboration.pm @@ -103,7 +103,9 @@ our $HELP = { { 'name' => 'timeSubmitted.human' }, { 'name' => 'timeUpdated.human' }, { 'name' => 'userProfile.url' }, - { 'name' => 'user.isVisitor' }, + { 'name' => 'hideProfileUrl' }, + { 'name' => 'user.isVisitor', + 'description' => 'post_loop_user.isVisitor' }, { 'name' => 'edit.url' }, { 'name' => 'controls' }, { 'name' => 'isSecond' }, @@ -116,6 +118,7 @@ our $HELP = { { 'name' => 'lastReply.url' }, { 'name' => 'lastReply.title' }, { 'name' => 'lastReply.user.isVisitor' }, + { 'name' => 'lastReply.hideProfileUrl' }, { 'name' => 'lastReply.username' }, { 'name' => 'lastReply.userProfile.url' }, { 'name' => 'lastReply.dateSubmitted.human' }, diff --git a/lib/WebGUI/i18n/English/Asset_Collaboration.pm b/lib/WebGUI/i18n/English/Asset_Collaboration.pm index 170eedc82..ad2d4d40c 100644 --- a/lib/WebGUI/i18n/English/Asset_Collaboration.pm +++ b/lib/WebGUI/i18n/English/Asset_Collaboration.pm @@ -1293,11 +1293,21 @@ the preview is displayed, the Post can either be edited or canceled.|, lastUpdated => 1149655722, }, - 'user.isVisitor' => { + 'post_loop_user.isVisitor' => { message => q|A conditional that is true if the poster is a visitor.|, lastUpdated => 1149655722, }, + 'user.isVisitor' => { + message => q|A conditional that is true if the current user is a visitor.|, + lastUpdated => 1149655722, + }, + + 'hideProfileUrl' => { + message => q|A conditional that is true if the poster is a visitor, or the current user is a visitor. In the first case, Visitor's profile is not visible to any user. In the second case, Visitor is not allowed to view any user's profile|, + lastUpdated => 1254506340, + }, + 'edit.url' => { message => q|The URL to edit this Post.|, lastUpdated => 1149655722, @@ -1359,6 +1369,11 @@ user has an avatar.|, lastUpdated => 1149655722, }, + 'lastReply.hideProfileUrl' => { + message => q|A conditional that is true if the poster of the last reply is a visitor, or the current user is a visitor. In the first case, Visitor's profile is not visible to any user. In the second case, Visitor is not allowed to view any user's profile|, + lastUpdated => 1254506340, + }, + 'lastReply.username' => { message => q|The name of user who submitted the last reply.|, lastUpdated => 1149655722, diff --git a/lib/WebGUI/i18n/English/Asset_Template.pm b/lib/WebGUI/i18n/English/Asset_Template.pm index 5b4319033..f381d584e 100644 --- a/lib/WebGUI/i18n/English/Asset_Template.pm +++ b/lib/WebGUI/i18n/English/Asset_Template.pm @@ -33,9 +33,9 @@ our $I18N = { }, 'template error' => { - message => q|There is a syntax error in this template, %s, %s. Please correct.|, + message => q|There is a syntax error in this template, %s, %s, %s. Please correct.|, context => q|Error when executing template|, - lastUpdated => 1244476530, + lastUpdated => 1254512327, }, 'namespace description' => { diff --git a/t/Asset/Post.t b/t/Asset/Post.t index 81fa89265..ec495ae1a 100644 --- a/t/Asset/Post.t +++ b/t/Asset/Post.t @@ -8,13 +8,6 @@ # http://www.plainblack.com info@plainblack.com #------------------------------------------------------------------- -# XXX I (chrisn) started this file to test the features I added to the -# Collaboration / Post system for 7.5, but didn't have the time available to me -# to do a full test suite for the Post Wobject. This means that this test suite -# is *largely incomplete* and should be finished. What is here *is* the -# following: -# -# # 1. The basic framework for a test suite for the Post Asset. # Includes setup, cleanup, boilerplate, etc. Basically the really boring, # repetitive parts of the test that you don't want to write yourself. @@ -26,7 +19,7 @@ use strict; use lib "$FindBin::Bin/../lib"; use WebGUI::Test; use WebGUI::Session; -use Test::More tests => 9; # increment this value for each test you create +use Test::More tests => 16; # increment this value for each test you create use WebGUI::Asset::Wobject::Collaboration; use WebGUI::Asset::Post; use WebGUI::Asset::Post::Thread; @@ -114,7 +107,11 @@ ok($post->canEdit(), "User in groupToEditPost group can edit post after the time $session->user({userId => $groupIdEditUser->userId}); ok($post->canEdit(), "User in groupIdEditUserGroup group can edit post after the timeout"); +###################################################################### +# # getSynopsisAndContent +# +###################################################################### my ($synopsis, $content) = $post->getSynopsisAndContent('', q|Brandheiße Neuigkeiten rund um's Klettern für euch aus der Region |); is($synopsis, q|Brandheiße Neuigkeiten rund um's Klettern für euch aus der Region |, 'getSynopsisAndContent: UTF8 characters okay'); @@ -132,9 +129,40 @@ is($synopsis, q|less than < greater than >|, '... HTML escaped characters ($synopsis, $content) = $post->getSynopsisAndContent('', q|

less than < greater than >

|); is($synopsis, q|less than < greater than >|, '... HTML entities decoded by HTML::splitTag'); -TODO: { - local $TODO = "Tests to make later"; - ok(0, 'Whole lot more work to do here'); -} +###################################################################### +# +# getTemplateVars +# +###################################################################### + +my $versionTag2 = WebGUI::VersionTag->getWorking($session); +my $post1 = $collab->addChild({ + className => 'WebGUI::Asset::Post::Thread', + content => 'hello, world!', + ownerUserId => 3, +}, @addArgs); +my $post2 = $collab->addChild({ + className => 'WebGUI::Asset::Post::Thread', + content => 'hello, world!', + ownerUserId => 1, +}, @addArgs); +$versionTag2->commit(); +WebGUI::Test->tagsToRollback($versionTag); +my $variables; +$session->user({userId => 1}); +$variables = $post1->getTemplateVars(); +is( $variables->{'ownerUserId'}, 3, 'first post owned by admin'); +ok( $variables->{'hideProfileUrl'}, 'hide profile url, since current user is visitor'); +$variables = $post2->getTemplateVars(); +is( $variables->{'ownerUserId'}, 1, 'first post owned by admin'); +ok( $variables->{'hideProfileUrl'}, 'hide profile url, since current user is visitor'); + +$session->user({userId => 3}); +$variables = $post1->getTemplateVars(); +is( $variables->{'ownerUserId'}, 3, 'first post owned by admin'); +ok( !$variables->{'hideProfileUrl'}, 'show profile url'); +$variables = $post2->getTemplateVars(); +is( $variables->{'ownerUserId'}, 1, 'first post owned by admin'); +ok( $variables->{'hideProfileUrl'}, 'hide profile url, since poster is visitor'); # vim: syntax=perl filetype=perl diff --git a/t/Asset/Wobject/Collaboration/templateVariables.t b/t/Asset/Wobject/Collaboration/templateVariables.t new file mode 100644 index 000000000..c71790d45 --- /dev/null +++ b/t/Asset/Wobject/Collaboration/templateVariables.t @@ -0,0 +1,92 @@ +# vim:syntax=perl +#------------------------------------------------------------------- +# WebGUI is Copyright 2001-2009 Plain Black Corporation. +#------------------------------------------------------------------- +# Please read the legal notices (docs/legal.txt) and the license +# (docs/license.txt) that came with this distribution before using +# this software. +#------------------------------------------------------------------ +# http://www.plainblack.com info@plainblack.com +#------------------------------------------------------------------ + +# Test the Collaboration system template variables +# +# + +use FindBin; +use strict; +use lib "$FindBin::Bin/../../../lib"; +use WebGUI::Test; # Must use this before any other WebGUI modules +use Test::More; +use Test::Deep; +use Data::Dumper; +use WebGUI::Session; + +#---------------------------------------------------------------------------- +# Tests +plan tests => 20; # Increment this number for each test you create + +#---------------------------------------------------------------------------- +# Init +my $session = WebGUI::Test->session; +my @addChildArgs = ( {skipAutoCommitWorkflows=>1} ); +my $collab = WebGUI::Asset->getImportNode( $session )->addChild({ + className => 'WebGUI::Asset::Wobject::Collaboration', + threadsPerPage => 20, + displayLastReply => 1, +}); + +my @threads = ( + $collab->addChild( { + className => 'WebGUI::Asset::Post::Thread', + title => "X - Foo", + isSticky => 0, + ownerUserId => 1, + }, undef, 1, @addChildArgs), + $collab->addChild( { + className => 'WebGUI::Asset::Post::Thread', + title => "X - Bar", + isSticky => 0, + ownerUserId => 3, + }, undef, 2, @addChildArgs), +); + +$_->setSkipNotification for @threads; # 100+ messages later... +my $versionTag = WebGUI::VersionTag->getWorking( $session ); +$versionTag->commit; +WebGUI::Test->tagsToRollback($versionTag); + +my $templateVars; +my $posts; +$session->user({userId => 3}); +$templateVars = $collab->getViewTemplateVars(); + +##Threads come in reverse order, most recent first +$posts = $templateVars->{post_loop}; +is( $posts->[1]->{'ownerUserId'}, 1, 'first post owned by visitor'); +ok( $posts->[1]->{'user.isVisitor'}, 'first post made by visitor'); +ok( $posts->[1]->{'hideProfileUrl'}, 'hide profile url, since post made by visitor'); +ok( $posts->[1]->{'lastReply.user.isVisitor'}, 'lastReply not made by visitor'); +ok( $posts->[1]->{'lastReply.hideProfileUrl'}, 'lastReply show profile url, since post not made by visitor, and user is not visitor'); +is( $posts->[0]->{'ownerUserId'}, 3, 'second post owned by admin'); +ok( !$posts->[0]->{'user.isVisitor'}, 'first post made by visitor'); +ok( !$posts->[0]->{'hideProfileUrl'}, 'show profile url, since post made by admin, and user is not visitor'); +ok( !$posts->[0]->{'lastReply.user.isVisitor'}, 'lastReply not made by visitor'); +ok( !$posts->[0]->{'lastReply.hideProfileUrl'}, 'lastReply show profile url, since post not made by visitor, and user is not visitor'); + +$session->user({userId => 1}); +$templateVars = $collab->getViewTemplateVars(); + +##Threads come in reverse order, most recent first +$posts = $templateVars->{post_loop}; +is( $posts->[1]->{'ownerUserId'}, 1, 'first post owned by visitor'); +ok( $posts->[1]->{'user.isVisitor'}, 'first post made by visitor'); +ok( $posts->[1]->{'hideProfileUrl'}, 'hide profile url, since current user is visitor'); +ok( $posts->[1]->{'lastReply.user.isVisitor'}, 'lastReply not made by visitor'); +ok( $posts->[1]->{'lastReply.hideProfileUrl'}, 'lastReply hide profile url, since user is visitor'); +is( $posts->[0]->{'ownerUserId'}, 3, 'second post owned by admin'); +ok( !$posts->[0]->{'user.isVisitor'}, 'first post made by visitor'); +ok( $posts->[0]->{'hideProfileUrl'}, 'hide profile url, and user is visitor'); +ok( !$posts->[0]->{'lastReply.user.isVisitor'}, 'lastReply not made by visitor'); +ok( $posts->[0]->{'lastReply.hideProfileUrl'}, 'lastReply hide profile url, since user is visitor'); +#vim:ft=perl From 62cb3a4b9c92841e7be8f18f8c985d6e789d1f55 Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Fri, 2 Oct 2009 14:21:29 -0500 Subject: [PATCH 09/18] correct error detection code in export --- lib/WebGUI/AssetExportHtml.pm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/WebGUI/AssetExportHtml.pm b/lib/WebGUI/AssetExportHtml.pm index 708004fa1..95b522d41 100644 --- a/lib/WebGUI/AssetExportHtml.pm +++ b/lib/WebGUI/AssetExportHtml.pm @@ -791,14 +791,15 @@ sub exportWriteFile { my $dest = $self->exportGetUrlAsPath; my $parent = $dest->parent; - eval { $parent->absolute->mkpath }; - if($@) { - WebGUI::Error->throw(error => "could not make directory " . $parent->absolute->stringify); + $parent->absolute->mkpath( {error => \my $err} ); + if (@$err) { + (undef, my $message) = %{ $err->[0] }; + WebGUI::Error->throw(error => "Could not make directory " . $parent->absolute->stringify . ": " . $message); } # next, get the contents, open the file, and write the contents to the file. my $fh = eval { $dest->open('>:utf8') }; - if($@) { + if(! $fh) { WebGUI::Error->throw(error => "can't open " . $dest->absolute->stringify . " for writing: $!"); } $self->session->asset($self); From 26f7dd8bca945f412c06b29ce2f94d8087c1f764 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 2 Oct 2009 14:09:06 -0700 Subject: [PATCH 10/18] Bug #11082: Admin group has been removed from Visitor Group. --- docs/changelog/7.x.x.txt | 1 + docs/upgrades/upgrade_7.8.0-7.8.1.pl | 18 ++++++++++++++++++ t/Group.t | 6 +----- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 31f97fa8c..bdddcb11d 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -36,6 +36,7 @@ - fixed #10544: Child assets under uncommitted parents - fixed failure in test 250 of t/00_compile.t - fixed #11084: option to view private profiles + - fixed #11082: Admin group in Visitor group? 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/docs/upgrades/upgrade_7.8.0-7.8.1.pl b/docs/upgrades/upgrade_7.8.0-7.8.1.pl index 73529e4c0..54c1d4959 100644 --- a/docs/upgrades/upgrade_7.8.0-7.8.1.pl +++ b/docs/upgrades/upgrade_7.8.0-7.8.1.pl @@ -37,6 +37,7 @@ removeOldITransactTables( $session ); removeSQLFormTables( $session ); fixBadRevisionDateColumns( $session ); removeImportCruft( $session ); +removeAdminFromVisitorGroup( $session ); finish($session); # this line required @@ -50,6 +51,7 @@ finish($session); # this line required # print "DONE!\n" unless $quiet; #} +#---------------------------------------------------------------------------- # Describe what our function does sub fixBadRevisionDateColumns { my $session = shift; @@ -62,6 +64,7 @@ sub fixBadRevisionDateColumns { print "Done.\n" unless $quiet; } +#---------------------------------------------------------------------------- # Describe what our function does sub removeSQLFormTables { my $session = shift; @@ -74,6 +77,7 @@ sub removeSQLFormTables { print "Done.\n" unless $quiet; } +#---------------------------------------------------------------------------- # Describe what our function does sub removeOldSubscriptionTables { my $session = shift; @@ -84,6 +88,7 @@ sub removeOldSubscriptionTables { print "Done.\n" unless $quiet; } +#---------------------------------------------------------------------------- # Describe what our function does sub removeOldITransactTables { my $session = shift; @@ -92,6 +97,17 @@ sub removeOldITransactTables { print "Done.\n" unless $quiet; } +#---------------------------------------------------------------------------- +# Describe what our function does +sub removeAdminFromVisitorGroup { + my $session = shift; + print "\tRemoving Admin group from Visitor group... " unless $quiet; + $session->db->write("delete from groupGroupings where groupId='3' and inGroup='1'"); + print "Done.\n" unless $quiet; +} + + +#---------------------------------------------------------------------------- # Describe what our function does sub fixWikis { my $session = shift; @@ -101,6 +117,7 @@ sub fixWikis { print "Done.\n" unless $quiet; } +#---------------------------------------------------------------------------- # Describe what our function does sub fixEMSTemplates { my $session = shift; @@ -110,6 +127,7 @@ sub fixEMSTemplates { print "Done.\n" unless $quiet; } +#---------------------------------------------------------------------------- # Describe what our function does sub removeImportCruft { my $session = shift; diff --git a/t/Group.t b/t/Group.t index 61dd929e3..d1cf801c4 100644 --- a/t/Group.t +++ b/t/Group.t @@ -75,7 +75,7 @@ my @ipTests = ( ); -plan tests => (152 + scalar(@scratchTests) + scalar(@ipTests)); # increment this value for each test you create +plan tests => (151 + scalar(@scratchTests) + scalar(@ipTests)); # increment this value for each test you create my $session = WebGUI::Test->session; my $testCache = WebGUI::Cache->new($session, 'myTestKey'); @@ -660,10 +660,6 @@ ok( !$cacheDude->isInGroup($gB->getId), "Cache dude is not a member of group B") ##Admin group inclusion check. -my $vgroup = WebGUI::Group->new($session, 1); -my $vgroups = $vgroup->getGroupsIn(); -ok( isIn(3, @{ $vgroups }), 'Admin Group is in Group Visitor'); - SKIP: { skip("need to test expiration date in groupings interacting with recursive or not", 1); ok(undef, "expiration date in groupings for getUser"); From 0e09072bc0370003414712ebed3692b6d1bfda4d Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Fri, 2 Oct 2009 16:14:35 -0700 Subject: [PATCH 11/18] Prevent dataform from caching when the form contains a captcha. Fixes bug #11049 --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/DataForm.pm | 6 ++++-- t/Asset/Wobject/DataForm.t | 30 +++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index bdddcb11d..837c0bada 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -37,6 +37,7 @@ - fixed failure in test 250 of t/00_compile.t - fixed #11084: option to view private profiles - fixed #11082: Admin group in Visitor group? + - fixed #11049: form caching incorrectly 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/lib/WebGUI/Asset/Wobject/DataForm.pm b/lib/WebGUI/Asset/Wobject/DataForm.pm index b00b53d17..98ad15708 100644 --- a/lib/WebGUI/Asset/Wobject/DataForm.pm +++ b/lib/WebGUI/Asset/Wobject/DataForm.pm @@ -27,6 +27,7 @@ use WebGUI::Asset::Wobject; use WebGUI::Pluggable; use WebGUI::DateTime; use WebGUI::User; +use WebGUI::Utility; use WebGUI::Group; use WebGUI::AssetCollateral::DataForm::Entry; use WebGUI::Form::SelectRichEditor; @@ -225,7 +226,8 @@ an entry is being viewed, bypass caching altogether. sub getContentLastModified { my $self = shift; - if ($self->currentView eq 'list' || $self->session->form->process('entryId')) { + my $hasCaptcha = isIn('Captcha', map { $_->{type} } map { $self->getFieldConfig($_) } @{ $self->getFieldOrder }); + if ($self->currentView eq 'list' || $self->session->form->process('entryId') || $hasCaptcha) { return time; } return $self->SUPER::getContentLastModified; @@ -1597,7 +1599,7 @@ sub www_editFieldSave { $newSelf->createField($newName, \%field); } - WebGUI::VersionTag->autoCommitWorkingIfEnabled($self->session); + WebGUI::VersionTag->autoCommitWorkingIfEnabled($session); my $freshSelf = $newSelf->cloneFromDb(); if ($form->process("proceed") eq "editField") { return $freshSelf->www_editField('new'); diff --git a/t/Asset/Wobject/DataForm.t b/t/Asset/Wobject/DataForm.t index e268db0b5..0d3d7ab1e 100644 --- a/t/Asset/Wobject/DataForm.t +++ b/t/Asset/Wobject/DataForm.t @@ -36,6 +36,12 @@ my $df = WebGUI::Asset->getImportNode( $session ) fieldConfiguration => '[]', } ); +my $dform = WebGUI::Asset->getDefault($session)->addChild({ + className => "WebGUI::Asset::Wobject::DataForm", + mailData => 0, +}); +$dform->createField('gotCaptcha', { type => 'Captcha', name => 'humanCheck', }); + my $versionTag = WebGUI::VersionTag->getWorking($session); WebGUI::Test->tagsToRollback($versionTag); $versionTag->commit; @@ -43,7 +49,7 @@ $versionTag->commit; #---------------------------------------------------------------------------- # Tests -plan tests => 1; # Increment this number for each test you create +plan tests => 4; # Increment this number for each test you create #---------------------------------------------------------------------------- # _createForm @@ -60,4 +66,26 @@ $df->_createForm( is($WebGUI::Test::logger_error, "Unable to load form control - MASSIVE FORM FAILURE", '_createForm logs when it cannot load a form type'); +#---------------------------------------------------------------------------- +# getContentLastModified + +sleep 3; + +$df->{_mode} = 'form'; +is($df->getContentLastModified, $df->get('lastModified'), 'getContentLastModified: form normally returns lastModified'); +$df->{_mode} = 'list'; +cmp_ok( + $df->getContentLastModified, + '>', + $df->get('lastModified'), + '... form in list mode does not return lastModified' +); +$dform->{_mode} = 'form'; +cmp_ok( + $dform->getContentLastModified, + '>', + $dform->get('lastModified'), + '... form with a captcha does not return lastModified, even in form mode' +); + #vim:ft=perl From a4c2908d03ab32dbd64193e501b8fa6e61286ce8 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 5 Oct 2009 09:30:47 -0700 Subject: [PATCH 12/18] Move updated collaboration package to correct updgrade directory. --- .../root_import_collaboration.wgpkg | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/upgrades/{packages-7.7.22 => packages-7.8.1}/root_import_collaboration.wgpkg (100%) diff --git a/docs/upgrades/packages-7.7.22/root_import_collaboration.wgpkg b/docs/upgrades/packages-7.8.1/root_import_collaboration.wgpkg similarity index 100% rename from docs/upgrades/packages-7.7.22/root_import_collaboration.wgpkg rename to docs/upgrades/packages-7.8.1/root_import_collaboration.wgpkg From 1953e71d76971d4095a0f056433eb04b0d674d9f Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 5 Oct 2009 10:16:46 -0700 Subject: [PATCH 13/18] www_loadSurvey has to process its own macros. Fixes bug #11088. --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/Survey.pm | 3 +++ t/Asset/Wobject/Survey.t | 18 +++++++++++------- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index 837c0bada..d94b735c1 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -38,6 +38,7 @@ - fixed #11084: option to view private profiles - fixed #11082: Admin group in Visitor group? - fixed #11049: form caching incorrectly + - fixed #11088: i18n Survey Section Information 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/lib/WebGUI/Asset/Wobject/Survey.pm b/lib/WebGUI/Asset/Wobject/Survey.pm index 58022db24..37bbbb0e0 100644 --- a/lib/WebGUI/Asset/Wobject/Survey.pm +++ b/lib/WebGUI/Asset/Wobject/Survey.pm @@ -24,6 +24,7 @@ use WebGUI::Form::Country; use WebGUI::VersionTag; use Text::CSV_XS; use Params::Validate qw(:all); +use WebGUI::Macro; Params::Validate::validation_options( on_fail => sub { WebGUI::Error::InvalidParam->throw( error => shift ) } ); my $TAP_PARSER_MISSING = <processTemplate( $var, $self->get('answerEditTemplateId') ); } + WebGUI::Macro::process($self->session, \$editHtml); + # Generate the list of valid goto targets my $gotoTargets = $self->surveyJSON->getGotoTargets; diff --git a/t/Asset/Wobject/Survey.t b/t/Asset/Wobject/Survey.t index 05a7fdc4f..113277888 100644 --- a/t/Asset/Wobject/Survey.t +++ b/t/Asset/Wobject/Survey.t @@ -18,18 +18,13 @@ my $session = WebGUI::Test->session; #---------------------------------------------------------------------------- # Tests -my $tests = 46; -plan tests => $tests + 1; +plan tests => 47; #---------------------------------------------------------------------------- # put your tests here -my $usedOk = use_ok('WebGUI::Asset::Wobject::Survey'); my ($survey); -SKIP: { - -skip $tests, "Unable to load Survey" unless $usedOk; my $user = WebGUI::User->new( $session, 'new' ); WebGUI::Test->usersToDelete($user); my $import_node = WebGUI::Asset->getImportNode($session); @@ -252,7 +247,6 @@ cmp_deeply(from_json($surveyEnd), { type => 'forward', url => '/getting_started' is($survey->responseJSON->nextResponseSection()->{text}, 'new text', '..wheras the original response uses the original text'); } -} # Test visualization eval 'use GraphViz'; @@ -314,3 +308,13 @@ cmp_deeply( ], "Admin console submenu", ); + +#################################################### +# +# www_loadSurvey +# +#################################################### + +my $survey_json = $survey->www_loadSurvey({}); +my $survey_data = JSON::from_json($survey_json); +unlike($survey_data->{edithtml}, qr/\^International/, 'www_loadSurvey process macros'); From a9f6220240ec301faf27382b5a1317b63f96b919 Mon Sep 17 00:00:00 2001 From: Colin Kuskie Date: Mon, 5 Oct 2009 11:38:48 -0700 Subject: [PATCH 14/18] Fix undef template variables in the SC. Fixes bug #11087 --- docs/changelog/7.x.x.txt | 1 + lib/WebGUI/Asset/Wobject/SyndicatedContent.pm | 3 +- t/Asset/Wobject/SyndicatedContent.t | 39 ++++++++++++++++--- 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index d94b735c1..e83508412 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -39,6 +39,7 @@ - fixed #11082: Admin group in Visitor group? - fixed #11049: form caching incorrectly - fixed #11088: i18n Survey Section Information + - fixed #11087: SC asset repeats its own description in feeds 7.8.0 - upgraded YUI to 2.8.0r4 diff --git a/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm b/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm index aaaff5316..d11e31757 100644 --- a/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm +++ b/lib/WebGUI/Asset/Wobject/SyndicatedContent.pm @@ -266,7 +266,8 @@ sub getTemplateVariables { $item{author} = WebGUI::HTML::filter(scalar $object->author, 'javascript'); $item{guid} = WebGUI::HTML::filter(scalar $object->guid, 'javascript'); $item{link} = WebGUI::HTML::filter(scalar $object->link, 'javascript'); - $item{description} = WebGUI::HTML::filter(scalar($object->description), 'javascript'); + my $description = WebGUI::HTML::filter(scalar($object->description), 'javascript'); + $item{description} = defined $description ? $description : ''; $item{descriptionFirst100words} = $item{description}; $item{descriptionFirst100words} =~ s/(((\S+)\s+){100}).*/$1/s; $item{descriptionFirst75words} = $item{descriptionFirst100words}; diff --git a/t/Asset/Wobject/SyndicatedContent.t b/t/Asset/Wobject/SyndicatedContent.t index cec27fb6b..d0845ad43 100644 --- a/t/Asset/Wobject/SyndicatedContent.t +++ b/t/Asset/Wobject/SyndicatedContent.t @@ -20,13 +20,12 @@ use Data::Dumper; use WebGUI::Test; use WebGUI::Session; -use Test::More tests => 19; # increment this value for each test you create +use Test::More tests => 20; # increment this value for each test you create use WebGUI::Asset::Wobject::SyndicatedContent; use XML::FeedPP; my $session = WebGUI::Test->session; my %var; -my (@rss_feeds); ############################## ## SETUP ## @@ -37,6 +36,7 @@ my $node = WebGUI::Asset->getImportNode($session); # Create a version tag to work in my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->set({name=>"SyndicatedContent Test"}); +WebGUI::Test->tagsToRollback($versionTag); my $syndicated_content = $node->addChild({className=>'WebGUI::Asset::Wobject::SyndicatedContent'}); ############################## @@ -106,8 +106,35 @@ cmp_ok(scalar(@{$var->{item_loop}}), '>', 0, 'the item loop has items'); my $processed_template = eval {$syndicated_content->processTemplate($var,undef,$template) }; ok($processed_template, "A response was received from processTemplate."); -END { - # Clean up after thy self - $versionTag->rollback(); -} +#################################################################### +# +# getTemplateVariables +# +#################################################################### +##Construct a feed with no description, so the resulting template variables can +##be checked for an undef description +my $feed = XML::FeedPP->new(< + +Revision Log - /WebGUI/ + + + + +1970-01-01T00:53:41 + +12312 - Ready for 7.7.20 development. + + + +colin + +https://svn.webgui.org/svnweb/plainblack/revision?rev=12312 +1970-01-01T00:53:41 +1970-01-01T00:53:41 + +EOFEED + +my $vars = $syndicated_content->getTemplateVariables($feed); +ok( defined $vars->{item_loop}->[0]->{description}, 'getTemplateVariables: description is not undefined'); From 2a1f038ba17c14d16d28fc0019438693285bd5ed Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Fri, 2 Oct 2009 18:55:39 -0500 Subject: [PATCH 15/18] small cleanups to storage test --- t/Storage.t | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/t/Storage.t b/t/Storage.t index cac8dd8eb..caabc8be5 100644 --- a/t/Storage.t +++ b/t/Storage.t @@ -91,10 +91,8 @@ is($guidStorage->getDirectoryId, $newGuid, '... getDirectoryId'); # #################################################### -my $savecdn = $session->config->get('cdn'); -if ($savecdn) { - $session->config->delete('cdn'); -} +WebGUI::Test->originalConfig('cdn'); +$session->config->delete('cdn'); # Note: the CDN configuration will be reverted after CDN tests below my $storageDir1 = join '/', $uploadDir, '7e', '8a', '7e8a1b6a'; @@ -530,10 +528,7 @@ my $cdnCfg = { "syncProgram" => "cp -r -- '%s' $cdnTestPath/", "deleteProgram" => "rm -r -- '$cdnTestPath/%s' > /dev/null 2>&1" }; -my ($addedCdnQ, $addedCdnU); -$addedCdnQ = mkdir $cdnCfg->{'queuePath'} unless -e $cdnCfg->{'queuePath'}; my $dest = substr($cdnCfg->{'url'}, 7); -$addedCdnU = mkdir $dest unless -e $dest; $session->config->set('cdn', $cdnCfg); my $cdnUrl = $cdnCfg->{'url'}; my $cdnUlen = length $cdnUrl; @@ -715,11 +710,4 @@ END { ) { ref $stor eq "WebGUI::Storage" and $stor->delete; } - if ($savecdn) { - $session->config->set('cdn', $savecdn); - } else { - $session->config->delete('cdn'); - } - $addedCdnQ and rmdir $addedCdnQ; - $addedCdnU and rmdir $addedCdnU; } From 5ecc986ec6dfbe985cc4d6531755f4e7ccfad0dd Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Mon, 5 Oct 2009 11:02:37 -0500 Subject: [PATCH 16/18] prevent duplicate package importing in upgrades from failing --- lib/WebGUI/AssetPackage.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WebGUI/AssetPackage.pm b/lib/WebGUI/AssetPackage.pm index c0c5ab51b..8420444be 100644 --- a/lib/WebGUI/AssetPackage.pm +++ b/lib/WebGUI/AssetPackage.pm @@ -137,7 +137,7 @@ sub importAssetData { my $error = $self->session->errorHandler; my $id = $data->{properties}{assetId}; my $class = $data->{properties}{className}; - my $version = $options->{overwriteLatest} ? 0 : $data->{properties}{revisionDate}; + my $version = $options->{overwriteLatest} ? time : $data->{properties}{revisionDate}; # Load the class WebGUI::Asset->loadModule( $self->session, $class ); From 60a4a9b1407b7d82a0294e68666ca5259d318c31 Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Mon, 5 Oct 2009 20:56:37 -0500 Subject: [PATCH 17/18] mark $session->datetime->time as deprecated and remove its use from core code --- docs/changelog/7.x.x.txt | 1 + docs/upgrades/_upgrade.skeleton | 2 +- docs/upgrades/upgrade_7.6.14-7.7.0.pl | 2 +- docs/upgrades/upgrade_7.6.35-7.7.17.pl | 2 +- docs/upgrades/upgrade_7.7.0-7.7.1.pl | 2 +- docs/upgrades/upgrade_7.7.1-7.7.2.pl | 2 +- docs/upgrades/upgrade_7.7.10-7.7.11.pl | 2 +- docs/upgrades/upgrade_7.7.11-7.7.12.pl | 2 +- docs/upgrades/upgrade_7.7.12-7.7.13.pl | 2 +- docs/upgrades/upgrade_7.7.13-7.7.14.pl | 2 +- docs/upgrades/upgrade_7.7.14-7.7.15.pl | 2 +- docs/upgrades/upgrade_7.7.15-7.7.16.pl | 2 +- docs/upgrades/upgrade_7.7.16-7.7.17.pl | 2 +- docs/upgrades/upgrade_7.7.17-7.7.18.pl | 2 +- docs/upgrades/upgrade_7.7.18-7.7.19.pl | 2 +- docs/upgrades/upgrade_7.7.2-7.7.3.pl | 2 +- docs/upgrades/upgrade_7.7.20-7.8.0.pl | 2 +- docs/upgrades/upgrade_7.7.3-7.7.4.pl | 2 +- docs/upgrades/upgrade_7.7.4-7.7.5.pl | 2 +- docs/upgrades/upgrade_7.7.5-7.7.6.pl | 2 +- docs/upgrades/upgrade_7.7.6-7.7.7.pl | 2 +- docs/upgrades/upgrade_7.7.7-7.7.8.pl | 2 +- docs/upgrades/upgrade_7.7.8-7.7.9.pl | 2 +- docs/upgrades/upgrade_7.7.9-7.7.10.pl | 2 +- docs/upgrades/upgrade_7.8.0-7.8.1.pl | 2 +- lib/WebGUI/Asset.pm | 2 +- lib/WebGUI/Asset/File/Image.pm | 2 +- lib/WebGUI/Asset/MatrixListing.pm | 2 +- lib/WebGUI/Asset/Post.pm | 2 +- lib/WebGUI/Asset/Wobject/InOutBoard.pm | 6 ++--- lib/WebGUI/AssetClipboard.pm | 2 +- lib/WebGUI/AssetExportHtml.pm | 4 ++-- lib/WebGUI/AssetLineage.pm | 2 +- lib/WebGUI/AssetTrash.pm | 2 +- lib/WebGUI/AssetVersioning.pm | 6 ++--- lib/WebGUI/Auth.pm | 6 ++--- lib/WebGUI/Auth/WebGUI.pm | 18 +++++++-------- lib/WebGUI/Form/Date.pm | 2 +- lib/WebGUI/Form/DateTime.pm | 2 +- lib/WebGUI/Group.pm | 22 +++++++++---------- lib/WebGUI/Macro/D_date.pm | 2 +- lib/WebGUI/Operation/User.pm | 2 +- lib/WebGUI/PassiveProfiling.pm | 2 +- lib/WebGUI/Session/DateTime.pm | 5 +++-- lib/WebGUI/Session/Url.pm | 2 +- lib/WebGUI/Session/Var.pm | 8 +++---- lib/WebGUI/User.pm | 8 +++---- lib/WebGUI/VersionTag.pm | 6 ++--- .../Workflow/Activity/ArchiveOldStories.pm | 2 +- .../Workflow/Activity/ArchiveOldThreads.pm | 2 +- .../Activity/ExpireUnvalidatedEmailUsers.pm | 2 +- lib/WebGUI/Workflow/Activity/WaitUntil.pm | 4 ++-- sbin/changeIobStatus.pl | 2 +- sbin/userImport.pl | 2 +- t/Asset/Asset.t | 4 ++-- t/PassiveProfiling.t | 4 ++-- 56 files changed, 94 insertions(+), 92 deletions(-) diff --git a/docs/changelog/7.x.x.txt b/docs/changelog/7.x.x.txt index e83508412..2c3f9d4e1 100644 --- a/docs/changelog/7.x.x.txt +++ b/docs/changelog/7.x.x.txt @@ -1,4 +1,5 @@ 7.8.1 + - mark $session->datetime->time as deprecated and remove its use from core code - fixed: Wikis broken by 7.8.0 upgrade - fixed #11024: In/Out Board Busted - fixed #11025: Yo dudely in Wiki Keyword Search Template diff --git a/docs/upgrades/_upgrade.skeleton b/docs/upgrades/_upgrade.skeleton index ce2ab4743..cf2a0eff9 100644 --- a/docs/upgrades/_upgrade.skeleton +++ b/docs/upgrades/_upgrade.skeleton @@ -106,7 +106,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.6.14-7.7.0.pl b/docs/upgrades/upgrade_7.6.14-7.7.0.pl index 5c8d2f415..5576a1bf8 100644 --- a/docs/upgrades/upgrade_7.6.14-7.7.0.pl +++ b/docs/upgrades/upgrade_7.6.14-7.7.0.pl @@ -398,7 +398,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.6.35-7.7.17.pl b/docs/upgrades/upgrade_7.6.35-7.7.17.pl index fd3b49f90..4444ab040 100644 --- a/docs/upgrades/upgrade_7.6.35-7.7.17.pl +++ b/docs/upgrades/upgrade_7.6.35-7.7.17.pl @@ -2015,7 +2015,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.0-7.7.1.pl b/docs/upgrades/upgrade_7.7.0-7.7.1.pl index c43ddc5e9..9fd1c0d77 100644 --- a/docs/upgrades/upgrade_7.7.0-7.7.1.pl +++ b/docs/upgrades/upgrade_7.7.0-7.7.1.pl @@ -213,7 +213,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.1-7.7.2.pl b/docs/upgrades/upgrade_7.7.1-7.7.2.pl index d8cf758b9..472d1a16b 100644 --- a/docs/upgrades/upgrade_7.7.1-7.7.2.pl +++ b/docs/upgrades/upgrade_7.7.1-7.7.2.pl @@ -262,7 +262,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.10-7.7.11.pl b/docs/upgrades/upgrade_7.7.10-7.7.11.pl index d768908f6..bc6529e1a 100644 --- a/docs/upgrades/upgrade_7.7.10-7.7.11.pl +++ b/docs/upgrades/upgrade_7.7.10-7.7.11.pl @@ -175,7 +175,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.11-7.7.12.pl b/docs/upgrades/upgrade_7.7.11-7.7.12.pl index f4d4e2030..2efdc9389 100644 --- a/docs/upgrades/upgrade_7.7.11-7.7.12.pl +++ b/docs/upgrades/upgrade_7.7.11-7.7.12.pl @@ -150,7 +150,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.12-7.7.13.pl b/docs/upgrades/upgrade_7.7.12-7.7.13.pl index 40c8fbbd3..649d43179 100644 --- a/docs/upgrades/upgrade_7.7.12-7.7.13.pl +++ b/docs/upgrades/upgrade_7.7.12-7.7.13.pl @@ -129,7 +129,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.13-7.7.14.pl b/docs/upgrades/upgrade_7.7.13-7.7.14.pl index d0c51c3aa..964378ebd 100644 --- a/docs/upgrades/upgrade_7.7.13-7.7.14.pl +++ b/docs/upgrades/upgrade_7.7.13-7.7.14.pl @@ -105,7 +105,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.14-7.7.15.pl b/docs/upgrades/upgrade_7.7.14-7.7.15.pl index 8852c6eed..1480dfc02 100644 --- a/docs/upgrades/upgrade_7.7.14-7.7.15.pl +++ b/docs/upgrades/upgrade_7.7.14-7.7.15.pl @@ -199,7 +199,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.15-7.7.16.pl b/docs/upgrades/upgrade_7.7.15-7.7.16.pl index 17441d1f2..4c92c0d07 100644 --- a/docs/upgrades/upgrade_7.7.15-7.7.16.pl +++ b/docs/upgrades/upgrade_7.7.15-7.7.16.pl @@ -174,7 +174,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.16-7.7.17.pl b/docs/upgrades/upgrade_7.7.16-7.7.17.pl index 877a3834d..bae2730d3 100644 --- a/docs/upgrades/upgrade_7.7.16-7.7.17.pl +++ b/docs/upgrades/upgrade_7.7.16-7.7.17.pl @@ -221,7 +221,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.17-7.7.18.pl b/docs/upgrades/upgrade_7.7.17-7.7.18.pl index b9ec5056d..cdb14def3 100644 --- a/docs/upgrades/upgrade_7.7.17-7.7.18.pl +++ b/docs/upgrades/upgrade_7.7.17-7.7.18.pl @@ -166,7 +166,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.18-7.7.19.pl b/docs/upgrades/upgrade_7.7.18-7.7.19.pl index b28c1d16c..e9f3e3a2e 100644 --- a/docs/upgrades/upgrade_7.7.18-7.7.19.pl +++ b/docs/upgrades/upgrade_7.7.18-7.7.19.pl @@ -215,7 +215,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.2-7.7.3.pl b/docs/upgrades/upgrade_7.7.2-7.7.3.pl index cf6479fad..8dcf2e68b 100644 --- a/docs/upgrades/upgrade_7.7.2-7.7.3.pl +++ b/docs/upgrades/upgrade_7.7.2-7.7.3.pl @@ -184,7 +184,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.20-7.8.0.pl b/docs/upgrades/upgrade_7.7.20-7.8.0.pl index 369442bde..680235d48 100644 --- a/docs/upgrades/upgrade_7.7.20-7.8.0.pl +++ b/docs/upgrades/upgrade_7.7.20-7.8.0.pl @@ -226,7 +226,7 @@ sub finish { upgradeToYUI28( $session ); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.3-7.7.4.pl b/docs/upgrades/upgrade_7.7.3-7.7.4.pl index ced0eec44..dd7e465b1 100644 --- a/docs/upgrades/upgrade_7.7.3-7.7.4.pl +++ b/docs/upgrades/upgrade_7.7.3-7.7.4.pl @@ -323,7 +323,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.4-7.7.5.pl b/docs/upgrades/upgrade_7.7.4-7.7.5.pl index 81345892a..b9aa42acb 100644 --- a/docs/upgrades/upgrade_7.7.4-7.7.5.pl +++ b/docs/upgrades/upgrade_7.7.4-7.7.5.pl @@ -317,7 +317,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.5-7.7.6.pl b/docs/upgrades/upgrade_7.7.5-7.7.6.pl index 1e6510595..4d60e49f4 100644 --- a/docs/upgrades/upgrade_7.7.5-7.7.6.pl +++ b/docs/upgrades/upgrade_7.7.5-7.7.6.pl @@ -413,7 +413,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.6-7.7.7.pl b/docs/upgrades/upgrade_7.7.6-7.7.7.pl index 48921dbe6..7f9d33eab 100644 --- a/docs/upgrades/upgrade_7.7.6-7.7.7.pl +++ b/docs/upgrades/upgrade_7.7.6-7.7.7.pl @@ -348,7 +348,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.7-7.7.8.pl b/docs/upgrades/upgrade_7.7.7-7.7.8.pl index e68ecaa94..3b3d3534e 100644 --- a/docs/upgrades/upgrade_7.7.7-7.7.8.pl +++ b/docs/upgrades/upgrade_7.7.7-7.7.8.pl @@ -187,7 +187,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.8-7.7.9.pl b/docs/upgrades/upgrade_7.7.8-7.7.9.pl index f6a6365f2..06998f639 100644 --- a/docs/upgrades/upgrade_7.7.8-7.7.9.pl +++ b/docs/upgrades/upgrade_7.7.8-7.7.9.pl @@ -169,7 +169,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.7.9-7.7.10.pl b/docs/upgrades/upgrade_7.7.9-7.7.10.pl index be4e8d1fe..feb8fecce 100644 --- a/docs/upgrades/upgrade_7.7.9-7.7.10.pl +++ b/docs/upgrades/upgrade_7.7.9-7.7.10.pl @@ -112,7 +112,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/docs/upgrades/upgrade_7.8.0-7.8.1.pl b/docs/upgrades/upgrade_7.8.0-7.8.1.pl index 54c1d4959..184a1d5df 100644 --- a/docs/upgrades/upgrade_7.8.0-7.8.1.pl +++ b/docs/upgrades/upgrade_7.8.0-7.8.1.pl @@ -201,7 +201,7 @@ sub finish { updateTemplates($session); my $versionTag = WebGUI::VersionTag->getWorking($session); $versionTag->commit; - $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".$session->datetime->time().")"); + $session->db->write("insert into webguiVersion values (".$session->db->quote($toVersion).",'upgrade',".time().")"); $session->close(); } diff --git a/lib/WebGUI/Asset.pm b/lib/WebGUI/Asset.pm index 202fab508..e8e222ec0 100644 --- a/lib/WebGUI/Asset.pm +++ b/lib/WebGUI/Asset.pm @@ -2344,7 +2344,7 @@ sub publish { my $assetIds = $self->session->db->buildArrayRef("select assetId from asset where lineage like ".$self->session->db->quote($self->get("lineage").'%')." $where"); my $idList = $self->session->db->quoteAndJoin($assetIds); - $self->session->db->write("update asset set state='published', stateChangedBy=".$self->session->db->quote($self->session->user->userId).", stateChanged=".$self->session->datetime->time()." where assetId in (".$idList.")"); + $self->session->db->write("update asset set state='published', stateChangedBy=".$self->session->db->quote($self->session->user->userId).", stateChanged=".time()." where assetId in (".$idList.")"); my $cache = WebGUI::Cache->new($self->session); foreach my $id (@{$assetIds}) { # we do the purge directly cuz it's a lot faster than instantiating all these assets diff --git a/lib/WebGUI/Asset/File/Image.pm b/lib/WebGUI/Asset/File/Image.pm index d9ca122c2..c0d705a88 100644 --- a/lib/WebGUI/Asset/File/Image.pm +++ b/lib/WebGUI/Asset/File/Image.pm @@ -174,7 +174,7 @@ sub getEditForm { $tabform->getTab("properties")->readOnly( -label=>$i18n->get('thumbnail'), -hoverHelp=>$i18n->get('Thumbnail description'), - -value=>'thumbnail' + -value=>'thumbnail' ); my ($x, $y) = $self->getStorageLocation->getSizeInPixels($self->get("filename")); $tabform->getTab("properties")->readOnly( diff --git a/lib/WebGUI/Asset/MatrixListing.pm b/lib/WebGUI/Asset/MatrixListing.pm index 7539558bc..1ffd68b65 100644 --- a/lib/WebGUI/Asset/MatrixListing.pm +++ b/lib/WebGUI/Asset/MatrixListing.pm @@ -597,7 +597,7 @@ sub setRatings { if ($ratings->{$category}) { $db->write("insert into MatrixListing_rating (userId, category, rating, timeStamp, listingId, ipAddress, assetId) values (?,?,?,?,?,?,?)", - [$session->user->userId,$category,$ratings->{$category},$session->datetime->time(),$self->getId, + [$session->user->userId,$category,$ratings->{$category},time(),$self->getId, $session->env->get("HTTP_X_FORWARDED_FOR"),$matrixId]); } my $sql = "from MatrixListing_rating where listingId=? and category=?"; diff --git a/lib/WebGUI/Asset/Post.pm b/lib/WebGUI/Asset/Post.pm index 6f1dd7c22..58729cf3c 100644 --- a/lib/WebGUI/Asset/Post.pm +++ b/lib/WebGUI/Asset/Post.pm @@ -891,7 +891,7 @@ sub insertUserPostRating { [$self->getId, $self->session->user->userId, $self->session->env->getIp, - $self->session->datetime->time(), + time(), $rating,] ); } diff --git a/lib/WebGUI/Asset/Wobject/InOutBoard.pm b/lib/WebGUI/Asset/Wobject/InOutBoard.pm index b58daab24..88a3477b9 100644 --- a/lib/WebGUI/Asset/Wobject/InOutBoard.pm +++ b/lib/WebGUI/Asset/Wobject/InOutBoard.pm @@ -414,11 +414,11 @@ sub www_setStatus { $db->write("delete from InOutBoard_status where userId=? and assetId=?", [ $sessionUserId, $self->getId ]); $db->write( "insert into InOutBoard_status (assetId,userId,status,dateStamp,message) values (?,?,?,?,?)", - [$self->getId, $sessionUserId, $status, $session->datetime->time(), $message ], + [$self->getId, $sessionUserId, $status, time(), $message ], ); $db->write( "insert into InOutBoard_statusLog (assetId,userId,createdBy,status,dateStamp,message) values (?,?,?,?,?,?)", - [$self->getId, $sessionUserId, $session->user->userId, $status, $session->datetime->time(), $message ], + [$self->getId, $sessionUserId, $session->user->userId, $status, time(), $message ], ); } else { @@ -452,7 +452,7 @@ sub www_viewReport { -name=>"doit", -value=>"1" ); - my $startDate = $self->session->datetime->addToDate($self->session->datetime->time(),0,0,-15); + my $startDate = $self->session->datetime->addToDate(time(),0,0,-15); $startDate = $self->session->form->date("startDate") if ($self->session->form->process("doit")); $f->date( -name=>"startDate", diff --git a/lib/WebGUI/AssetClipboard.pm b/lib/WebGUI/AssetClipboard.pm index ab1ab2efb..5ff01f5ca 100644 --- a/lib/WebGUI/AssetClipboard.pm +++ b/lib/WebGUI/AssetClipboard.pm @@ -64,7 +64,7 @@ sub cut { return undef if ($self->getId eq $session->setting->get("defaultPage") || $self->getId eq $session->setting->get("notFoundPage")); $session->db->beginTransaction; $session->db->write("update asset set state='clipboard-limbo' where lineage like ? and state='published'",[$self->get("lineage").'%']); - $session->db->write("update asset set state='clipboard', stateChangedBy=?, stateChanged=? where assetId=?", [$session->user->userId, $session->datetime->time(), $self->getId]); + $session->db->write("update asset set state='clipboard', stateChangedBy=?, stateChanged=? where assetId=?", [$session->user->userId, time(), $self->getId]); $session->db->commit; $self->{_properties}{state} = "clipboard"; foreach my $asset ($self, @{$self->getLineage(['descendants'], {returnObjects => 1})}) { diff --git a/lib/WebGUI/AssetExportHtml.pm b/lib/WebGUI/AssetExportHtml.pm index 95b522d41..a54566f59 100644 --- a/lib/WebGUI/AssetExportHtml.pm +++ b/lib/WebGUI/AssetExportHtml.pm @@ -204,7 +204,7 @@ sub exportAsHtml { my $i18n = WebGUI::International->new($self->session, 'Asset'); # take down when we started to tell the user how long the process took. - my $startTime = $session->datetime->time; + my $startTime = time; # get the export path and ensure it is valid. my $exportPath = $self->exportCheckPath; @@ -298,7 +298,7 @@ sub exportAsHtml { } # we're done. give the user a status report. - my $timeRequired = $session->datetime->time - $startTime; + my $timeRequired = time - $startTime; my $message = sprintf $i18n->get('export information'), $exportedCount, $timeRequired; return $message; } diff --git a/lib/WebGUI/AssetLineage.pm b/lib/WebGUI/AssetLineage.pm index 72d33b8d4..26f4a17e7 100644 --- a/lib/WebGUI/AssetLineage.pm +++ b/lib/WebGUI/AssetLineage.pm @@ -68,7 +68,7 @@ sub addChild { my $self = shift; my $properties = shift; my $id = shift || $self->session->id->generate(); - my $now = shift || $self->session->datetime->time(); + my $now = shift || time(); my $options = shift; # Check if it is possible to add a child to this asset. If not add it as a sibling of this asset. diff --git a/lib/WebGUI/AssetTrash.pm b/lib/WebGUI/AssetTrash.pm index 3b329d6e6..873d5404e 100644 --- a/lib/WebGUI/AssetTrash.pm +++ b/lib/WebGUI/AssetTrash.pm @@ -289,7 +289,7 @@ sub trash { $db->beginTransaction; $outputSub->($i18n->get('Clearing asset tables')); $db->write("update asset set state='trash-limbo' where lineage like ?",[$self->get("lineage").'%']); - $db->write("update asset set state='trash', stateChangedBy=?, stateChanged=? where assetId=?",[$session->user->userId, $session->datetime->time(), $self->getId]); + $db->write("update asset set state='trash', stateChangedBy=?, stateChanged=? where assetId=?",[$session->user->userId, time(), $self->getId]); $db->commit; # Update ourselves since we didn't use update() diff --git a/lib/WebGUI/AssetVersioning.pm b/lib/WebGUI/AssetVersioning.pm index f85b91272..ab4018a35 100644 --- a/lib/WebGUI/AssetVersioning.pm +++ b/lib/WebGUI/AssetVersioning.pm @@ -65,7 +65,7 @@ A hash reference containing a list of properties to associate with the child. =head3 revisionDate An epoch date representing the date/time stamp that this revision was -created. Defaults to $self->session->datetime->time(). +created. Defaults to time(). =head3 options @@ -87,7 +87,7 @@ Posts) will know not to send them under certain conditions. sub addRevision { my $self = shift; my $properties = shift || {}; - my $now = shift || $self->session->datetime->time(); + my $now = shift || time(); my $options = shift; my $autoCommitId = $self->getAutoCommitWorkflowId() unless ($options->{skipAutoCommitWorkflows}); @@ -573,7 +573,7 @@ sub updateHistory { my $session = $self->session; my $action = shift; my $userId = shift || $session->user->userId || '3'; - my $dateStamp =$session->datetime->time(); + my $dateStamp =time(); $session->db->write("insert into assetHistory (assetId, userId, actionTaken, dateStamp, url) values (?,?,?,?,?)", [$self->getId, $userId, $action, $dateStamp, $self->get('url')]); } diff --git a/lib/WebGUI/Auth.pm b/lib/WebGUI/Auth.pm index 9ddeb45ec..1355d24fb 100644 --- a/lib/WebGUI/Auth.pm +++ b/lib/WebGUI/Auth.pm @@ -64,7 +64,7 @@ sub _isDuplicateUsername { my ($otherUser) = $self->session->db->quickArray("select count(*) from users where username=".$self->session->db->quote($username)); return 0 if !$otherUser; my $i18n = WebGUI::International->new($self->session); - $self->error('
  • '.sprintf($i18n->get(77), $username,$username,$username,$self->session->datetime->epochToHuman($self->session->datetime->time(),"%y")).'
  • '); + $self->error('
  • '.sprintf($i18n->get(77), $username,$username,$username,$self->session->datetime->epochToHuman(time(),"%y")).'
  • '); return 1; } @@ -108,11 +108,11 @@ sub _logLogin { [ $_[0], $_[1], - $self->session->datetime->time(), + time(), $self->session->env->getIp, $self->session->env->get("HTTP_USER_AGENT"), $self->session->getId, - $self->session->datetime->time(), + time(), ] ); } diff --git a/lib/WebGUI/Auth/WebGUI.pm b/lib/WebGUI/Auth/WebGUI.pm index 9321af0a9..75a86fb12 100644 --- a/lib/WebGUI/Auth/WebGUI.pm +++ b/lib/WebGUI/Auth/WebGUI.pm @@ -266,7 +266,7 @@ sub createAccountSave { $properties->{ changeUsername } = $setting->get("webguiChangeUsername"); $properties->{ changePassword } = $setting->get("webguiChangePassword"); $properties->{ identifier } = $self->hashPassword($password); - $properties->{ passwordLastUpdated } = $session->datetime->time(); + $properties->{ passwordLastUpdated } = time(); $properties->{ passwordTimeout } = $setting->get("webguiPasswordTimeout"); $properties->{ status } = 'Deactivated' if ($setting->get("webguiValidateEmail")); @@ -433,16 +433,16 @@ sub editUserFormSave { unless (!$identifier || $identifier eq "password") { $properties->{identifier} = $self->hashPassword($self->session->form->process('authWebGUI.identifier')); if($userData->{identifier} ne $properties->{identifier}){ - $properties->{passwordLastUpdated} =$self->session->datetime->time(); + $properties->{passwordLastUpdated} =time(); } } $properties->{passwordTimeout} = $self->session->form->interval('authWebGUI.passwordTimeout'); $properties->{changeUsername} = $self->session->form->process('authWebGUI.changeUsername'); $properties->{changePassword} = $self->session->form->process('authWebGUI.changePassword'); if($userId eq "new") { - $properties->{passwordLastUpdated} =$self->session->datetime->time(); + $properties->{passwordLastUpdated} =time(); if ($self->session->setting->get("webguiExpirePasswordOnCreation")){ - $properties->{passwordLastUpdated} =$self->session->datetime->time() - $properties->{passwordTimeout}; + $properties->{passwordLastUpdated} =time() - $properties->{passwordTimeout}; } } @@ -753,7 +753,7 @@ sub login { my $userData = $self->getParams; if($self->getSetting("passwordTimeout") && $userData->{passwordTimeout}){ my $expireTime = $userData->{passwordLastUpdated} + $userData->{passwordTimeout}; - if ($self->session->datetime->time() >= $expireTime){ + if (time() >= $expireTime){ my $userId = $self->userId; $self->logout; return $self->resetExpiredPassword($userId); @@ -1031,7 +1031,7 @@ sub profileRecoverPasswordFinish { $self->user( $user ); $self->saveParams($userId, $self->authMethod, { identifier => $self->hashPassword($password), - passwordLastUpdated => $self->session->datetime->time }); + passwordLastUpdated => time }); $self->_logSecurityMessage; return $self->SUPER::login; } else { @@ -1182,7 +1182,7 @@ sub emailResetPasswordFinish { $self->user(WebGUI::User->new($self->session, $userId)); $self->saveParams($userId, $self->authMethod, { identifier => $self->hashPassword($password), - passwordLastUpdated => $self->session->datetime->time }); + passwordLastUpdated => time }); $self->_logSecurityMessage; # delete the emailRecoverPasswordVerificationNumber @@ -1236,7 +1236,7 @@ sub resetExpiredPasswordSave { return $self->resetExpiredPassword($u->userId, "

    ".$i18n->get(70)."

      ".$error.'
    ') if ($error); $properties->{identifier} = $self->hashPassword($self->session->form->process("identifier")); - $properties->{passwordLastUpdated} =$self->session->datetime->time(); + $properties->{passwordLastUpdated} =time(); $self->saveParams($u->userId,$self->authMethod,$properties); $self->_logSecurityMessage(); @@ -1314,7 +1314,7 @@ sub updateAccount { $properties->{identifier} = $self->hashPassword($password); $self->_logSecurityMessage(); if($userData->{identifier} ne $properties->{identifier}){ - $properties->{passwordLastUpdated} =$self->session->datetime->time(); + $properties->{passwordLastUpdated} =time(); } } } diff --git a/lib/WebGUI/Form/Date.pm b/lib/WebGUI/Form/Date.pm index 0cc454a8c..a3c62a0fd 100644 --- a/lib/WebGUI/Form/Date.pm +++ b/lib/WebGUI/Form/Date.pm @@ -82,7 +82,7 @@ sub definition { push(@{$definition}, { defaultValue=>{ - defaultValue=>$session->datetime->time() + defaultValue=>time() }, maxlength=>{ defaultValue=> 10 diff --git a/lib/WebGUI/Form/DateTime.pm b/lib/WebGUI/Form/DateTime.pm index 8a7f6b7d2..8938654c6 100644 --- a/lib/WebGUI/Form/DateTime.pm +++ b/lib/WebGUI/Form/DateTime.pm @@ -84,7 +84,7 @@ sub definition { my $definition = shift || []; push(@{$definition}, { defaultValue=>{ - defaultValue=>$session->datetime->time() + defaultValue=>time() }, maxlength=>{ defaultValue=> 19 diff --git a/lib/WebGUI/Group.pm b/lib/WebGUI/Group.pm index c7b594861..c141f9651 100644 --- a/lib/WebGUI/Group.pm +++ b/lib/WebGUI/Group.pm @@ -92,7 +92,7 @@ sub _defaults { my $self = shift; return { groupId=>"new", - dateCreated=>$self->session->datetime->time(), + dateCreated=>time(), expireOffset=>314496000, karmaThreshold=>1000000000, groupName=>"New Group", @@ -101,7 +101,7 @@ sub _defaults { expireNotify=>0, databaseLinkId=>0, groupCacheTimeout=>3600, - lastUpdated=>$self->session->datetime->time(), + lastUpdated=>time(), autoAdd=>0, autoDelete=>0, isEditable=>1, @@ -168,10 +168,10 @@ sub addUsers { foreach my $uid (@{$users}) { my ($isIn) = $self->session->db->quickArray("select count(*) from groupings where groupId=? and userId=?", [$self->getId, $uid]); unless ($isIn) { - $self->session->db->write("insert into groupings (groupId,userId,expireDate) values (?,?,?)", [$self->getId, $uid, ($self->session->datetime->time()+$expireOffset)]); + $self->session->db->write("insert into groupings (groupId,userId,expireDate) values (?,?,?)", [$self->getId, $uid, (time()+$expireOffset)]); $self->session->stow->delete("gotGroupsForUser"); } else { - $self->userGroupExpireDate($uid,($self->session->datetime->time()+$expireOffset)); + $self->userGroupExpireDate($uid,(time()+$expireOffset)); } } } @@ -732,14 +732,14 @@ sub getIpUsers { my $IpFilter; return [] unless $IpFilter = $self->ipFilter(); - my $time = $self->session->datetime->time(); + my $time = time(); $IpFilter =~ s/\s//g; my @filters = split /;/, $IpFilter; my $query = "select userId,lastIP from userSession where expires > ?"; - my $sth = $self->session->db->read($query, [ $self->session->datetime->time() ]); + my $sth = $self->session->db->read($query, [ time() ]); my %localCache = (); my @ipUsers = (); while (my ($userId, $lastIP) = $sth->array() ) { @@ -837,7 +837,7 @@ sub getScratchUsers { my $scratchFilter; return [] unless $scratchFilter = $self->scratchFilter(); - my $time = $self->session->datetime->time(); + my $time = time(); $scratchFilter =~ s/\s//g; my @filters = split /;/, $scratchFilter; @@ -878,7 +878,7 @@ sub getUserList { my $withoutExpired = shift; my $expireTime = 0; if ($withoutExpired) { - $expireTime = $self->session->datetime->time(); + $expireTime = time(); } return $self->session->db->buildHashRef("select users.userId, users.username from users join groupings using(userId) where expireDate > ? and groupId = ? order by username asc", [$expireTime, $self->getId]); } @@ -903,7 +903,7 @@ sub getUsers { my $withoutExpired = shift; my $expireTime = 0; if ($withoutExpired) { - $expireTime = $self->session->datetime->time(); + $expireTime = time(); } my @users = $self->session->db->buildArray("select userId from groupings where expireDate > ? and groupId = ?", [$expireTime, $self->getId]); return \@users; @@ -938,7 +938,7 @@ sub getUsersNotIn { my $expireTime = 0; if ($withoutExpired) { - $expireTime = $self->session->datetime->time(); + $expireTime = time(); } my $sql = q{ @@ -1496,7 +1496,7 @@ sub set { my $value = shift; $self->get("groupId") unless ($self->{_group}); # precache group stuff $self->{_group}{$name} = $value; - $self->session->db->setRow("groups","groupId",{groupId=>$self->getId, $name=>$value, lastUpdated=>$self->session->datetime->time()}); + $self->session->db->setRow("groups","groupId",{groupId=>$self->getId, $name=>$value, lastUpdated=>time()}); $self->clearCaches; } diff --git a/lib/WebGUI/Macro/D_date.pm b/lib/WebGUI/Macro/D_date.pm index 397d10487..c30535061 100644 --- a/lib/WebGUI/Macro/D_date.pm +++ b/lib/WebGUI/Macro/D_date.pm @@ -40,7 +40,7 @@ sub process { my $session = shift; my (@param, $temp, $time); @param = @_; - $time = $param[1] ||$session->datetime->time(); + $time = $param[1] ||time(); $temp =$session->datetime->epochToHuman($time,$param[0]); return $temp; } diff --git a/lib/WebGUI/Operation/User.pm b/lib/WebGUI/Operation/User.pm index c8dfb8c27..a7c78e897 100644 --- a/lib/WebGUI/Operation/User.pm +++ b/lib/WebGUI/Operation/User.pm @@ -840,7 +840,7 @@ sub www_editUserSave { } # Display an error telling them the username they are trying to use is not available and suggest alternatives } else { - $error = '
      ' . sprintf($i18n->get(77), $postedUsername, $postedUsername, $postedUsername, $session->datetime->epochToHuman($session->datetime->time(),"%y")).'
    '; + $error = '
      ' . sprintf($i18n->get(77), $postedUsername, $postedUsername, $postedUsername, $session->datetime->epochToHuman(time(),"%y")).'
    '; } if ($isSecondary) { return _submenu($session,{workarea => $i18n->get(978)}); diff --git a/lib/WebGUI/PassiveProfiling.pm b/lib/WebGUI/PassiveProfiling.pm index 01c46fa01..5f5e84eb0 100644 --- a/lib/WebGUI/PassiveProfiling.pm +++ b/lib/WebGUI/PassiveProfiling.pm @@ -61,7 +61,7 @@ sub add { [ $session->id->generate(), $session->user->userId, $session->var->get("sessionId"), $assetId, - $session->datetime->time(), + time(), ]); return undef; } diff --git a/lib/WebGUI/Session/DateTime.pm b/lib/WebGUI/Session/DateTime.pm index 2230aabd4..4fd469af1 100644 --- a/lib/WebGUI/Session/DateTime.pm +++ b/lib/WebGUI/Session/DateTime.pm @@ -950,7 +950,7 @@ sub setToEpoch { } unless ($dt) { $self->session->errorHandler->warn("Could not format date $set for epoch. Returning current time"); - return $self->time(); + return $time(); } return $dt->epoch; } @@ -959,7 +959,8 @@ sub setToEpoch { =head2 time ( ) -Returns an epoch date for now. +DEPRECATED - This method is deprecated, and should not be used in new code. Use +the perl built in function time(). =cut diff --git a/lib/WebGUI/Session/Url.pm b/lib/WebGUI/Session/Url.pm index fe6a2daf1..750b68d4a 100644 --- a/lib/WebGUI/Session/Url.pm +++ b/lib/WebGUI/Session/Url.pm @@ -193,7 +193,7 @@ sub gateway { my $url = $self->session->config->get("gateway").'/'.$pageUrl; $url =~ s/\/+/\//g; if ($self->session->setting->get("preventProxyCache") == 1 and !$skipPreventProxyCache) { - $url = $self->append($url,"noCache=".randint(0,1000).':'.$self->session->datetime->time()); + $url = $self->append($url,"noCache=".randint(0,1000).':'.time()); } if ($pairs) { $url = $self->append($url,$pairs); diff --git a/lib/WebGUI/Session/Var.pm b/lib/WebGUI/Session/Var.pm index d472c0cab..00eb08f7f 100644 --- a/lib/WebGUI/Session/Var.pm +++ b/lib/WebGUI/Session/Var.pm @@ -184,14 +184,14 @@ sub new { $self->session->{_sessionId} = $self->{_var}{sessionId}; return $self; } - if ($self->{_var}{expires} && $self->{_var}{expires} < $session->datetime->time()) { ##Session expired, start a new one with the same Id + if ($self->{_var}{expires} && $self->{_var}{expires} < time()) { ##Session expired, start a new one with the same Id $self->end; $self->start(1,$sessionId); } elsif ($self->{_var}{sessionId} ne "") { ##Fetched an existing session. Update variables with recent data. - $self->{_var}{lastPageView} = $session->datetime->time(); + $self->{_var}{lastPageView} = time(); $self->{_var}{lastIP} = $session->env->getIp; - $self->{_var}{expires} = $session->datetime->time() + $session->setting->get("sessionTimeout"); + $self->{_var}{expires} = time() + $session->setting->get("sessionTimeout"); $self->session->{_sessionId} = $self->{_var}{sessionId}; $session->db->setRow("userSession","sessionId",$self->{_var}); return $self; @@ -241,7 +241,7 @@ sub start { $userId = 1 if ($userId eq ""); my $sessionId = shift; $sessionId = $self->session->id->generate if ($sessionId eq ""); - my $time = $self->session->datetime->time(); + my $time = time(); $self->{_var} = { expires => $time + $self->session->setting->get("sessionTimeout"), lastPageView => $time, diff --git a/lib/WebGUI/User.pm b/lib/WebGUI/User.pm index 0008a94ce..cab115996 100644 --- a/lib/WebGUI/User.pm +++ b/lib/WebGUI/User.pm @@ -544,9 +544,9 @@ sub friends { $myFriends->isEditable(0); $self->uncache; $self->{_user}{"friendsGroup"} = $myFriends->getId; - $self->{_user}{"lastUpdated"} = $self->session->datetime->time(); + $self->{_user}{"lastUpdated"} = time(); $self->session->db->write("update users set friendsGroup=?, lastUpdated=? where userId=?", - [$myFriends->getId, $self->session->datetime->time(), $self->userId]); + [$myFriends->getId, time(), $self->userId]); $self->{_friendsGroup} = $myFriends; } @@ -642,7 +642,7 @@ sub getGroups { my $withoutExpired = shift; my $clause = ""; if ($withoutExpired) { - $clause = "and expireDate>".$self->session->datetime->time(); + $clause = "and expireDate>".time(); } my $gotGroupsForUser = $self->session->stow->get("gotGroupsForUser"); if (exists $gotGroupsForUser->{$self->userId}) { @@ -1016,7 +1016,7 @@ sub karma { $self->uncache; $self->{_user}{karma} += $amount; $self->session->db->write("update users set karma=karma+? where userId=?", [$amount, $self->userId]); - $self->session->db->write("insert into karmaLog values (?,?,?,?,?)",[$self->userId, $amount, $source, $description, $self->session->datetime->time()]); + $self->session->db->write("insert into karmaLog values (?,?,?,?,?)",[$self->userId, $amount, $source, $description, time()]); } return $self->{_user}{karma}; } diff --git a/lib/WebGUI/VersionTag.pm b/lib/WebGUI/VersionTag.pm index 2ddc5d10b..a3c28e596 100644 --- a/lib/WebGUI/VersionTag.pm +++ b/lib/WebGUI/VersionTag.pm @@ -137,7 +137,7 @@ sub create { my $properties = shift; my $tagId = $session->db->setRow("assetVersionTag","tagId",{ tagId=>"new", - creationDate=>$session->datetime->time(), + creationDate=>time(), createdBy=>$session->user->userId }); my $tag = $class->new($session, $tagId); @@ -178,7 +178,7 @@ sub commit { if ($finished) { $self->{_data}{isCommitted} = 1; $self->{_data}{committedBy} = $self->session->user->userId unless ($self->{_data}{committedBy}); - $self->{_data}{commitDate} = $self->session->datetime->time(); + $self->{_data}{commitDate} = time(); $self->session->db->setRow("assetVersionTag", "tagId", $self->{_data}); $self->clearWorking; return 1; @@ -674,7 +674,7 @@ sub set { my $self = shift; my $properties = shift; - my $now = $self->session->datetime->time(); + my $now = time(); my $startTime = WebGUI::DateTime->new($self->session,$now)->toDatabase; my $endTime = WebGUI::DateTime->new($self->session,'2036-01-01 00:00:00')->toDatabase; diff --git a/lib/WebGUI/Workflow/Activity/ArchiveOldStories.pm b/lib/WebGUI/Workflow/Activity/ArchiveOldStories.pm index 1e337b016..ef1ef36d5 100644 --- a/lib/WebGUI/Workflow/Activity/ArchiveOldStories.pm +++ b/lib/WebGUI/Workflow/Activity/ArchiveOldStories.pm @@ -71,7 +71,7 @@ See WebGUI::Workflow::Activity::execute() for details. sub execute { my $self = shift; my $session = $self->session; - my $epoch = $self->session->datetime->time(); + my $epoch = time(); my $getAnArchive = WebGUI::Asset::Wobject::StoryArchive->getIsa($session); ARCHIVE: while (my $archive = $getAnArchive->()) { next ARCHIVE unless $archive && $archive->get("archiveAfter"); diff --git a/lib/WebGUI/Workflow/Activity/ArchiveOldThreads.pm b/lib/WebGUI/Workflow/Activity/ArchiveOldThreads.pm index 68dc2bd59..c55c66420 100644 --- a/lib/WebGUI/Workflow/Activity/ArchiveOldThreads.pm +++ b/lib/WebGUI/Workflow/Activity/ArchiveOldThreads.pm @@ -69,7 +69,7 @@ See WebGUI::Workflow::Activity::execute() for details. sub execute { my $self = shift; - my $epoch = $self->session->datetime->time(); + my $epoch = time(); my $a = $self->session->db->read("select assetId from asset where className='WebGUI::Asset::Wobject::Collaboration'"); while (my ($assetId) = $a->array) { my $cs = WebGUI::Asset->new($self->session, $assetId, "WebGUI::Asset::Wobject::Collaboration"); diff --git a/lib/WebGUI/Workflow/Activity/ExpireUnvalidatedEmailUsers.pm b/lib/WebGUI/Workflow/Activity/ExpireUnvalidatedEmailUsers.pm index 50ba7697f..55c8a518d 100644 --- a/lib/WebGUI/Workflow/Activity/ExpireUnvalidatedEmailUsers.pm +++ b/lib/WebGUI/Workflow/Activity/ExpireUnvalidatedEmailUsers.pm @@ -81,7 +81,7 @@ sub execute { return $self->COMPLETE; } - my @userIds = $self->session->db->buildArray("SELECT a.userId FROM authentication AS a INNER JOIN users AS u ON a.userId = u.userId WHERE a.authMethod = 'WebGUI' AND a.fieldName = 'emailValidationKey' AND u.status = 'Deactivated' AND u.dateCreated < ?", [$self->session->datetime->time - $self->get('interval')]); + my @userIds = $self->session->db->buildArray("SELECT a.userId FROM authentication AS a INNER JOIN users AS u ON a.userId = u.userId WHERE a.authMethod = 'WebGUI' AND a.fieldName = 'emailValidationKey' AND u.status = 'Deactivated' AND u.dateCreated < ?", [time - $self->get('interval')]); foreach my $userId (@userIds) { WebGUI::User->new($self->session, $userId)->delete; } diff --git a/lib/WebGUI/Workflow/Activity/WaitUntil.pm b/lib/WebGUI/Workflow/Activity/WaitUntil.pm index 911cc95ec..42a66de91 100644 --- a/lib/WebGUI/Workflow/Activity/WaitUntil.pm +++ b/lib/WebGUI/Workflow/Activity/WaitUntil.pm @@ -84,7 +84,7 @@ sub execute { my $urlOfSingleAsset = ""; #By default, we'll make it so that things happen now. - my $time = $session->datetime->time(); + my $time = time(); #If the type is startTime, we'll wait until the version tag starttime to proceed if($self->get("type") eq "startTime") { @@ -98,7 +98,7 @@ sub execute { my $dt = WebGUI::DateTime->new($session,$time); #Get the current UTC time - my $now = WebGUI::DateTime->new($session,$session->datetime->time()); + my $now = WebGUI::DateTime->new($session,time()); #Workflow is complete if the time has passed. if($now->epoch >= $dt->epoch) { diff --git a/sbin/changeIobStatus.pl b/sbin/changeIobStatus.pl index 777898af0..e42b76b6a 100755 --- a/sbin/changeIobStatus.pl +++ b/sbin/changeIobStatus.pl @@ -74,7 +74,7 @@ if ($userMessageFile) { print "Searching for users with a status of $currentStatus ...\n" unless ($quiet); my $userList; -my $now = $session->datetime->time(); +my $now = time(); my $inbox = WebGUI::Inbox->new($session); my $sth = $session->db->read("select userId,assetId from InOutBoard_status where status=?",[$currentStatus]); while (my ($userId,$assetId) = $sth->array) { diff --git a/sbin/userImport.pl b/sbin/userImport.pl index 3e547bc0c..c70ddfa42 100755 --- a/sbin/userImport.pl +++ b/sbin/userImport.pl @@ -213,7 +213,7 @@ sub calculateExpireOffset { } } if ($units eq "fixed") { - my $seconds = (($offset - $session->datetime->time())); + my $seconds = (($offset - time())); if ($seconds < 1) { return undef; } diff --git a/t/Asset/Asset.t b/t/Asset/Asset.t index ecb964178..aaca25101 100644 --- a/t/Asset/Asset.t +++ b/t/Asset/Asset.t @@ -850,7 +850,7 @@ $properties2 = { my $childAsset = $parentAsset->addChild( $properties2, $properties2->{id}, - $session->datetime->time(), + time(), { skipAutoCommitWorkflows => 1 } ); my $testAsset = WebGUI::Asset->newPending( $session, $childAsset->get('parentId') ); @@ -874,7 +874,7 @@ $properties2 = { url => 'moveVersionToParent_03a', }; sleep 2; -$childAsset->addRevision( $properties2, $session->datetime->time(), { skipAutoCommitWorkflows => 1 } ); +$childAsset->addRevision( $properties2, time(), { skipAutoCommitWorkflows => 1 } ); is( $parentVersionTag->get('isCommitted'), 0, 'confimr non-committed parent asset after revision' ); is( $childVersionTag->get('isCommitted'), 0, 'confirm non-committed child asset after revision' ); diff --git a/t/PassiveProfiling.t b/t/PassiveProfiling.t index 4ff7820d1..0afe76f69 100644 --- a/t/PassiveProfiling.t +++ b/t/PassiveProfiling.t @@ -23,7 +23,7 @@ use WebGUI::Asset; use Test::More; use Test::Deep; -my $startingTime = $session->datetime->time(); +my $startingTime = time(); my $numTests = 5; # increment this value for each test you create plan tests => 1 + $numTests; @@ -77,7 +77,7 @@ is($count, 0, 'add: Nothing added if passive profiling is not enabled'); $session->setting->set('passiveProfilingEnabled', 1); my $timeLogged; -$timeLogged = $session->datetime->time(); +$timeLogged = time(); WebGUI::PassiveProfiling::add( $session, $page->getId ); my $count = $session->db->quickScalar('select count(*) from passiveProfileLog where assetId=? and dateOfEntry >= ?',[$page->getId, $startingTime]); From 19e4c96b38d729ecd159adbd8bfd4694522decfb Mon Sep 17 00:00:00 2001 From: Graham Knop Date: Mon, 5 Oct 2009 20:58:58 -0500 Subject: [PATCH 18/18] fix silly typo --- lib/WebGUI/Session/DateTime.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/WebGUI/Session/DateTime.pm b/lib/WebGUI/Session/DateTime.pm index 4fd469af1..1dab2cb20 100644 --- a/lib/WebGUI/Session/DateTime.pm +++ b/lib/WebGUI/Session/DateTime.pm @@ -950,7 +950,7 @@ sub setToEpoch { } unless ($dt) { $self->session->errorHandler->warn("Could not format date $set for epoch. Returning current time"); - return $time(); + return time(); } return $dt->epoch; }