/** * Update count of posts in comments and bb_posts (old forums) * * @param int $id Unique ID of the member to synchronize * @param str $type 'user' or 'all users' */ function synchronize($id, $type) { switch($type) { case 'user': // Array of tables from which to count 'posts' $tables = array(); // Count comments (approved only: com_status == XOOPS_COMMENT_ACTIVE) include_once ICMS_INCLUDE_PATH . '/comment_constants.php'; $tables[] = array ('table_name' => 'xoopscomments', 'uid_column' => 'com_uid', 'criteria' => new icms_db_criteria_Item('com_status', XOOPS_COMMENT_ACTIVE)); // Count forum posts $tables[] = array ('table_name' => 'bb_posts', 'uid_column' => 'uid'); $total_posts = 0; foreach ($tables as $table) { $criteria = new icms_db_criteria_Compo(); $criteria->add (new icms_db_criteria_Item($table['uid_column'], $id)); if (!empty($table['criteria'])) {$criteria->add ($table['criteria']);} $sql = "SELECT COUNT(*) AS total FROM " . icms::$xoopsDB->prefix($table['table_name']) . ' ' . $criteria->renderWhere(); if ($result = icms::$xoopsDB->query($sql)) { if ($row = icms::$xoopsDB->fetchArray($result)) {$total_posts = $total_posts + $row['total'];} } } $sql = "UPDATE " . icms::$xoopsDB->prefix("users") . " SET posts = '". (int) $total_posts . "' WHERE uid = '". (int) $id . "'"; if (!$result = icms::$xoopsDB->query($sql)) {exit(sprintf(_AM_CNUUSER %s , $id));} break; case 'all users': $sql = "SELECT uid FROM " . icms::$xoopsDB->prefix('users') . ""; if (!$result = icms::$xoopsDB->query($sql)) {exit(_AM_CNGUSERID);} while ($row = icms::$xoopsDB->fetchArray($result)) { $id = $row['uid']; synchronize($id, "user"); } break; default: break; } redirect_header('admin.php?fct=users&op=modifyUser&uid=' . $id, 1, _AM_DBUPDATED); exit(); }