Please remember to click Mark as Installed if you use this modification.
Support questions from members who have not marked this as installed will be considered low priority.
Note: This product has been requested by kevinh as a custom work. It has been completed & delivered few months ago. Since all of my custom work is licensed under Creative Commons - Attribution-Noncommercial-Share Alike 3.0, I publish it now for the public use, I hope this product will be useful for all of you.
Doing all default vBulletin checks & follow all vBulletin default scenarios while proccessing.
Can Set "Email Addresses to Notify When there is a Moderated Attachments" per forum.
Can Set "Receive Email When there is new Moderated Attachments" per moderator.
Can Choose between two options: "Email Moderators" only OR "Email Moderators, Super Moderators and Administrators".
Installation Procedure:
Upload the "bitfield_modattachstaffnotify.xml" file to /includes/xml/.
Do the following file edits:
Open the file "includes/class_dm_threadpost.php" & search in it for the following code:
Code:
function email_moderators($fields)
Add Above it directly the following code:
Code:
/**
* Fetches the amount of moderated attachments associated with a posthash and user
*
* @param string Post hash
* @param integer User ID associated with post hash (-1 means current user)
*
* @return integer Number of attachments
*/
function fetch_mod_attachment_count($postid, $userid = -1)
{
if ($userid == -1)
{
$userid = $this->fetch_field('userid', 'post');
}
$userid = intval($userid);
$attachcount = $this->dbobject->query_first("
SELECT COUNT(*) AS count
FROM " . TABLE_PREFIX . "attachment
WHERE postid = '$postid'
AND userid = $userid
AND visible != 1
");
return intval($attachcount['count']);
}
/**
* Fetches the moderated attachments associated with a posthash and user
*
* @param string Post hash
* @param integer User ID associated with post hash (-1 means current user)
*
* @return array Moderated attachments IDs
*/
function fetch_mod_attachment($postid, $userid = -1)
{
if ($userid == -1)
{
$userid = $this->fetch_field('userid', 'post');
}
$userid = intval($userid);
$attachs = $this->dbobject->query_read_slave("
SELECT attachmentid, filename
FROM " . TABLE_PREFIX . "attachment
WHERE postid = '$postid'
AND userid = $userid
AND visible != 1
");
$modattach = array();
while ($attach = $this->dbobject->fetch_array($attachs))
{
$modattach[$attach['attachmentid']] = array('attachmentid' => $attach['attachmentid'], 'filename' => $attach['filename'], 'postid' => $attach['postid'], 'dateline' => $attach['dateline']);
}
return $modattach;
}
function attach_email_moderators($fields, $attachcount, $attachs)
{
if ($this->info['skip_moderator_email'] OR !$this->info['forum'] OR in_coventry($this->fetch_field('userid', 'post'), true))
{
return;
}
$mod_emails = fetch_moderator_modattach_emails($fields, $this->info['forum']['parentlist'], $newpost_lang);
if (!empty($mod_emails))
{
$foruminfo = $this->info['forum'];
$foruminfo['title_clean'] = unhtmlspecialchars($foruminfo['title_clean']);
$threadinfo = fetch_threadinfo($this->fetch_field('threadid'));
$email = ($this->info['user']['email'] ? $this->info['user']['email'] : $this->registry->userinfo['email']);
$browsing_user = $this->registry->userinfo['username'];
// ugly hack -- should be fixed in the future
$this->registry->userinfo['username'] = unhtmlspecialchars($this->info['user']['username'] ? $this->info['user']['username'] : $this->registry->userinfo['username']);
$post = array_merge($this->existing, $this->post);
if (!$post['postid'])
{
$post['postid'] = $this->thread['firstpostid'];
}
require_once(DIR . '/includes/functions_misc.php');
foreach ($mod_emails AS $toemail)
{
if ($toemail != $email)
{
if ($threadinfo['prefixid'])
{
// need prefix in correct language
$threadinfo['prefix_plain'] = fetch_phrase(
"prefix_$threadinfo[prefixid]_title_plain",
'global',
'',
false,
true,
isset($newpost_lang["$toemail"]) ? $newpost_lang["$toemail"] : 0,
false
) . ' ';
}
else
{
$threadinfo['prefix_plain'] = '';
}
$attachdetails = "";
foreach ($attachs as $attach)
{
$attachdetails .= " * ID: " . $attach['attachmentid'] . ", Name: " . $attach['filename'] . "\n";
}
eval(fetch_email_phrases('moderator_attach', iif(isset($newpost_lang["$toemail"]), $newpost_lang["$toemail"], 0)));
vbmail($toemail, $subject, $message);
}
}
// back to normal
$this->registry->userinfo['username'] = htmlspecialchars_uni($browsing_user);
}
}
** Save the modified file "includes/class_dm_threadpost.php" & re-upload it (allow over-write). **
Open the file "includes/functions_newpost.php" & search in it for the following code:
Code:
/**
* Fetches the email addresses of moderators to email when there is a new post
* or new thread in a forum.
*
* @param string|array A string or array of dbfields to check for email addresses; also doubles as mod perm names
* @param string|array A string (comma-delimited) or array of forum IDs to check
* @param array (By reference) An array of languageids associated with specific email addresses returned
*
* @return array Array of emails to mail
*/
function fetch_moderator_newpost_emails($fields, $forums, &$language_info)
Add Above it directly the following code:
Code:
/**
* Fetches the email addresses of moderators to email when there is a new moderated attachments in a forum.
*
* @param string|array A string or array of dbfields to check for email addresses; also doubles as mod perm names
* @param string|array A string (comma-delimited) or array of forum IDs to check
* @param array (By reference) An array of languageids associated with specific email addresses returned
*
* @return array Array of emails to mail
*/
function fetch_moderator_modattach_emails($fields, $forums, &$language_info)
{
global $vbulletin;
$language_info = array();
if (!is_array($fields))
{
$fields = array($fields);
}
// figure out the fields to select and the permissions to check
$field_names = '';
$mod_perms = array();
foreach ($fields AS $field)
{
if ($permfield = intval($vbulletin->bf_misc_modattachstaffnotify["$field"]))
{
$mod_perms[] = "(moderator.modattachstaffnotify & $permfield)";
}
$field_names .= "$field, ' ',";
}
if (sizeof($fields) > 1)
{
// kill trailing comma
$field_names = 'CONCAT(' . substr($field_names, 0, -1) . ')';
}
else
{
$field_names = reset($fields);
}
// figure out the forums worth checking
if (is_array($forums))
{
$forums = implode(',', $forums);
}
if (!$forums)
{
return array();
}
$modattachemail = '';
$moderators = $vbulletin->db->query_read_slave("
SELECT $field_names AS modattachemail
FROM " . TABLE_PREFIX . "forum
WHERE forumid IN (" . $vbulletin->db->escape_string($forums) . ")
");
while ($moderator = $vbulletin->db->fetch_array($moderators))
{
$modattachemail .= ' ' . trim($moderator['modattachemail']);
}
if (empty($modattachemail) OR $vbulletin->options['modattachstaffnotify_emailto'] == 1)
{
// get a list of super mod groups
$smod_groups = array();
foreach ($vbulletin->usergroupcache AS $ugid => $groupinfo)
{
if ($groupinfo['adminpermissions'] & $vbulletin->bf_ugp_adminpermissions['ismoderator'])
{
// super mod group
$smod_groups[] = $ugid;
}
}
}
if ($mod_perms)
{
$mods = $vbulletin->db->query_read_slave("
SELECT DISTINCT user.email, user.languageid
FROM " . TABLE_PREFIX . "moderator AS moderator
LEFT JOIN " . TABLE_PREFIX . "user AS user USING(userid)
WHERE
(
(moderator.forumid IN (" . $vbulletin->db->escape_string($forums) . ") AND moderator.forumid <> -1)
" . (!empty($smod_groups) ? "OR (user.usergroupid IN (" . implode(',', $smod_groups) . ") AND moderator.forumid = -1)" : '') . "
)
AND (" . implode(' OR ', $mod_perms) . ")
");
while ($mod = $vbulletin->db->fetch_array($mods))
{
$language_info["$mod[email]"] = $mod['languageid'];
$modattachemail .= ' ' . $mod['email'];
}
}
$emails = preg_split('#\s+#', trim($modattachemail), -1, PREG_SPLIT_NO_EMPTY);
$emails = array_unique($emails);
return $emails;
}
** Save the modified file "includes/functions_newpost.php" & re-upload it (allow over-write). **
vBulletin AdminCP -> Forums & Moderators -> Show All Moderators -> Beside any staff member click [Edit Permissions] -> Receive Email When a Attachment is Moderated
vBulletin AdminCP -> Forums & Moderators -> Forum Manager -> Select Forum -> Attachment Staff Notify -> Email Addresses to Notify When there is a Moderated Attachments