# Cypher query: Finding all paths between two nodes filtered by relationship properties

I have the following graph as a Neo4j graph database:

```                           activates
(80 °F)
(A)------------------------------------->(D)
| \__                                _/->^
|    \__  activates               __/    |
|       \__(50 °F)             __/       |
|          \__              __/          |
|             \__        __/             |
activates  |                \__  __/                |
(50 °F)   |                   \/                   | activates
|                 __/\__                 | (50 °F)
|    activates __/      \__              |
|    (60 °F)__/            \__           |
|        __/                  \__        |
|     __/                        \__     |
|  __/                              \_   |
v /                                   \->|
(B)------------------------------------->(C)
activates
(50 °F)
```

Each relationship has a property denoting the required temperature for the 'activates' action.

I need to retrieve all the available paths between (A) and (D) WHERE the temperature is 50 °F along the path.

The output should include:

```A -[:activates{temperature:'50'}]-> B -[:activates{temperature:'50'}]-> C -[:activates{temperature:'50'}]-> D

A -[:activates{temperature:'50'}]-> C -[:activates{temperature:'50'}]-> D
```

but not

```A -[:activates{temperature:'80'}]-> D

A -[:activates{temperature:'50'}]-> B -[:activates{temperature:'60'}]-> D
```

How do I write the required Cypher query?

Edit 1: I added another diagonal relationship (B -[:activates{temperature:'80'}]-> D) for more clarity.

Edit 2: I need to retrieve all the available paths between (A) and (D) WHERE the temperature is the same along the path, i.e: A -> B -> C -> D, A -> C -> D, A -> D.

```START a=node({A}), d=node({D})
MATCH p=a-[r:ACTIVATES*..]-d
WHERE has(r.temperature) and r.temperature='50'
RETURN p;
```

substitute the values in the curved brackets (A,D) with their node IDs

update: using function all

```START a=node(1), d=node(4)
MATCH p=a-[r:ACTIVATES*..]-d
WITH head(relationships(p))as r1,p //since the pointer r is a collection of rels we must declare a single relationship pointer
WHERE all(r2 in relationships(p)
where r2.temperature=r1.temperature)
return p;
```

### CakePHP: Redirecting all 404 errors to the homepage?

Is there a way or a function within a controller that tells if a 404 error was triggered? I would like everyone to redirect at the homepage instead of seeing a 404 page.

### C89 - Block of code in for loop increment clause

Is it possible, according to the C89/C90 standard, to insert a block of code into the increment clause of a for statement?