diff --git a/lib/WebGUI/Asset/MatrixListing.pm b/lib/WebGUI/Asset/MatrixListing.pm index bffed26ba..993eed025 100644 --- a/lib/WebGUI/Asset/MatrixListing.pm +++ b/lib/WebGUI/Asset/MatrixListing.pm @@ -719,6 +719,21 @@ sub www_click { #------------------------------------------------------------------- +=head2 www_deleteStickied ( ) + +Sets the sort scratch variable. + +=cut + +sub www_deleteStickied { + + my $self = shift; + $self->getParent->www_deleteStickied(); + return undef; +} + +#------------------------------------------------------------------- + =head2 www_edit ( ) Web facing method which is the default edit page @@ -757,9 +772,9 @@ sub www_getAttributes { my @results; my @categories = keys %{$self->getParent->getCategories}; foreach my $category (@categories) { + push(@results,{label=>$category,fieldType=>'category'}); my $attributes; my @attribute_loop; - #my $categoryLoopName = $self->session->url->urlize($category)."_loop"; $attributes = $db->read("select * from Matrix_attribute as a left join MatrixListing_attribute as l on (a.attributeId = l.attributeId and l.matrixListingId = ?) where category =? and a.assetId = ?", @@ -770,13 +785,14 @@ sub www_getAttributes { if ($attribute->{fieldType} eq 'MatrixCompare'){ $attribute->{value} = WebGUI::Form::MatrixCompare->new($self->session,$attribute)->getValueAsHtml; } + if($session->scratch->get('stickied_'.$attribute->{attributeId})){ + $attribute->{checked} = 'checked'; + } + else{ + $attribute->{checked} = ''; + } push(@results,$attribute); } - #$var->{$categoryLoopName} = \@attribute_loop; - #push(@{$var->{category_loop}},{ - # categoryLabel => $category, - # attribute_loop => \@attribute_loop, - #}); } my $jsonOutput; $jsonOutput->{ResultSet} = {Result=>\@results}; @@ -964,7 +980,20 @@ sub www_sendEmail { $self->prepareView; return $self->view(0,1); } +#------------------------------------------------------------------- +=head2 www_setStickied ( ) + +Sets the sort scratch variable. + +=cut + +sub www_setStickied { + + my $self = shift; + $self->getParent->www_setStickied(); + return undef; +} #------------------------------------------------------------------- =head2 www_view ( ) diff --git a/lib/WebGUI/Asset/Wobject/Matrix.pm b/lib/WebGUI/Asset/Wobject/Matrix.pm index 7638359f4..b328373ff 100644 --- a/lib/WebGUI/Asset/Wobject/Matrix.pm +++ b/lib/WebGUI/Asset/Wobject/Matrix.pm @@ -669,7 +669,7 @@ sub www_compare { $var->{javascript} = ""; @@ -696,6 +696,24 @@ sub www_deleteAttribute { #------------------------------------------------------------------- +=head2 www_deleteStickied ( ) + +Sets the sort scratch variable. + +=cut + +sub www_deleteStickied { + + my $self = shift; + + if(my $attributeId = $self->session->form->process("attributeId")){ + $self->session->scratch->delete('stickied_'.$attributeId); + } + return undef; +} + +#------------------------------------------------------------------- + =head2 www_editAttribute ( ) Shows a form to edit or add an attribute. @@ -878,8 +896,13 @@ sub www_getCompareFormData { my $self = shift; my $session = $self->session; my $form = $session->form; + my $sort = $session->scratch->get('sort') || $self->get('defaultSort'); my $sortDirection = ' asc'; + if ( WebGUI::Utility::isIn($sort),qw(revisionDate score)) { + $sortDirection = " desc"; + } + my @results; my @listingIds = $self->session->form->checkList("listingId"); @@ -914,7 +937,7 @@ assetData.revisionDate and status='approved' group by assetData.assetId - order by ".$self->get('defaultSort').$sortDirection; + order by ".$sort.$sortDirection; @results = @{ $session->db->buildArrayRefOfHashRefs($sql,[$self->getId]) }; foreach my $result (@results){ @@ -988,7 +1011,7 @@ sub www_getCompareListData { my $session = $self->session; my (@results,$results,@columnDefs); - my $sortDirection = ' asc'; + #my $sortDirection = ' asc'; foreach my $listingId (@listingIds){ $listingId =~ s/_____/-/g; @@ -1003,6 +1026,7 @@ sub www_getCompareListData { $jsonOutput->{ColumnDefs} = \@columnDefs; foreach my $category (keys %{$self->getCategories}) { + push(@results,{name=>$category,fieldType=>'category'}); my $fields = " a.name, a.fieldType, a.attributeId "; my $from = "from Matrix_attribute a"; my $tableCount = "b"; @@ -1020,8 +1044,9 @@ sub www_getCompareListData { ) }); } foreach my $result (@results){ + unless($result->{fieldType} eq 'category'){ foreach my $listingId (@listingIds) { - $result->{attributId} =~ s/-/_____/g; + $result->{attributeId} =~ s/-/_____/g; my $listingId_safe = $listingId; $listingId_safe =~ s/-/_____/g; if ($result->{fieldType} eq 'MatrixCompare'){ @@ -1030,6 +1055,14 @@ sub www_getCompareListData { $result->{$listingId_safe} = WebGUI::Form::MatrixCompare->new( $self->session, { value=>$result->{$listingId_safe} },defaultValue=>0)->getValueAsHtml; } + if($session->scratch->get('stickied_'.$result->{attributeId})){ + $self->session->errorHandler->warn("found checked stickie: ".$result->{attributeId}); + $result->{checked} = 'checked'; + } + else{ + $result->{checked} = ''; + } + } } } @@ -1135,6 +1168,40 @@ sub www_search { return $self->processStyle($self->processTemplate($var,$self->get("searchTemplateId"))); } +#------------------------------------------------------------------- +=head2 www_setSort ( ) + +Sets the sort scratch variable. + +=cut + +sub www_setSort { + + my $self = shift; + + if(my $sort = $self->session->form->process("sort")){ + $self->session->scratch->set('sort',$sort); + } + return undef; +} + +#------------------------------------------------------------------- + +=head2 www_setStickied ( ) + +Sets the sort scratch variable. + +=cut + +sub www_setStickied { + + my $self = shift; + + if(my $attributeId = $self->session->form->process("attributeId")){ + $self->session->scratch->set('stickied_'.$attributeId,1); + } + return undef; +} 1; diff --git a/www/extras/wobject/Matrix/matrix.js b/www/extras/wobject/Matrix/matrix.js index 4f479f6ba..b4f4b1ffd 100644 --- a/www/extras/wobject/Matrix/matrix.js +++ b/www/extras/wobject/Matrix/matrix.js @@ -43,25 +43,29 @@ YAHOO.util.Event.addListener(window, "load", function() { this.myDataTable.hideColumn(this.myDataTable.getColumn(3)); this.myDataTable.hideColumn(this.myDataTable.getColumn(4)); this.myDataTable.hideColumn(this.myDataTable.getColumn(5)); - + var btnSortByViews = new YAHOO.widget.Button("sortByViews"); btnSortByViews.on("click", function(e) { - this.myDataTable.sortColumn(this.myDataTable.getColumn(2)); + this.myDataTable.sortColumn(this.myDataTable.getColumn(2)); + var request = YAHOO.util.Connect.asyncRequest('POST', "?func=setSort;sort=views"); },this,true); var btnSortByClicks = new YAHOO.widget.Button("sortByClicks"); btnSortByClicks.on("click", function(e) { this.myDataTable.sortColumn(this.myDataTable.getColumn(3)); + var request = YAHOO.util.Connect.asyncRequest('POST', "?func=setSort;sort=clicks"); },this,true); var btnSortByCompares = new YAHOO.widget.Button("sortByCompares"); btnSortByCompares.on("click", function(e) { this.myDataTable.sortColumn(this.myDataTable.getColumn(4)); + var request = YAHOO.util.Connect.asyncRequest('POST', "?func=setSort;sort=compares"); },this,true); var btnSortByUpdated = new YAHOO.widget.Button("sortByUpdated"); btnSortByUpdated.on("click", function(e) { this.myDataTable.sortColumn(this.myDataTable.getColumn(5)); + var request = YAHOO.util.Connect.asyncRequest('POST', "?func=setSort;sort=lastUpdated"); },this,true); var myCallback = function() { diff --git a/www/extras/wobject/Matrix/matrixCompareList.js b/www/extras/wobject/Matrix/matrixCompareList.js index 78b8c6112..e786447c5 100644 --- a/www/extras/wobject/Matrix/matrixCompareList.js +++ b/www/extras/wobject/Matrix/matrixCompareList.js @@ -4,23 +4,39 @@ YAHOO.util.Event.addListener(window, "load", function() { var hideStickies = 0; this.formatStickied = function(elCell, oRecord, oColumn, sData) { - elCell.innerHTML = ""; + if(oRecord.getData("fieldType") != 'category'){ + var innerHTML = ""; + elCell.innerHTML = innerHTML; + } }; this.formatColors = function(elCell, oRecord, oColumn, sData) { - var colorField = oColumn.key + "_compareColor"; - var color = oRecord.getData(colorField); - if(color){ - Dom.setStyle(elCell.parentNode, "background-color", color); + if(oRecord.getData("fieldType") != 'category'){ + var colorField = oColumn.key + "_compareColor"; + var color = oRecord.getData(colorField); + if(color){ + Dom.setStyle(elCell.parentNode, "background-color", color); + } + elCell.innerHTML = sData; + } + }; + this.formatLabel = function(elCell, oRecord, oColumn, sData) { + if(oRecord.getData("fieldType") == 'category'){ + elCell.innerHTML = "" +sData + ""; + }else{ + elCell.innerHTML = sData; } - elCell.innerHTML = sData; }; YAHOO.widget.DataTable.Formatter.formatColors = this.formatColors; var myColumnDefs = [ - {key:"stickied",formatter:this.formatStickied}, - {key:"name"} + {key:"stickied",formatter:this.formatStickied,label:""}, + {key:"name",formatter:this.formatLabel,label:""} ]; this.myDataSource = new YAHOO.util.DataSource("?"); @@ -106,22 +122,26 @@ YAHOO.util.Event.addListener(window, "load", function() { if(hideStickies == 0){ // hide non-selected attributes for(i=0; i"; + if(oRecord.getData("fieldType") != 'category'){ + var innerHTML = ""; + elCell.innerHTML = innerHTML; + } + }; + this.formatLabel = function(elCell, oRecord, oColumn, sData) { + if(oRecord.getData("fieldType") == 'category'){ + elCell.innerHTML = "" +sData + ""; + }else{ + elCell.innerHTML = sData; + } }; var myColumnDefs = [ - {key:"stickied",formatter:this.formatStickied}, - {key:"label"}, + {key:"stickied",formatter:this.formatStickied,label:""}, + {key:"label",formatter:this.formatLabel}, {key:"value"} ]; @@ -18,15 +32,11 @@ YAHOO.util.Event.addListener(window, "load", function() { this.myDataSource.connXhrMode = "queueRequests"; this.myDataSource.responseSchema = { resultsList: "ResultSet.Result", - fields: ["label","value","attributeId"] + fields: ["label","value","attributeId","fieldType","checked"] }; var uri = "func=getAttributes"; -// for (var i = 0; i < listingIds.length; i++) { -// uri = uri+';listingId='+listingIds[i]; -// } - var myDataTable = new YAHOO.widget.DataTable("attributes", myColumnDefs, this.myDataSource, {initialRequest:uri}); @@ -46,36 +56,38 @@ YAHOO.util.Event.addListener(window, "load", function() { this.onDataReturnAppendRows.apply(this,arguments); }; - var callback2 = { success : myCallback, failure : myCallback, scope : myDataTable }; - var btnStickied = new YAHOO.widget.Button("stickied"); btnStickied.on("click", function(e) { var elements = myDataTable.getRecordSet().getRecords(); if(hideStickies == 0){ // hide non-selected attributes for(i=0; i