As of version 1.6.x, the ad price has been added to the classified ad template: attribute "price type double.
If you had already overloaded the classified ad type to add the "price" :
Delete the "price" declaration in your overload
If your "price" type was a string instead of double, run the following script to migrate the "price" attribute from string to double for your existing ads. Set handle to true to make script effective.
Oops!
Copy to clipboard failed. Open the code and copy it manually.
let handle = false;
let success = 0;
let failure = 0;
let logger = Ametys.getLogger("org.ametys.plugins.classifiedads.migrate.price", { "filename": "migration", "level": "info" });
Repository.query("//element(*, ametys:content)[@ametys-internal:contentType = 'org.ametys.plugins.classified.ads.Content.ads']").forEach(
content =>
{
if (handle)
{
Content.migrate(
content,
[_migratePrice],
false /* old versions are still compatible */,
null /* no tag */,
false /* not verbose */,
true /* Synchronize with live workspace */
);
}
else
{
_migratePrice(content);
}
}
);
logger.info(`${success} ads have been migrated`);
if (failure > 0)
{
logger.warn(`Migration of ${failure} ads failed`);
}
function _migratePrice(content)
{
if (content.getNode().hasProperty("ametys:price"))
{
if (content.getNode().getProperty("ametys:price").getType() == 1)
{
let val = content.getNode().getProperty("ametys:price").getString();
let asDouble = parseFloat(val.replaceAll(",", "."));
if (Number.isNaN(asDouble))
{
logger.warn(`Price "${val}" can not be parse to double for content ${content.getTitle()} (${content.getId()})`);
failure++;
}
else
{
logger.debug(`Price "${val}" migrated to "${asDouble}" on content ${content.getTitle()} (${content.getId()})`);
if (handle)
{
content.getNode().getProperty("ametys:price").remove();
content.setValue("price", asDouble);
}
success++;
}
}
}
}
let handle = false;
let success = 0;
let failure = 0;
let logger = Ametys.getLogger("org.ametys.plugins.classifiedads.migrate.price", { "filename": "migration", "level": "info" });
Repository.query("//element(*, ametys:content)[@ametys-internal:contentType = 'org.ametys.plugins.classified.ads.Content.ads']").forEach(
content =>
{
if (handle)
{
Content.migrate(
content,
[_migratePrice],
false /* old versions are still compatible */,
null /* no tag */,
false /* not verbose */,
true /* Synchronize with live workspace */
);
}
else
{
_migratePrice(content);
}
}
);
logger.info(`${success} ads have been migrated`);
if (failure > 0)
{
logger.warn(`Migration of ${failure} ads failed`);
}
function _migratePrice(content)
{
if (content.getNode().hasProperty("ametys:price"))
{
if (content.getNode().getProperty("ametys:price").getType() == 1)
{
let val = content.getNode().getProperty("ametys:price").getString();
let asDouble = parseFloat(val.replaceAll(",", "."));
if (Number.isNaN(asDouble))
{
logger.warn(`Price "${val}" can not be parse to double for content ${content.getTitle()} (${content.getId()})`);
failure++;
}
else
{
logger.debug(`Price "${val}" migrated to "${asDouble}" on content ${content.getTitle()} (${content.getId()})`);
if (handle)
{
content.getNode().getProperty("ametys:price").remove();
content.setValue("price", asDouble);
}
success++;
}
}
}
}
let handle = false;
let success = 0;
let failure = 0;
let logger = Ametys.getLogger("org.ametys.plugins.classifiedads.migrate.price", { "filename": "migration", "level": "info" });
Repository.query("//element(*, ametys:content)[@ametys-internal:contentType = 'org.ametys.plugins.classified.ads.Content.ads']").forEach(
content =>
{
if (handle)
{
Content.migrate(
content,
[_migratePrice],
false /* old versions are still compatible */,
null /* no tag */,
false /* not verbose */,
true /* Synchronize with live workspace */
);
}
else
{
_migratePrice(content);
}
}
);
logger.info(`${success} ads have been migrated`);
if (failure > 0)
{
logger.warn(`Migration of ${failure} ads failed`);
}
function _migratePrice(content)
{
if (content.getNode().hasProperty("ametys:price"))
{
if (content.getNode().getProperty("ametys:price").getType() == 1)
{
let val = content.getNode().getProperty("ametys:price").getString();
let asDouble = parseFloat(val.replaceAll(",", "."));
if (Number.isNaN(asDouble))
{
logger.warn(`Price "${val}" can not be parse to double for content ${content.getTitle()} (${content.getId()})`);
failure++;
}
else
{
logger.debug(`Price "${val}" migrated to "${asDouble}" on content ${content.getTitle()} (${content.getId()})`);
if (handle)
{
content.getNode().getProperty("ametys:price").remove();
content.setValue("price", asDouble);
}
success++;
}
}
}
}