El problema que tienes es la lógica de la condición.
Al inicio estás negando pero enseguida comparas con TRUE, ¿no te has dado cuenta?
Código PHP:
Ver original// MAL
if ( ! foo() == true)
// BIEN
if ( ! foo())
if (foo() == true)
if ( ! (foo() == true))
Observa bien los paréntesis y piensa un poco lo que significa tu condición comparada a las otras, ¿verdad que no significan lo mismo?