Log in

View Full Version : [error] Field postuserid is not defined in $validfields


iComotionLtd
01-19-2007, 06:12 PM
Hi,

I'm making a MOD and running into an annoying issue.

I've made a cron, ran by the Scheduled Task Manager that imports posts and sticks them in the database.

This is part of the code (which works fine if...)

(I first include all the necessary files and note I post them as Guests with a username.)


$threaddm =& datamanager_init('Thread_FirstPost', $vbulletin, ERRTYPE_ARRAY, 'threadpost');
$forumid = intval($topic['forum_id']);
$postusername = $topic['user_name'];
$postuserid = 0;
$userid = 0;
$pagetext = $topic['content'];
$title = $topic['topic_title'];
$allowsmilie = '1';
$visible = '1';
$open = 0;
$foruminfo = fetch_foruminfo($forumid);
$threadinfo = array();

$foruminfo = verify_id('forum', $forumid, 0, 1);
$threaddm->set('forumid', $forumid);
$threaddm->set('postuserid', $postuserid);
$threaddm->set('username', $postusername);
$threaddm->set('postusername', $postusername);
$threaddm->set('pagetext', $pagetext);
$threaddm->set('title', $title);
$threaddm->set('allowsmilie', $allowsmilie);
$threaddm->set('visible', $visible);
$threaddm->set_info('forum', $foruminfo);
$threaddm->set_info('thread', $threadinfo);
$threaddm->pre_save();
//print_r($threaddm->errors);
$topic_id = $threaddm->save();

build_forum_counters($forumid);


This indeed works fine but only if I go to Plugin System > Add New Plugin and do:
Hook Location: threadfpdata_start
Plugin PHP Code:

$this->validfields['postusername'] = array(TYPE_STR, REQ_YES);
$this->validfields['postuserid'] = array(TYPE_INT, REQ_YES);


Then I can run the cron just fine.

But on the live website I then get this if I create a thread:

Fatal error: Unable to proceed with save while $errors array is not empty in class vb_datamanager_thread_firstpost in /var/www/mydomain.com/public/forums/includes/class_dm.php on line 758

Comment out or disable the Plugin and I can post on the front-end but then my cron says:


Fatal error: Field postuserid is not defined in $validfields in class vb_datamanager_thread_firstpost in /var/www/mydomain.com/public/forums/includes/class_dm.php on line 485

Can any of you guru's shed some light on this please?

BTW I run 3.5.7 due to lack of MySQL 4.

Thanks!

Joe

iComotionLtd
01-21-2007, 02:15 PM
Let me rephrase this with a working bit of code:


<?php

// add_thread.php
// This is a concept file in /includes/cron/

// ######################## SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
if (!is_object($vbulletin->db))
{
exit;
}

// ################################################## ######################
// ######################### START MAIN SCRIPT ############################
// ################################################## ######################

$db = $vbulletin->db; // global.php expects $db as oppose to $vbulletin->db [work-around]
require_once('././global.php');
require_once('././includes/class_dm.php');
require_once('././includes/class_dm_threadpost.php');
require_once('././includes/functions_databuild.php');

$threaddm =& datamanager_init('Thread_FirstPost', $vbulletin, ERRTYPE_ARRAY, 'threadpost');
$forumid = 2; // Main Forum as per VB default
$postusername = 'John Smith';
$postuserid = 0; // Enter as Guest
$userid = 0; // Enter as Guest
$pagetext = 'My name is John Smith and this is a test thread!';
$title = 'Test Thread by John Smith';
$allowsmilie = '1';
$visible = '1';
$open = 0;
$foruminfo = fetch_foruminfo($forumid);
$threadinfo = array();

$foruminfo = verify_id('forum', $forumid, 0, 1);
$threaddm->set('forumid', $forumid);
$threaddm->set('postuserid', $postuserid);
$threaddm->set('username', $postusername);
$threaddm->set('postusername', $postusername);
$threaddm->set('pagetext', $pagetext);
$threaddm->set('title', $title);
$threaddm->set('allowsmilie', $allowsmilie);
$threaddm->set('visible', $visible);
$threaddm->set_info('forum', $foruminfo);
$threaddm->set_info('thread', $threadinfo);
$threaddm->pre_save();
//print_r($threaddm->errors);
$topic_id = $threaddm->save();

build_forum_counters($forumid);

// Now go to Scheduled Tasks -> Add this file and run it.

// This results in:

/*
Fatal error: Field postuserid is not defined in $validfields in class vb_datamanager_thread_firstpost in /var/www/mydomain.com/public/forums/includes/class_dm.php on line 485
*/

// Now go to Plugin System -> Add New Plugin
// Hook Location threadfpdata_start
// Plugin PHP Code:
// $this->validfields['postuserid'] = array(TYPE_INT, REQ_YES);

// Run Scheduled Task again, this results in:

/*
Fatal error: Field postusername is not defined in $validfields in class vb_datamanager_thread_firstpost in /var/www/mydomain.com/public/forums/includes/class_dm.php on line 485
*/

// Now go to Plugin System -> Edit the Plugin we just create above
// Hook Location threadfpdata_start
// Add Plugin PHP Code:
// $this->validfields['postusername'] = array(TYPE_STR, REQ_YES);
// So the entire Plugin now looks like
// $this->validfields['postuserid'] = array(TYPE_INT, REQ_YES);
// $this->validfields['postusername'] = array(TYPE_STR, REQ_YES);

// Run Scheduled Task again, this results successfully adding the thread.

// BUT... Now go the the forum front-end and try and post a new thread...

// This reults in error:

/*
Fatal error: Unable to proceed with save while $errors array is not empty in class vb_datamanager_thread_firstpost in /var/www/mydomain.com/public/forums/includes/class_dm.php on line 758
*/

// Comment out or de-activate the Plugin above and the front-end works again but the Scheduled Task chokes again.

?>


FYI (if any) I fixed it.

Rather than building using a hook, which obivously clashes with standard code, I built the validfield definitions straigt into the code, just prior to executing $threaddm->save():

$threaddm->validfields['postusername'] = array(TYPE_STR, REQ_YES);
$threaddm->validfields['postuserid'] = array(TYPE_INT, REQ_YES);

[case closed]