Despite what the name implies, node_validate() does not validate the node at all. Or at least not completely.<br><br>Try
to submit a story node using the UI form. If you don't enter a title,
you'll get an error (Title is required).<br><br>But programmatically :<br><span class="e" id="q_10badb588144864d_1"><span><span><pre>$node-&gt;type = 'story';<br>$node-&gt;uid = 1;<br>$node-&gt;title = ''; // invalid empty title!
<br>$node-&gt;body = ''; // invalid empty body!<br><br>// node_validate() does not check the emptiness of title or body<br>// like the UI does, so this validation will work... but shouldn't.<br>node_validate($node);<br><br>
if (form_get_errors()) {<br>  // I would expect to arrive here as the node was not valid (no<br>  // non-empty title or body set).<br>} else {<br>  // But instead, I arrive here and the node is saved without<br>  // trouble. If I go to the edit page of the new node, I'll get
<br>  // the form_errors again.<br>  node_save($node);<br>}<br></pre></span></span></span><br>This may be called a bug. Or at least rename node_validate() to node_doesn't_validate().<br><br>Robrecht<br><br><br><br><div><span class="gmail_quote">
On 6/7/06, <b class="gmail_sendername">Earl Dunovant</b> &lt;<a href="mailto:prometheus6@gmail.com">prometheus6@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div>Question: since node_validate() really does validate your new node (being a standard story node), why can't you use it?</div><div><span class="e" id="q_10badb588144864d_1"><br><br><div><span class="gmail_quote">On 6/7/06, 
<b class="gmail_sendername">Robrecht Jacques</b> &lt;
<a href="mailto:robrechtj+drupal@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">robrechtj+drupal@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<div><span>On 6/7/06, <b class="gmail_sendername">Earl Dunovant</b> &lt;<a href="mailto:prometheus6@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">prometheus6@gmail.com</a>&gt; wrote:
</span></div><div><div></div><div><span><span class="gmail_quote"></span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div><br>With no claim that it's the Right Way&copy; </div></div></blockquote></span></div><div><div><br>Again, no validation at all.<br><br>I know how to create a node programmatically. But this way, you can't be sure it is valid.
<br><br>
Thanks anyway,<br></div><div><span>Robrecht&nbsp;</span></div><div></div></div><div><span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">
function syndicator_item_to_node($item_id = NULL) {
<br>&nbsp; global $user;<br>&nbsp; if (is_null($item_id)) {<br>&nbsp;&nbsp;&nbsp; $iid = arg(2);<br>&nbsp;&nbsp;&nbsp; if (isset($iid)) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $item = db_fetch_object(db_query(SYNDICATOR_PROMOTE_TO_NODE_QUERY, $iid));<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp; }<br>&nbsp; else if (is_numeric($item_id)) {
<br>&nbsp;&nbsp;&nbsp; $item = db_fetch_object(db_query(SYNDICATOR_PROMOTE_TO_NODE_QUERY, $item_id));<br>&nbsp; }<br>&nbsp; if (isset($item)) {<br>&nbsp;&nbsp;&nbsp; $node = new stdClass();<br>&nbsp;&nbsp;&nbsp; $node-&gt;is_new = true;<br>&nbsp;&nbsp;&nbsp; $item-&gt;description = check_markup($item-&gt;description, $node-&gt;filter);
<br>&nbsp;&nbsp;&nbsp; $node-&gt;created = time();<br>&nbsp;&nbsp;&nbsp; $node-&gt;date = format_date($item-&gt;timestamp, 'custom', 'Y-m-d H:i:s O');<br>&nbsp;&nbsp;&nbsp; $node-&gt;type = variable_get('syndicator_publish_node_type', 'none');<br>&nbsp;&nbsp;&nbsp; $node-&gt;title = $item-&gt;title;
<br>&nbsp;&nbsp;&nbsp; $node-&gt;filter = variable_get('filter_default_format', FILTER_FORMAT_DEFAULT);<br>&nbsp;&nbsp;&nbsp; $node-&gt;body = theme('syndicator_published_content', $item);<br>&nbsp;&nbsp;&nbsp; $node-&gt;teaser = node_teaser(theme('syndicator_published_content', $item), 
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; variable_get('filter_default_format', FILTER_FORMAT_DEFAULT)); // might be unnecessary<br><br>&nbsp;&nbsp;&nbsp; $node_options = variable_get('node_options_' . $node-&gt;type, array());<br>&nbsp;&nbsp;&nbsp; $node-&gt;comment = variable_get('comment_' . $node-&gt;type, 2);
<br>&nbsp;&nbsp;&nbsp; unset($node-&gt;nid);<br>&nbsp;&nbsp;&nbsp; $node = node_submit($node);<br>&nbsp;&nbsp;&nbsp; $node-&gt;uid = $user-&gt;uid ? $user-&gt;uid : 1;<br>&nbsp;&nbsp;&nbsp; module_invoke('node', 'save', $node);<br>&nbsp; }<br>}<br><br><br></blockquote></div><div><span>


<br><div><span class="gmail_quote">
On 6/6/06, <b class="gmail_sendername">Robrecht Jacques</b> &lt;<a href="mailto:robrechtj+drupal@gmail.com" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)">robrechtj+drupal@gmail.com</a>&gt; wrote:
</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div>- and the real question: how does the following sequence of 
4.6 translate into 4.7:<br><pre>$node-&gt;type = 'story';<br>$node-&gt;uid = 1;<br>$node-&gt;title = ''; // invalid empty title!<br>$node-&gt;body = ''; // invalid empty body!<br><br>$node = node_validate($node); // if life was only that
<br><br><br><br><br>                              // that easy in 4.7... <br><br>if (form_get_errors()) {<br>  // we detected the error... do something<br>  unset($GLOBALS['form']);<br><br>  // note: we unset $GLOBALS['form'] so the next time we
<br><br><br><br><br>  // try this trick, form_get_errors() return the errors<br>  // of the last run and not of the previous.<br>  // If something like this would be possible in 4.7 it<br>  // would be great, but form_set_error() in 
<br><br><br>4.7 saves the<br><br>  // errors in a static variable inside form_set_error()<br>  // instead of in $GLOBALS['form']. I see no way to unset<br>  // that...<br>  $output .= node_view($node);<br>}<br>else {<br>  // no errors? hmm, great, save it... quickly before
<br><br><br><br><br>  // &quot;they&quot; introduce something else that breaks<br>  // &quot;common sense&quot;. Really: why call something<br>  // foobar_validate() if it doesn't validate anything<br>  // at all... Am I alone in this? I guess so.
<br><br><br><br><br>  node_save($node);<br>}<br></pre></div></div></blockquote></div><br>

</span></div></blockquote></span></div><div></div><br>

</div></blockquote></div><br>

</span></div></blockquote></div><br>