This file is a technical summary of changes in the Geodesic Solutions Classifieds and Auctions software.
Each entry will link to the corresponding bug found in Bugzilla on our website (You will
need current support contract to view, more info here).
246 - Subscription Pricing: Allow forcing registered users directly into the Purchase Subscription workflow - Sponsored 599 - Ability to see "messages sent" under my messages in my account 1366 - New Payment Gateway: PayPal Payments Advanced - Sponsored 1380 - Bulk Uploader: local tokenization for remote images 1393 - New Payment Gateway: BeanStream - Sponsored 1394 - Push 'declined' status to order items when their parent order is set to a admin-rejected state 1402 - New Payment Gateway: epay.dk - Sponsored 1417 - show link to Invoice on "payment accepted" page, when possible 1419 - Bulk Uploader: Allow using extant (but not creating new) image tokens when using "Faster" image processing 1422 - Storefront: allow showing store logos in place of generic links in browsing results - Sponsored 1424 - Exposed some transaction variables to transaction_approved.tpl - Sponsored 1426 - Added stats about the number of Listing Extras in play to the Admin Home page - Sponsored 1427 - Sharing: update facebook JS to use new version of their API file 1429 - allow dynamic-width images for Featured galleries (core display and featured modules) 1443 - Allow users to rotate images after uploading them 1447 - Added JSON transport to API 1448 - AdPlotter Integration 1451 - Added trimwhitespace output filter as a selectable optimization setting 1488 - Increase storage capacity of "title" field from MySQL TINYTEXT to TEXT 1499 - Added "Unlimited" as a listing duration choice 1506 - Improved RWD handling of Storefront Logos in a couple of spots
[Security Fixes]
- No Security fixes or patches for this release.
[Fixes/Maintenance]
446 - category navigation uses one too many columns 448 - Fatal Error in Geographic Navigation addon 1505 - PaymentExpress gateway no longer forces SSLv3 447 - description length and HTML filtering out of order (fixes MS Office bug) 1440 - Bulk Uploader: add missing "show contact seller" / "show other ads" switches 1493 - Fixed new ReCAPTCHA to work correctly for registration 1496 - Core Display: Browsing Filters: numeric fields that do not represent a cost will no longer display with price formatting 1497 - buyer-selected cost options on auction details page will now correctly use their listing's currency 1498 - Listing Exporter: now returns the correct listings when selecting multiple categories (for real, this time ;) ) 1503 - touchscreen devices cannot enter offsite video data 1507 - Update textarea wrap css to use white-space: pre-wrap to account for a "correction" made in Firefox 36
[Template Changes]
Reference Purposes Only: Like the rest of this changelog, the
template changes below are for reference purposes only, not (necessarily)
a list of changes everyone needs to follow. Refer to the full update instructions
to find if you need to make any template changes during an update.
-moz-box-sizing:border-box; /* Firefox */}/* also have a way to make sure images stay inside their containers note: not applying this to ALL images (at least not yet) since there are lots that specify their own dimensions explicitly/directly*/img.max-90 { max-width: 90%;}/* ========================================================================== Browse Happy prompt ========================================================================== */
Near line 132, make the following changes:
-moz-box-sizing:border-box; /* Firefox */}/* also have a way to make sure images stay inside their containers note: not applying this to ALL images (at least not yet) since there are lots that specify their own dimensions explicitly/directly*/img.max-90 { max-width: 90%;}/* ========================================================================== Browse Happy prompt ========================================================================== */
Near line 2802, FIND:
right: 0;}.media-runtime { /* This styles a little bit of text on the uploader that helps debug when there are problems... Point is to not stand out, look kinda-official, and be
Replace With:
right: 0;}.media-rotate { position: absolute; top:0.1em; right: 2.0em}.media-runtime { /* This styles a little bit of text on the uploader that helps debug when there are problems... Point is to not stand out, look kinda-official, and be
Near line 2802, make the following changes:
right: 0;}.media-rotate { position: absolute; top:0.1em; right: 2.0em}.media-runtime { /* This styles a little bit of text on the uploader that helps debug when there are problems... Point is to not stand out, look kinda-official, and be
gjUtil.addError(gjUtil.imageUpload._msgs.m500682); }); }); }, titleUpdate : function () {
Replace With:
gjUtil.addError(gjUtil.imageUpload._msgs.m500682); }); }); jQuery('.rotateImage').unbind('.imgRot') .on('click.imgRot', function (e) { e.preventDefault(); var imgId = this.hash.replace('#',''); //prevent form from submitting until ajax is done jQuery('form').unbind('.imgSave').on('submit.imgSave', function(e) {e.preventDefault();}); jQuery.ajax({ type: 'POST', url: gjUtil.imageUpload._ajaxUrl+'?controller=UploadImage&action=rotate&adminId='+gjUtil.imageUpload._adminId+'&userId='+gjUtil.imageUpload._userId, data: { 'image_id' : imgId, 'degrees' : 270 } }).done(function (response) { jQuery('form').unbind('.imgSave'); if (response.error) { gjUtil.imageUpload.handleError(response.error); return; } if (response.debug) { console.log('Debug: '+response.debug); } //manually rotate the image here for just this page-load (to show the result of what has already happened on the server) var previewImg = jQuery('#imagesPreview_'+imgId+' div.media-preview-image img'); var currentAngle = previewImg.getRotateAngle(); if(!currentAngle) { currentAngle = 0; } var rotateTo = Math.round(1*currentAngle + 90); previewImg.rotate(rotateTo); //if the full-size popout image is present, cachebust each rotation position previewLink = jQuery('#imagesPreview_'+imgId+' div.media-preview-image a'); if(previewLink.attr('href').length > 0) { if(!previewLink.data('cachebuster')) { //store (only) the original href previewLink.data('cachebuster',previewLink.attr('href')); } previewLink.attr('href', previewLink.data('cachebuster') + "?_="+(rotateTo%360)); } }).error(function () { //some error deleting... jQuery('form').unbind('.imgSave'); }); }); }, titleUpdate : function () {
Near line 939, make the following changes:
gjUtil.addError(gjUtil.imageUpload._msgs.m500682); }); }); jQuery('.rotateImage').unbind('.imgRot') .on('click.imgRot', function (e) { e.preventDefault(); var imgId = this.hash.replace('#',''); //prevent form from submitting until ajax is done jQuery('form').unbind('.imgSave').on('submit.imgSave', function(e) {e.preventDefault();}); jQuery.ajax({ type: 'POST', url: gjUtil.imageUpload._ajaxUrl+'?controller=UploadImage&action=rotate&adminId='+gjUtil.imageUpload._adminId+'&userId='+gjUtil.imageUpload._userId, data: { 'image_id' : imgId, 'degrees' : 270 } }).done(function (response) { jQuery('form').unbind('.imgSave'); if (response.error) { gjUtil.imageUpload.handleError(response.error); return; } if (response.debug) { console.log('Debug: '+response.debug); } //manually rotate the image here for just this page-load (to show the result of what has already happened on the server) var previewImg = jQuery('#imagesPreview_'+imgId+' div.media-preview-image img'); var currentAngle = previewImg.getRotateAngle(); if(!currentAngle) { currentAngle = 0; } var rotateTo = Math.round(1*currentAngle + 90); previewImg.rotate(rotateTo); //if the full-size popout image is present, cachebust each rotation position previewLink = jQuery('#imagesPreview_'+imgId+' div.media-preview-image a'); if(previewLink.attr('href').length > 0) { if(!previewLink.data('cachebuster')) { //store (only) the original href previewLink.data('cachebuster',previewLink.attr('href')); } previewLink.attr('href', previewLink.data('cachebuster') + "?_="+(rotateTo%360)); } }).error(function () { //some error deleting... jQuery('form').unbind('.imgSave'); }); }); }, titleUpdate : function () {
Near line 1374, FIND:
};//For older scripts that still do things old wayvar getCookie = gjUtil.getCookie;
Replace With:
};//For older scripts that still do things old wayvar getCookie = gjUtil.getCookie;
Near line 1374, make the following changes:
};//For older scripts that still do things old wayvar getCookie = gjUtil.getCookie;var getCookie = gjUtil.getCookie;
New file added: external/js/plugins/jQueryRotate.js
In file external/js/system/order_items/offsite_videos/upload_ajax.js
Near line 154, FIND:
//for us! So we can call geoVidProcess whenever we need the sortable items to be //re-done, no need to call destroy ourselves if (!jQuery('#offsite_videos_outer').length) { //oops, not found... return; }
Replace With:
//for us! So we can call geoVidProcess whenever we need the sortable items to be //re-done, no need to call destroy ourselves if (true || !jQuery('#offsite_videos_outer').length) { //jQuery.sortable() breaks data entry on phones/tablets, so neutering this until a solution can be found (see Bug #1503, 1504) return; }
Near line 154, make the following changes:
//for us! So we can call geoVidProcess whenever we need the sortable items to be //re-done, no need to call destroy ourselves if (!jQuery('#offsite_videos_outer').length) { //oops, not found... if (true || !jQuery('#offsite_videos_outer').length) { //jQuery.sortable() breaks data entry on phones/tablets, so neutering this until a solution can be found (see Bug #1503, 1504) return; }
In file main_page/front_page.tpl
Near line 125, FIND:
a list of all parameters that can be over-written in this way. *} {module tag='module_featured_pic_1' gallery_columns=3 module_thumb_width=90} </div> <!-- FEATURED CAROUSEL END -->
Replace With:
a list of all parameters that can be over-written in this way. *} {module tag='module_featured_pic_1' gallery_columns=4 dynamic_image_dims=1} </div> <!-- FEATURED CAROUSEL END -->
Near line 125, make the following changes:
a list of all parameters that can be over-written in this way. *} {module tag='module_featured_pic_1' gallery_columns=3 module_thumb_width=90} {module tag='module_featured_pic_1' gallery_columns=4 dynamic_image_dims=1} </div> <!-- FEATURED CAROUSEL END -->
In file main_page/listing_auction.tpl
Near line 60, FIND:
{/if} <!-- FIELDS ABOVE GET HIDDEN IF BUY NOW ONLY AUCTION --> <li class="label">{$time_remaining_label}</li> <li class="value">{listing tag='time_remaining'}<span class="sub_note">({$date_ended_label} {$date_ended})</span></li> <li class="label">{$date_started_label}</li> <li class="value">{$date_started}<br /> <span class="sub_note">({$bid_start_date_label} {$bid_start_date})</span></li> </ul>
Replace With:
{/if} <!-- FIELDS ABOVE GET HIDDEN IF BUY NOW ONLY AUCTION --> <li class="label">{$time_remaining_label}</li> <li class="value">{listing tag='time_remaining'}{if $date_ended}<span class="sub_note">({$date_ended_label} {$date_ended}){/if}</span></li> <li class="label">{$date_started_label}</li> <li class="value">{$date_started}<br /> <span class="sub_note">({$bid_start_date_label} {$bid_start_date})</span></li> </ul>
Near line 60, make the following changes:
{/if} <!-- FIELDS ABOVE GET HIDDEN IF BUY NOW ONLY AUCTION --> <li class="label">{$time_remaining_label}</li> <li class="value">{listing tag='time_remaining'}<span class="sub_note">({$date_ended_label} {$date_ended})</span></li> <li class="value">{listing tag='time_remaining'}{if $date_ended}<span class="sub_note">({$date_ended_label} {$date_ended}){/if}</span></li> <li class="label">{$date_started_label}</li> <li class="value">{$date_started}<br /> <span class="sub_note">({$bid_start_date_label} {$bid_start_date})</span></li> </ul>
{elseif $question.type == 'textarea'} {* Question value will be from user input, which is already html escaped *} <textarea name="b[question_value][{$key}]" id="b[question_value][{$key}]" cols="60" rows="15" class="field" {if $field_config.textarea_wrap}style="white-space: pre;"{/if}>{$session_variables.question_value.$key}</textarea> {elseif $question.type == "check"} {* Question value will be from DB value, which is NOT already html escaped, DO NOT remove the HTML escape for this specific type of question! *}
Replace With:
{elseif $question.type == 'textarea'} {* Question value will be from user input, which is already html escaped *} <textarea name="b[question_value][{$key}]" id="b[question_value][{$key}]" cols="60" rows="15" class="field" {if $field_config.textarea_wrap}style="white-space: pre-wrap;"{/if}>{$session_variables.question_value.$key}</textarea> {elseif $question.type == "check"} {* Question value will be from DB value, which is NOT already html escaped, DO NOT remove the HTML escape for this specific type of question! *}
Near line 32, make the following changes:
{elseif $question.type == 'textarea'} {* Question value will be from user input, which is already html escaped *} <textarea name="b[question_value][{$key}]" id="b[question_value][{$key}]" cols="60" rows="15" class="field" {if $field_config.textarea_wrap}style="white-space: pre;"{/if}>{$session_variables.question_value.$key}</textarea> {if $field_config.textarea_wrap}style="white-space: pre-wrap;"{/if}>{$session_variables.question_value.$key}</textarea> {elseif $question.type == "check"} {* Question value will be from DB value, which is NOT already html escaped, DO NOT remove the HTML escape for this specific type of question! *}
New file added: system/payment_gateways/paypal_advanced/iframe.tpl
In file system/user_management/communications/list_communications.tpl
1514 - Fixed an odd interaction between the Storefront and Fusion/Marquee templates that could sometimes redirect visitors to the wrong page
[Template Changes]
Reference Purposes Only: Like the rest of this changelog, the
template changes below are for reference purposes only, not (necessarily)
a list of changes everyone needs to follow. Refer to the full update instructions
to find if you need to make any template changes during an update.
In file system/order_items/listing_edit/edit_choices.tpl
1508 - Created a new image gallery with optimized thumbnail sizes 1509 - Admin tool 'category levels to display in admin' setting not affecting bulk uploader 1511 - Added more user/auction data access within auction emails system templates 1513 - Made more variables available to auction email templates 1521 - Add new default categories for new installations 1522 - Add ability to redirect in https when ip to region feature in use within geo nav addon 1526 - Add new stat to site stats addon to get listing count with optional region and category values passed in 1527 - Add new date display format options 1531 - AdPlotter: automatic affiliate registration 1533 - Added ability to use https with the ip to region feature - Sponsored 1534 - Clarified language surrounding "Force From e-mail" feature to better indicate its usefulness in avoiding DMARC bouncebacks 1538 - Update Mobile Detect 3rd Party Library to v2.8.13 1539 - Add tablet detection variable to templates
[Security Fixes]
- No Security fixes or patches for this release.
[Fixes/Maintenance]
1529 - Storefront: fixed broken links in browse results and errant redirects 1510 - Front page category hide feature affecting beyond top level categories in admin tool 1512 - Listing titles not displaying within listing expiration emails 1515 - Fix to individual category display display on front page 1520 - Cron to close expired listings error 1524 - Fixed front-end setting for number of levels in a category dropdown also restricting dropdowns in the admin 1525 - The new "Force Subscription" feature will no longer overzealously redirect ajax calls 1532 - AdPlotter: syndicated listings now use the "no image" picture if they do not have an images attached 1535 - youtube video displays over gallery lightbox display in some IE browsers 1536 - Listing Feeds (RSS / Oodle / Listing Exporter) now correctly urldecode Extra Question data 1537 - GeoNav: (Really) fixed Change Region selector box returning to blank page when triggered from inside some addon pages 1540 - Correct text within category tree display configuration 1530 - Bulk Uploader: enable Unlimited Duration listings
[Template Changes]
Reference Purposes Only: Like the rest of this changelog, the
template changes below are for reference purposes only, not (necessarily)
a list of changes everyone needs to follow. Refer to the full update instructions
to find if you need to make any template changes during an update.
In file system/listing_details/image_block/gallery2.tpl
In file system/listing_details/offsite_videos_block.tpl
Near line 4, FIND:
{foreach from=$offsite_videos item='video'} {if $video.video_type=='youtube'} <div class="embed-container"> <iframe src='//www.youtube.com/embed/{$video.video_id|escape}' frameborder='0' allowfullscreen></iframe> </div> {/if} {* If any more video types are ever added, they would be added here. *}
Replace With:
{foreach from=$offsite_videos item='video'} {if $video.video_type=='youtube'} <div class="embed-container"> <!-- added wmode parameters to fix odd issue where IE was displaying video above transparent gallery popup --> <iframe src='//www.youtube.com/embed/{$video.video_id|escape}?wmode=transparent' frameborder='0' wmode="opaque" allowfullscreen></iframe> </div> {/if} {* If any more video types are ever added, they would be added here. *}
Near line 4, make the following changes:
{foreach from=$offsite_videos item='video'} {if $video.video_type=='youtube'} <div class="embed-container"> <iframe src='//www.youtube.com/embed/{$video.video_id|escape}' frameborder='0' allowfullscreen></iframe> <!-- added wmode parameters to fix odd issue where IE was displaying video above transparent gallery popup --> <iframe src='//www.youtube.com/embed/{$video.video_id|escape}?wmode=transparent' frameborder='0' wmode="opaque" allowfullscreen></iframe> </div> {/if} {* If any more video types are ever added, they would be added here. *}
1548 - Added two new default categories: Lost/Found Pets and Business Opportunities
[Security Fixes]
- No Security fixes or patches for this release.
[Fixes/Maintenance]
1543 - Fixed issue in system grid view template where icons column header displays properly if no title 1546 - Restored missing thumbnails for non-image file uploads in browsing views 1549 - Core Display: Browsing Filters: listing counts may now be turned off 1550 - fix spacing on search form mobile view 1551 - Add fix to stop sending listing expiration emails for endless listings 1553 - Fix storefront logo to resize proportionally with regards to height 1557 - improve Region detection for listings created via the adplotter API 1558 - Charity Tools: fixed Charitable Badge erroring out on attempted Upgrade 1559 - Do not use CURLOPT_FOLLOWLOCATION if open_basedir is set 1544 - fixed a couple of javscript errors in listing placement 1545 - Fixed User Importer formatting errors 1555 - Fixed a couple of places where inputs on the registration form could word-wrap oddly on small screens
[Template Changes]
Reference Purposes Only: Like the rest of this changelog, the
template changes below are for reference purposes only, not (necessarily)
a list of changes everyone needs to follow. Refer to the full update instructions
to find if you need to make any template changes during an update.
In file external/css/default.css
Near line 393, FIND:
padding: .6em 0 .6em .6em;}@media only screen and (min-width: 52em) { /* ========================================================================== Shared Breakpoint 1: 52em is about size that 2 column layout will
Replace With:
padding: .6em 0 .6em .6em;}.field_label.spacer { /* hide search form spacers unless the screen is big enough to call for them */ display: none;}@media only screen and (min-width: 52em) { /* ========================================================================== Shared Breakpoint 1: 52em is about size that 2 column layout will
Near line 393, make the following changes:
padding: .6em 0 .6em .6em;}.field_label.spacer { /* hide search form spacers unless the screen is big enough to call for them */ display: none;}@media only screen and (min-width: 52em) { /* ========================================================================== Shared Breakpoint 1: 52em is about size that 2 column layout will
Near line 842, FIND:
/* Only add shadow on larger displays, as it can look "fuzzy" when smaller */ text-shadow: 1px 1px 0 #DDD; }}/* ==========================================================================
Replace With:
/* Only add shadow on larger displays, as it can look "fuzzy" when smaller */ text-shadow: 1px 1px 0 #DDD; } .field_label.spacer { /* used mainly on the search page, to add uniform left spacing to unlabeled fields */ display: inline-block; }}/* ==========================================================================
Near line 842, make the following changes:
/* Only add shadow on larger displays, as it can look "fuzzy" when smaller */ text-shadow: 1px 1px 0 #DDD; } .field_label.spacer { /* used mainly on the search page, to add uniform left spacing to unlabeled fields */ display: inline-block; }}/* ==========================================================================
<div class="usage_agreement">{$eula_text}</div> {elseif $eula_type == "area"} <textarea name="registration_agreement" class="field usage_agreement" readonly="readonly" onfocus="this.blur();">{$eula_text}</textarea> {elseif $eula_type == "hide"} {* nothing to print here. probably linking to external Terms page from previous text *} {/if} </div> {/if} {if !$steps_combined}
Near line 21, make the following changes:
<div class="usage_agreement">{$eula_text}</div> {elseif $eula_type == "area"} <textarea name="registration_agreement" class="field usage_agreement" readonly="readonly" onfocus="this.blur();">{$eula_text}</textarea> {/if} {elseif $eula_type == "hide"} {* nothing to print here. probably linking to external Terms page from previous text *} {/if} </div> {/if} {if !$steps_combined}
In file system/registration/registration_form.tpl
Near line 17, FIND:
{if $f.type == "text"} <input type="text" id="{$f.name}" name="{$f.name}" value="{$f.value}" size="{if !$f.size or $f.size > 30}30{else}{$f.size}{/if}" maxlength="{if !$f.size}100{else}{$f.size}{/if}" class="field" /> {elseif $f.type == "radio"} {foreach from=$f.options item=radio key=k name=radioLoop} <label><input id="{$f.name}" type="radio" name="{$f.name}" value="{$k}" {if $radio.checked}checked="checked"{/if} /> {$radio.text}</label> {/foreach} {else} {* no field type explicity set by PHP. Probably something like Regions that has its own HTML *} {$f.value}
Replace With:
{if $f.type == "text"} <input type="text" id="{$f.name}" name="{$f.name}" value="{$f.value}" size="{if !$f.size or $f.size > 30}30{else}{$f.size}{/if}" maxlength="{if !$f.size}100{else}{$f.size}{/if}" class="field" /> {elseif $f.type == "radio"} <span style="white-space: nowrap;"> {foreach from=$f.options item=radio key=k name=radioLoop} <label><input id="{$f.name}" type="radio" name="{$f.name}" value="{$k}" {if $radio.checked}checked="checked"{/if} /> {$radio.text}</label> {/foreach} </span> {else} {* no field type explicity set by PHP. Probably something like Regions that has its own HTML *} {$f.value}
Near line 17, make the following changes:
{if $f.type == "text"} <input type="text" id="{$f.name}" name="{$f.name}" value="{$f.value}" size="{if !$f.size or $f.size > 30}30{else}{$f.size}{/if}" maxlength="{if !$f.size}100{else}{$f.size}{/if}" class="field" /> {elseif $f.type == "radio"} {foreach from=$f.options item=radio key=k name=radioLoop} <label><input id="{$f.name}" type="radio" name="{$f.name}" value="{$k}" {if $radio.checked}checked="checked"{/if} /> {$radio.text}</label> {/foreach} <span style="white-space: nowrap;"> {foreach from=$f.options item=radio key=k name=radioLoop} <label><input id="{$f.name}" type="radio" name="{$f.name}" value="{$k}" {if $radio.checked}checked="checked"{/if} /> {$radio.text}</label> {/foreach} </span> {else} {* no field type explicity set by PHP. Probably something like Regions that has its own HTML *} {$f.value}
<div class="usage_agreement">{$eula.text}</div> {elseif $eula.type == "area"} <textarea name="registration_agreement" class="field usage_agreement" readonly="readonly" onfocus="this.blur();">{$eula.text}</textarea> {elseif $eula.type == "hide"} {* don't print the EULA here. Most commonly used with a link in the label text *} {/if} </div> {/if}
Near line 105, make the following changes:
<div class="usage_agreement">{$eula.text}</div> {elseif $eula.type == "area"} <textarea name="registration_agreement" class="field usage_agreement" readonly="readonly" onfocus="this.blur();">{$eula.text}</textarea> {elseif $eula.type == "hide"} {* don't print the EULA here. Most commonly used with a link in the label text *} {/if} </div> {/if}