Hi all, For the node_import module which tries to import a whole set of nodes from a CSV file, I have the following problem: how does one validate a "$node" before "node_save()"ing it? Let me explain: In 4.6 we had the "node_validate($node)" function which validates the node (calling "hook_validate()" and "hook_nodeapi('validate')" as needed). If this was succesful (no "form_get_errors()"), then we could safely "node_save($node)" it. Now, in 4.7, most (if not all) validation is done using the form API, in things like "#validate" and "#required". For example, "story.module" requires that the title is not empty. It does that by setting a "#required" on the title-textfield. If I do: $node = (object) array('type' => 'story', 'uid' => 42, 'title' => ''); the node will pass "node_validate($node)", but this is because the validation inside "$form" was not run! So my questions are: - how does one validate a node programmatically *correctly*? - what is the point of the "node_validate()" function and the hooks if it doesn't actually *validate* the node at all? At least rename it to "node_noop()" so things are clear. - really, why have "node_validate()" at all? Does anyone do anything usefull in it? - and the real question: how does the following sequence of 4.6 translate into 4.7: $node->type = 'story'; $node->uid = 1; $node->title = ''; // invalid empty title! $node->body = ''; // invalid empty body! $node = node_validate($node); // if life was only that // that easy in 4.7... if (form_get_errors()) { // we detected the error... do something unset($GLOBALS['form']); // note: we unset $GLOBALS['form'] so the next time we // try this trick, form_get_errors() return the errors // of the last run and not of the previous. // If something like this would be possible in 4.7 it // would be great, but form_set_error() in 4.7 saves the // errors in a static variable inside form_set_error() // instead of in $GLOBALS['form']. I see no way to unset // that... $output .= node_view($node); } else { // no errors? hmm, great, save it... quickly before // "they" introduce something else that breaks // "common sense". Really: why call something // foobar_validate() if it doesn't validate anything // at all... Am I alone in this? I guess so. node_save($node); } Anyway, I have a solution, but that is so hackerish that I hope others know "The Right Solution(tm)". Thanks, Robrecht