PDA

View Full Version : Add methode to class in constructor?


Whissi
03-07-2008, 07:14 PM
Hello,

I'd like to extend the forum dm.
It's easy to add new fields within the "forumdata_start" hook, but I also want to include a verify method.

When I add "function verify_fieldname" and "$this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, VF_METHOD);" to "forumdata_start", I get an error, that "verify_fieldname" wasn't found...

Any hint?

Antivirus
03-07-2008, 09:54 PM
I don't think you can use vfmethod for custom fields added to datamanagers unless a function already exists. I get around this problem by checking validation using php like follows:


'daysprune' => array(TYPE_INT, REQ_AUTO, 'if ($data == 0) { $data = -1; } return true;'),


There's some good details on datamanagers here (http://www.vbulletin.com/docs/html/data_manager_advanced), but I assume you've already read that.

Whissi
03-07-2008, 11:15 PM
Your solution doesn't work for me.
To check the data, I need to access some DM ressources :(

Opserty
03-08-2008, 08:21 AM
Are you sure? Make sure you changed it appropriately. If you want to do a more complicated check you could define a function outside the class using another Plugin then use that function in the custom check field.


function mycustom_check($data)
{
// Some long code here
// ....
// ....
// ....
// return true/false
}

// Try this first:
$this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, 'return mycustom_check($data)');

// If the above doesn't work try this:
// $this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, 'if(mycustom_check($data)) {return true;} else { return false; }');

// This is just a guess I haven't tried/tested it out.


What exactly are you trying to check for? (Give examples of valid/invalid data)

Whissi
03-08-2008, 11:51 AM
That's working - that's what Antivirus said and what I also tried.
But the problem is, that "mycustom_check" can't access class ressources.

If the check will fail, I cannot use "$this->error()" for example.

Opserty
03-08-2008, 12:59 PM
Well then but the contents of mycustom_check directly inside the string instead, does that not work?
like:

$string =
' /* Do some long check */
if($data != "something")
{
/*$this->error("You cant do this or something()*/
}
else
{
return true;
}

';
$this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, $string);

Does that not work? Does it generate errors or something? Have you test your validation code independently to ensure that it works in the first place?

Or:

function mycustom_check($data)
{
// Some long code here
// ....
// ....
// ....
// return true/false
}

$this->validfields['fieldname'] = array(TYPE_STR, REQ_NO, 'if(!mycustom_check($data)) { $this->error("Some error message!");} ');

How about that? (If you only need to use the error method).

What are you checking for/validating for? Is there not already a validation method in the Base Datamanager?

Whissi
03-08-2008, 03:43 PM
Thanks. Nice idea.

In the actual case, that will solve my problem.