PDA

View Full Version : Moderators Functions - PHPKD - Moderated Attachments Staff Notify


Omranic
14 Jan 2009, 14:56
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!.............. Sponsored by: PHP KingDom (www.phpkd.net) ..............!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



This version is no longer supported as vB 3.6.x is out-of-date & no longer supported by vBulletin. It's just for historical reasons & for those who still using vB 3.6.x. Please refer to the vB 4.0.x or vB 3.8.x release for the latest stable & supported release. (http://www.vbulletin.org/forum/member.php?u=211414)



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 (http://www.vbulletin.org/forum/member.php?u=74086) 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 (http://creativecommons.org/licenses/by-nc-sa/3.0/), I publish it now for the public use, I hope this product will be useful for all of you.


Name: Moderated Attachments Staff Notify - Version: 3.6.100

Description: This product will notify staff when new moderated attachments uploaded to the forums.


Compatible with: All 3.6.x/3.7.x/3.8.x vBulletin versions.


Requirements:

You should install the following product first:
Attachment Moderation - Follow Forum Moderation Rules Control (http://www.vbulletin.org/forum/misc.php?do=producthelp&pid=attach_moderation)



Features:

Fully Phrased.
Fully Automated.
Fully Supported.
Accurate Processing.
Professionally Coded.
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:
function email_moderators($fields)

Add Above it directly the following 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:
/**
* 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:
/**
* 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). **


Import product's XML file from AdminCP.
Done :).



Control:

vBulletin AdminCP -> vBulletin Options -> vBulletin Options -> Attachment Staff Notify
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



License:

Creative Commons - Attribution-Noncommercial-Share Alike 3.0 (http://creativecommons.org/licenses/by-nc-sa/3.0/)



Help with:

Suggestions to develop this product.
Contributing any updates, upgrades and/or any new features.
Translations to benefit more users (translation credits goes to their owners).
Spreading this product. Yes, you're free to re-distribute this product as it is.



Known Isues:

Nothing till now.



History:

v3.6.100 14/01/2009 02:00 PM GMT: First initial public release.



Screen Shots:

Available down there.



Technical Notes:

New Files: 1
New Plugins: 6
New Phrases: 10
New Templates: 0
Template changes: 0
Code Changes: 2
New vBulletin Settings: 1
New Usergroup Permissions: 0
New Moderator Permissions: 1
New Administrator Permissions: 0
New Forum Options: 1
New DB Tables: 0
DB Alterations: 2
New Cron Jops: 0
-----------------
Installation Level: Easy
Installation Time: 30~50 seconds

Omranic
21 Mar 2010, 03:13
New Release ...
v4.0.100 19/03/2010 08:00 AM UTC: Fully compatible vB 3.8.x & vB 4.0.x release! (http://www.vbulletin.org/forum/showthread.php?t=238728)