[B][CENTER]~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!.............. Sponsored by: PHP KingDom ([url]www.phpkd.net[/url]) ..............!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[/CENTER][/B]



[B][COLOR="Red"]Please remember to click [COLOR="Blue"]Mark as Installed[/COLOR] if you use this modification.[/COLOR]
[COLOR="DarkOrchid"]Support questions from members who have not marked this as installed will be considered low priority.[/COLOR][/B]

[B]Note:[/B] This product has been requested by [URL="http://www.vbulletin.org/forum/member.php?u=74086"]kevinh[/URL] as a custom work. It has been completed & delivered few months ago. Since all of my custom work is licensed under [URL="http://creativecommons.org/licenses/by-nc-sa/3.0/"]Creative Commons - Attribution-Noncommercial-Share Alike 3.0[/URL], I publish it now for the public use, I hope this product will be useful for all of you.


[B]Name:[/B] Moderated Attachments Staff Notify - [B]Version:[/B] 3.8.100

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


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


[B][U]Requirements:[/U][/B]
[LIST]
[*]You should install the following product first:
[URL="http://www.vbulletin.org/forum/misc.php?do=producthelp&pid=attach_moderation"]Attachment Moderation - Follow Forum Moderation Rules Control[/URL]
[/LIST]


[B][U]Features:[/U][/B]
[LIST]
[*]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".
[/LIST]


[U][B]Installation Procedure:[/B][/U]
[LIST=1]
[*]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)[/code]

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);
		}
	}[/code]
[COLOR="Blue"]** Save the modified file "includes/class_dm_threadpost.php" & re-upload it (allow over-write). **[/COLOR]


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)
[/CODE]


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;
}[/CODE]
[COLOR="Blue"]** Save the modified file "includes/functions_newpost.php" & re-upload it (allow over-write). **[/COLOR]


[*]Import product's XML file from AdminCP.
[*]Done :).
[/LIST]


[U][B]Control:[/B][/U]
[LIST]
[*]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
[/LIST]


[U][B]License:[/B][/U]
[LIST]
[*][URL="http://creativecommons.org/licenses/by-nc-sa/3.0/"]Creative Commons - Attribution-Noncommercial-Share Alike 3.0[/URL]
[/LIST]


[U][B]Help with:[/B][/U]
[LIST]
[*]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.
[/LIST]


[U][B]Known Isues:[/B][/U]
[LIST]
[*]Nothing till now.
[/LIST]


[U][B]History:[/B][/U]
[LIST]
[*][SIZE="1"][B]v3.8.100[/B] 14/01/2009 02:00 PM GMT: First initial public release.[/SIZE]
[/LIST]


[U][B]Screen Shots:[/B][/U]
[LIST]
[*]Available down there.
[/LIST]


[U][B]Technical Notes:[/B][/U]
[LIST][B][I]
[*][COLOR="DimGray"]New Files:[/COLOR] 1
[*][COLOR="DimGray"]New Plugins:[/COLOR] 6
[*][COLOR="DimGray"]New Phrases:[/COLOR] 10
[*][COLOR="dimgray"]New Templates:[/COLOR] 0
[*][COLOR="dimgray"]Template changes:[/COLOR] 0
[*][COLOR="dimgray"]Code Changes:[/COLOR] 2
[*][COLOR="dimgray"]New vBulletin Settings:[/COLOR] 1
[*][COLOR="dimgray"]New Usergroup Permissions:[/COLOR] 0
[*][COLOR="dimgray"]New Moderator Permissions:[/COLOR] 1
[*][COLOR="dimgray"]New Administrator Permissions:[/COLOR] 0
[*][COLOR="dimgray"]New Forum Options:[/COLOR] 1
[*][COLOR="dimgray"]New DB Tables:[/COLOR] 0
[*][COLOR="dimgray"]DB Alterations:[/COLOR] 2
[*][COLOR="dimgray"]New Cron Jops:[/COLOR] 0
-----------------
[*][COLOR="dimgray"]Installation Level:[/COLOR] Easy
[*][COLOR="dimgray"]Installation Time:[/COLOR] 30~50 seconds
[/I][/B]
[/LIST]


[B][U]Donation?:[/U][/B]
[LIST]
[*]Yes, appreciated donations received via [URL="https://www.moneybookers.com/app/?rid=2138068"]Moneybookers[/URL] at:
[CODE][COLOR="Red"][B]freelancers@phpkd.net[/B][/COLOR][/CODE]
[/LIST]