Quote:
Originally Posted by Danny.VBT
You should be calling pre_save() (I think that is the name of the function off the top of my head) before doing any error calling - it is there where the error array is populated.
|
Thanks, I'll look into that. I never used to have the error check in there. I put that in to see if there were any occuring.
--------------- Added [DATE]1234439530[/DATE] at [TIME]1234439530[/TIME] ---------------
ok, getting somewhere now. It's not the loop failing as I've tried removing that part and copying the code out three times then setting the award id manually like so;
PHP Code:
// Awards - This controls the foreach statement and is used as the array index for $grouparr
$awardarr = array(3, 5, 6, 9, 12, 13, 14, 17, 18, 20, 21, 24, 25, 29, 31, 32, 38, 39);
// Groups - Here we have the relevant award as the index and the group that award belongs to as the value
$grouparr = array(
3 => 50,
5 => 38,
6 => 50,
9 => 53,
12 => 23,
13 => 43,
14 => 43,
17 => 51,
18 => 37,
20 => 53,
21 => 53,
24 => 53,
25 => 53,
29 => 48,
31 => 40,
32 => 39,
38 => 46,
39 => 52
);
// ########################################################################
// ######################### USERGROUP UPDATES ############################
// ######################### GIVE ACCESS ############################
// ########################################################################
$awardval = 3;
$aw2gr = $grouparr[$awardval];
echo "<br><br>Award=".$awardval.", Group=".$aw2gr;
// check for award and update secondary usergroup if required
$giveawards = $vbulletin->db->query_read("
SELECT award_id, userid
FROM " . TABLE_PREFIX . "award_user
WHERE award_id = $awardval
");
if ($vbulletin->db->num_rows($giveawards) > 0)
{
while ($giveawardsrow = $vbulletin->db->fetch_array($giveawards))
{ // for each award, check to see if they are a member of the relevant group and update accordingly
$userdm =& datamanager_init('User', $vbulletin, ERRTYPE_ARRAY);
$userinfo = fetch_userinfo($giveawardsrow['userid']);
$userdm->set_existing($userinfo);
$membergroupids = $userdm->fetch_field('membergroupids');
echo "<br>Existing Groups=".$membergroupids." | ";
if ($membergroupids != "")
{
$withcomma = "," . $aw2gr;
$trailingcomma = $aw2gr . ",";
$membergroupids = str_replace("$withcomma", "", $membergroupids);
$membergroupids = str_replace("$trailingcomma", "", $membergroupids);
$membergroupids = str_replace("$aw2gr", "", $membergroupids);
if ($membergroupids != "")
{
$membergroupids = $membergroupids . $withcomma;
}
else
{
$membergroupids = $aw2gr;
}
}
else
{
$membergroupids = $aw2gr;
}
echo "UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
$userdm->set('membergroupids', $membergroupids);
$userdm->pre_save();
if (count($userdm->errors))
{
for ($i = 0; $i < count($userdm->errors); $i++)
{
echo "ERROR{$i}:{$userdm->errors[$i]}\n";
}
}
else
{
// If everything is OK
$userdm->save();
echo " | Account updated!";
$userdm->set_existing($userinfo);
$membergroupids = $userdm->fetch_field('membergroupids');
echo " | UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
}
}
$vbulletin->db->free_result($giveawardsrow);
}
$awardval = 5;
$aw2gr = $grouparr[$awardval];
echo "<br><br>Award=".$awardval.", Group=".$aw2gr;
// check for award and update secondary usergroup if required
$giveawards = $vbulletin->db->query_read("
SELECT award_id, userid
FROM " . TABLE_PREFIX . "award_user
WHERE award_id = $awardval
");
if ($vbulletin->db->num_rows($giveawards) > 0)
{
while ($giveawardsrow = $vbulletin->db->fetch_array($giveawards))
{ // for each award, check to see if they are a member of the relevant group and update accordingly
$userdm =& datamanager_init('User', $vbulletin, ERRTYPE_ARRAY);
$userinfo = fetch_userinfo($giveawardsrow['userid']);
$userdm->set_existing($userinfo);
$membergroupids = $userdm->fetch_field('membergroupids');
echo "<br>Existing Groups=".$membergroupids." | ";
if ($membergroupids != "")
{
$withcomma = "," . $aw2gr;
$trailingcomma = $aw2gr . ",";
$membergroupids = str_replace("$withcomma", "", $membergroupids);
$membergroupids = str_replace("$trailingcomma", "", $membergroupids);
$membergroupids = str_replace("$aw2gr", "", $membergroupids);
if ($membergroupids != "")
{
$membergroupids = $membergroupids . $withcomma;
}
else
{
$membergroupids = $aw2gr;
}
}
else
{
$membergroupids = $aw2gr;
}
echo "UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
$userdm->set('membergroupids', $membergroupids);
$userdm->pre_save();
if (count($userdm->errors))
{
for ($i = 0; $i < count($userdm->errors); $i++)
{
echo "ERROR{$i}:{$userdm->errors[$i]}\n";
}
}
else
{
// If everything is OK
$userdm->save();
echo " | Account updated!";
$userdm->set_existing($userinfo);
$membergroupids = $userdm->fetch_field('membergroupids');
echo " | UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
}
}
$vbulletin->db->free_result($giveawardsrow);
}
$awardval = 9;
$aw2gr = $grouparr[$awardval];
echo "<br><br>Award=".$awardval.", Group=".$aw2gr;
// check for award and update secondary usergroup if required
$giveawards = $vbulletin->db->query_read("
SELECT award_id, userid
FROM " . TABLE_PREFIX . "award_user
WHERE award_id = $awardval
");
if ($vbulletin->db->num_rows($giveawards) > 0)
{
while ($giveawardsrow = $vbulletin->db->fetch_array($giveawards))
{ // for each award, check to see if they are a member of the relevant group and update accordingly
$userdm =& datamanager_init('User', $vbulletin, ERRTYPE_ARRAY);
$userinfo = fetch_userinfo($giveawardsrow['userid']);
$userdm->set_existing($userinfo);
$membergroupids = $userdm->fetch_field('membergroupids');
echo "<br>Existing Groups=".$membergroupids." | ";
if ($membergroupids != "")
{
$withcomma = "," . $aw2gr;
$trailingcomma = $aw2gr . ",";
$membergroupids = str_replace("$withcomma", "", $membergroupids);
$membergroupids = str_replace("$trailingcomma", "", $membergroupids);
$membergroupids = str_replace("$aw2gr", "", $membergroupids);
if ($membergroupids != "")
{
$membergroupids = $membergroupids . $withcomma;
}
else
{
$membergroupids = $aw2gr;
}
}
else
{
$membergroupids = $aw2gr;
}
echo "UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
$userdm->set('membergroupids', $membergroupids);
$userdm->pre_save();
if (count($userdm->errors))
{
for ($i = 0; $i < count($userdm->errors); $i++)
{
echo "ERROR{$i}:{$userdm->errors[$i]}\n";
}
}
else
{
// If everything is OK
$userdm->save();
echo " | Account updated!";
$userdm->set_existing($userinfo);
$membergroupids = $userdm->fetch_field('membergroupids');
echo " | UserID=".$giveawardsrow['userid']." Membergroups=".$membergroupids;
}
}
$vbulletin->db->free_result($giveawardsrow);
}
It runs fine and everything echos correctly however only the members in the very first segment get their groups set. The following two (award ids 5 and 9) are ignored even though the queries do run as proved by the correct data being echoed to screen.
--------------- Added [DATE]1234442124[/DATE] at [TIME]1234442124[/TIME] ---------------
ok, it's the arrays at the top thats causing the problem.
A follow on from the 'three stage' test that I done still referenced one array.
I commented out the following line at the beginning of each step like so;
PHP Code:
//$aw2gr = $grouparr[$awardval];
and hardcoded the value to each one like so;
and it all works perfectly.
Looks like I need to do some more reading on arrays which I've not used in php too much.
Finally getting somewhere!