Only allow delete if the date is in the future

How to conditionally show a delete button based on a future date in a CF form.

Overview

The issue occurred because the PHP code was incorrectly comparing a date object to a string and using the wrong variable path to access the date field.
Use a PHP block to evaluate the date, ensuring proper date comparison logic and correct field referencing. Then, use a Switch element to display the delete link only when the PHP block returns true for future dates.

Answered
Connectivity v6
st stikkimorey 19 Dec, 2018
Hi

I have a form based on the demo articles form, which has an article_delete_link which opens a popup containing {view:article_delete_confirm}

I need the form to show items with a date both future and past, but I need to make sure that only items with dates in the future can be deleted.

Is there a way to do this?

Many thanks
he healyhatman 19 Dec, 2018
Instead of using {view:article_delete_link} in your table, use
{fn:delete_switch_php$date=(var:tablename.row.datefield)}{fn:delete_switch}

instead.

Create a delete_switch_php PHP block. Return true or false depending on whether or not $this->get("date") is in the future or not.
Create a delete_switch Switch element. Data source {var:delete_switch_php}.
true:{view:article_delete_link}
false:Whatever you want

This will mean that the delete button only shows up for future articles.

DO NOT COPY+PASTE FROM THE FORUMS.
st stikkimorey 29 Dec, 2018
Thanks Healyhatman but I can't get this to work - it removes the delete button from future as well as past items.

The date is called start_date and has model ID of Article so I have created delete_switch_php like this:
$today = date("Y-m-d");
if ($this->get("Article.start_date")>$today){
return true;
} else {
return false;
}
Then I created a delete_switch element with a data provider of {var:delete_switch_php} and these values:
true:{view:article_delete_link}
false:No-delete
In the view I have replaced {view:article_delete_link} with
delete:{fn:delete_switch_php$start_date=(var:read_articles.row.start_date)}{fn:delete_switch}
Even when I have an item where the start_date is in the future.

Can you see from this what I am doing wrong?

Thanks again

Mikki
he healyhatman 29 Dec, 2018
Also that PHP code is.... Not right. I'm on holidays right now so can't do it for you but you're comparing a date object to a string
st stikkimorey 29 Dec, 2018
Thanks again - i should be able to fix it now.
he healyhatman 29 Dec, 2018
Answer
$this->get("Article.startdate") is probably wrong as well it should be tableviewname.row.model.field
st stikkimorey 10 Jan, 2019
Many thanks healyhatman that worked really well
This topic is locked and no more replies can be posted.