[documentation] [bug] node_validate() is never called
drewish
drupal-docs at drupal.org
Mon Mar 13 19:44:41 UTC 2006
Issue status update for
http://drupal.org/node/53639
Post a follow up:
http://drupal.org/project/comments/add/53639
Project: Documentation
Version: <none>
Component: Developer Guide
Category: bug reports
Priority: normal
Assigned to: mercmobily
Reported by: mercmobily
Updated by: drewish
Status: active
mercmobily, based on that last bit of code you pasted in, it doesn't
look like you've got a HEAD version of the node_example.module. take a
look around in it and see if it implements hook_nodeapi()'s "'delete
revision" operation. if it doesn't you've got an old version.
i've heard that drupaldocs.org hasn't been updated recently, and that
it's being moved to a different server, so you'll probably have to use
CVS to get the current version. at the time of this posting, this [1]
is the current version.
hopefully that will help fix a couple of your problems.
[1]
http://cvs.drupal.org/viewcvs/drupal/contributions/docs/developer/examples/node_example.module?only_with_tag=HEAD&view=markup
is
drewish
Previous comments:
------------------------------------------------------------------------
Sun, 12 Mar 2006 10:55:02 +0000 : mercmobily
Hi,
I developed my own module type, article_node.
I wrote my own node_article_validate(&$node) function:
function node_article_validate(&$node) {
if (!user_load(array('name' => $node->editor_uid_name))) {
form_set_error('editor_uid_name', t('The editor must be a valid
account'));
}
}
...but it wouldn't get called.
I then added this to node.module ("the" node.module which comes with
Drupal):
/** * Perform validation checks on the given node. */
function node_validate($node) {
// Convert the node to an object, if necessary.
$node = (object)$node;
this_does_not_exist(); // SEE THIS! THIS WAS ADDED!
// Make sure the body has the minimum number of words.
[...]
Well, believe it or not, EVERYTHING works absolutely fine! Add a node,
edit it... and no error is given for calling "this_does_not_exist".
I marked it as "critical", because no validation can be really bad...
Merc.
------------------------------------------------------------------------
Sun, 12 Mar 2006 13:32:40 +0000 : markus_petrux
To use hook_validate() you have to implement hook_node_info() too. See
the page.module for an example.
>> node_validate() not being invoked?
Well, I have made the following test.
1) Goto admin/settings/content-types/page
2) Set a minimum of 10 words for page nodes and save.
3) Goto node/add/page, enter a title 'test' and a body 'just 3 words'
I get an error message issued from node_validate().
I'm changing the status of this issue to 'support request' with
'normal' priority. But maybe I didn't got the problem right, so feel
free to correct me if I've been wrong.
------------------------------------------------------------------------
Sun, 12 Mar 2006 14:55:23 +0000 : mercmobily
Hello,
I have most definitely implemented node_info (in my case,
node_article_node_info() ).
The piece of code I provided was only a tiny fraction of my module
(which I will release when it's finished, BTW).
Plus, the issue was marked as critical because you can write *jokes* in
node_validate() in the CORE module node.module - it is never, ever
executed.
As I wrote above, change the core function node.module from:
------------------------
/** * Perform validation checks on the given node. */
function node_validate($node) {
// Convert the node to an object, if necessary.
$node = (object)$node;
// Make sure the body has the minimum number of words.
[...]
------------------------
To:
------------------------
/** * Perform validation checks on the given node. */
function node_validate($node) {
// Convert the node to an object, if necessary.
$node = (object)$node;
knock_knock_who_is_it_its_the_doctor_doctor_who_ah_you_said_it();
// Make sure the body has the minimum number of words.
[...]
-------------------------
Then, you can submit forms in the system - the node_validate is never,
ever called.
I don't know Drupal well enough yet (I've installed it a week ago for
the first time), but I have the feeling that the problem I am having is
related.
I remember seeing a patch to avoid node_validate() being called
twice... maybe that went funny?
Bye,
Merc.
------------------------------------------------------------------------
Sun, 12 Mar 2006 15:28:40 +0000 : markus_petrux
Well, I edited my version (HEAD) of node.module to call a non-defined
function from node_validate() and..
1) Goto node/add/page
2) enter a title 'test' and a body 'hello world'
3) hit 'preview'
I got a blank page with the following:
Fatal error: Call to undefined function: test_a_non_defined_function()
in /path-to-drupal/modules/node.module on line 1608
I my case node_validate() is called.
If you can't see that, hmm... have you checked admin/logs ?
------------------------------------------------------------------------
Mon, 13 Mar 2006 01:52:26 +0000 : mercmobily
OK, you are completely right and I am a complete idiot.
Well... not 100% complete idiot.
I am not sure this is a problem with the "drupal core" - I am leaving
it here just in case it is.
I based my module on node_example.module. Now, I:
* Copied module.example *as is* and put it in "modules". I also created
its table
* I changed it slightly:
-------------------
function node_example_validate(&$node) {
this_does_not_exist(); // I ADDED THIS
if ($node->quantity) {
if (!is_numeric($node->quantity)) {
form_set_error('quantity', t('The quantity must be a number.'));
}
}
---------------------
The node_example_validate hook is never called - I can create
"node_example" node types without any trouble.
Now, there are two possibilities:
* The node_example.module is somehow wrong
* The drupal core is doing something wrong
To be honest, I don't think it's the core - I tested blog.module, and
blog_validate() is indeed called.
However, I think it's worth investigating, because potentially a lot of
people will use module_example.module and will run into the same
issue...!
Thanks a million,
Merc.
------------------------------------------------------------------------
Mon, 13 Mar 2006 02:21:51 +0000 : markus_petrux
Since core is changing everyday, node_example is probably out dated; I
think this issue belongs to the Document project.
In the meantime, try to look at how core modules (maybe page or story)
or some other contrib modules work.
------------------------------------------------------------------------
Mon, 13 Mar 2006 02:35:07 +0000 : mercmobily
Hello,
Well, since the problem seems to be in node_example, I guess it is a
documentation issue.
However, it's very frustrating: there seem to be a 1:1 correspondence
between the functions in page.module and node_example.module, and yet
page_validate() is called, and node_example_validate() isn't.
Any ideas, anybody?
Merc.
------------------------------------------------------------------------
Mon, 13 Mar 2006 04:34:49 +0000 : mercmobily
FOUND IT!!!
The problem is in node_article_form().
Right now, it returns:
return array_merge($form, filter_form($node->format));
This seems to inhibit node_article_validate() - I have no idea why.
If I return:
return $form;
Then the validation happens.
Any idea what filter_form does? And should it be deleted from
node_example?
More information about the documentation
mailing list