<?xml version="1.0" encoding="UTF-8"?>
<plugin name="(k4) File buttons in Topics" version_long="11000" version_human="1.1.0" author="k4r1" website="https://enxf.net/members/by_ix.16167" update_check="https://raw.githubusercontent.com/byIx/vfbt/main/checker.php"><hooks><hook type="S" class="\IPS\Theme\class_forums_front_topics" filename="fbt"><![CDATA[//<?php

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	exit;
}

class hook146 extends _HOOK_CLASS_
{

/* !Hook Data - DO NOT REMOVE */
public static function hookData() {
 return array_merge_recursive( array (
  'topic' => 
  array (
    0 => 
    array (
      'selector' => '#elClubContainer > div.ipsClearfix > ul.ipsToolList.ipsToolList_horizontal.ipsClearfix.ipsSpacer_both',
      'type' => 'add_inside_start',
      'content' => '{template="fbt" group="plugins" location="global" app="core" params="$topic"}',
    ),
  ),
), parent::hookData() );
}
/* End Hook Data */

public function topic( $topic, $comments, $question=NULL, $votes=array(), $nextUnread=NULL, $pagination=NULL, $topicVotes=array() )
{
	try
	{
		try
		{ 
			$topic->fid = \IPS\Db::i()->select( 'file_id', 'downloads_files', array( 'file_topicid=?', $topic->tid ) )->first();
		}
		catch( \Exception $e )
		{
			$topic->fid = 0;
		}
		$topic->file = $topic->fid != 0 ? \IPS\downloads\File::load( $topic->fid ) : '';
	
		if( \is_callable( 'parent::topic' ) )
		{
			return \call_user_func_array( 'parent::' . __FUNCTION__, \func_get_args() );
		}
	}
	catch ( \Error | \RuntimeException $e )
	{
		if ( method_exists( get_parent_class(), __FUNCTION__ ) )
		{
			return \call_user_func_array( 'parent::' . __FUNCTION__, \func_get_args() );
		}
		else
		{
			throw $e;
		}
	}
}

}]]></hook></hooks><settings><setting><key>fbt_view</key><default>1</default></setting><setting><key>fbt_download</key><default>1</default></setting></settings><settingsCode><![CDATA[//<?php

$form->add( new \IPS\Helpers\Form\YesNo( 'fbt_view', \IPS\Settings::i()->fbt_view, FALSE ) );
$form->add( new \IPS\Helpers\Form\YesNo( 'fbt_download', \IPS\Settings::i()->fbt_download, FALSE ) );

if ( $values = $form->values() )
{
	$form->saveAsSettings();
	return TRUE;
}

return $form;]]></settingsCode><tasks/><widgets/><htmlFiles><html filename="fbt.phtml">PGlwczp0ZW1wbGF0ZSBwYXJhbWV0ZXJzPSIkdG9waWMiIC8+Cnt7aWYgJHRvcGljLT5maWQgJiYgKCBzZXR0aW5ncy5mYnRfZG93bmxvYWQgfHwgc2V0dGluZ3MuZmJ0X3ZpZXcgKX19CiAgICA8dWwgY2xhc3M9J2lwc1Rvb2xMaXN0IGlwc1Rvb2xMaXN0X2hvcml6b250YWwgaXBzQ2xlYXJmaXggZmJ0X3Bvc2l0aW9uJz4KICAgICAgICB7eyRmaWxlID0gJHRvcGljLT5maWxlO319CiAgICAgICAge3tpZiBzZXR0aW5ncy5mYnRfZG93bmxvYWR9fQogICAgICAgICAgICB7e2lmICRmaWxlLT5jYW5CdXkoKX19CiAgICAgICAgICAgICAgICB7e2lmICRmaWxlLT5jYW5Eb3dubG9hZCgpfX0KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9J2lwc1Rvb2xMaXN0X3ByaW1hcnlBY3Rpb24gZmJ0X21hcmdpbic+CiAgICAgICAgICAgICAgICAgICAgICAgIHt7aWYgISRmaWxlLT5jYW5Eb3dubG9hZCgpIEFORCAhKCAhJGZpbGUtPmNvbnRhaW5lcigpLT5jYW4oICdkb3dubG9hZCcgKSBBTkQgJGZpbGUtPmNvbnRhaW5lcigpLT5tZXNzYWdlKCducGQnKSApfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aWYgIVxJUFNcTWVtYmVyOjpsb2dnZWRJbigpLT5tZW1iZXJfaWR9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpcHNCdXR0b24gaXBzQnV0dG9uX21lZGl1bSI+PGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+IHtsYW5nPSJkb3dubG9hZF9ub19wZXJtaXNzaW9uX2d1ZXN0In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ne3VybD0iYXBwPWNvcmUmbW9kdWxlPXN5c3RlbSZjb250cm9sbGVyPWxvZ2luIiBzZW9UZW1wbGF0ZT0ibG9naW4ifScgY2xhc3M9J2lwc0J1dHRvbiBpcHNCdXR0b25fbGlnaHQgaXBzQnV0dG9uX21lZGl1bSBpcHNCdXR0b25fZnVsbFdpZHRoIGlwc1NwYWNlcl90b3AnPntsYW5nPSJzaWduX2luX3Nob3J0In08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpcHNCdXR0b24gaXBzQnV0dG9uX21lZGl1bSI+PGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+IHtsYW5nPSJkb3dubG9hZF9ub19wZXJtaXNzaW9uIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VuZGlmfX0KICAgICAgICAgICAgICAgICAgICAgICAge3tlbHNlfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9J3t7aWYgc2V0dGluZ3MuaWRtX2FudGlsZWVjaCBBTkQgISRmaWxlLT5yZXF1aXJlc0Rvd25sb2FkQ29uZmlybWF0aW9uKCl9fXskZmlsZS0+dXJsKCdkb3dubG9hZCcpLT5jc3JmKCl9e3tlbHNlfX17JGZpbGUtPnVybCgnZG93bmxvYWQnKX17e2VuZGlmfX0nIGNsYXNzPSdpcHNCdXR0b24gaXBzQnV0dG9uX2Z1bGxXaWR0aCBpcHNCdXR0b25fbGFyZ2UgaXBzQnV0dG9uX2ltcG9ydGFudCcge3tpZiAkZmlsZS0+cmVxdWlyZXNEb3dubG9hZENvbmZpcm1hdGlvbigpfX1kYXRhLWlwc0RpYWxvZ3t7ZW5kaWZ9fSBkYXRhLWRhdGFsYXllci1wb3N0ZmV0Y2ggPntsYW5nPSJkb3dubG9hZF9ub3cifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAge3tlbmRpZn19CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAJCXt7ZW5kaWZ9fQogICAgICAgICAgICAgICAgPGxpIGNsYXNzPSdpcHNUb29sTGlzdF9wcmltYXJ5QWN0aW9uIGZidF9tYXJnaW4nPgogICAgICAgICAgICAgICAgICAgIHt7aWYgISRmaWxlLT5pc1B1cmNoYXNhYmxlKCBGQUxTRSApfX0KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Imlwc0J1dHRvbiBpcHNCdXR0b25fbWVkaXVtIj48aSBjbGFzcz0iZmEgZmEtaW5mby1jaXJjbGUiPjwvaT4ge2xhbmc9InB1cmNoYXNpbmdfZGlzYWJsZWQifTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSd7e2lmICEkZmlsZS0+Y29udGFpbmVyKCktPm1lc3NhZ2UoJ2Rpc2NsYWltZXInKSBPUiAhXGluX2FycmF5KCAkZmlsZS0+Y29udGFpbmVyKCktPmRpc2NsYWltZXJfbG9jYXRpb24sIFsgJ3B1cmNoYXNlJywgJ2JvdGgnIF0gKX19eyRmaWxlLT51cmwoJ2J1eScpLT5jc3JmKCl9e3tlbHNlfX17JGZpbGUtPnVybCgnYnV5Jyl9e3tlbmRpZn19JyBjbGFzcz0naXBzQnV0dG9uIGlwc0J1dHRvbl9mdWxsV2lkdGggaXBzQnV0dG9uX2xhcmdlIGlwc0J1dHRvbl9pbXBvcnRhbnQnIHt7aWYgJGZpbGUtPmNvbnRhaW5lcigpLT5tZXNzYWdlKCdkaXNjbGFpbWVyJykgQU5EIFxpbl9hcnJheSggJGZpbGUtPmNvbnRhaW5lcigpLT5kaXNjbGFpbWVyX2xvY2F0aW9uLCBbICdwdXJjaGFzZScsICdib3RoJ10pfX1kYXRhLWlwc0RpYWxvZ3t7ZW5kaWZ9fT48aSBjbGFzcz0nZmEgZmEtc2hvcHBpbmctY2FydCc+PC9pPiAmbmJzcDt7bGFuZz0iYnV5X25vdyJ9e3tpZiAkcHJpY2UgPSAkZmlsZS0+cHJpY2UoKX19IC0geyRwcmljZXxyYXd9e3tlbmRpZn19PC9hPgogICAgICAgICAgICAgICAgICAgIHt7ZW5kaWZ9fQogICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAge3tlbHNlfX0KICAgICAgICAgICAgICAgIHt7aWYgJGZpbGUtPmNhbkRvd25sb2FkKCkgb3IgISRmaWxlLT5kb3dubG9hZFRlYXNlcigpfX0KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9J2lwc1Rvb2xMaXN0X3ByaW1hcnlBY3Rpb24gZmJ0X21hcmdpbic+CiAgICAgICAgICAgICAgICAgICAgICAgIHt7aWYgISRmaWxlLT5jYW5Eb3dubG9hZCgpIEFORCAhKCAhJGZpbGUtPmNvbnRhaW5lcigpLT5jYW4oICdkb3dubG9hZCcgKSBBTkQgJGZpbGUtPmNvbnRhaW5lcigpLT5tZXNzYWdlKCducGQnKSApfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aWYgIVxJUFNcTWVtYmVyOjpsb2dnZWRJbigpLT5tZW1iZXJfaWR9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpcHNCdXR0b24gaXBzQnV0dG9uX21lZGl1bSI+PGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+IHtsYW5nPSJkb3dubG9hZF9ub19wZXJtaXNzaW9uX2d1ZXN0In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ne3VybD0iYXBwPWNvcmUmbW9kdWxlPXN5c3RlbSZjb250cm9sbGVyPWxvZ2luIiBzZW9UZW1wbGF0ZT0ibG9naW4ifScgY2xhc3M9J2lwc0J1dHRvbiBpcHNCdXR0b25fbGlnaHQgaXBzQnV0dG9uX21lZGl1bSBpcHNCdXR0b25fZnVsbFdpZHRoIGlwc1NwYWNlcl90b3AnPntsYW5nPSJzaWduX2luX3Nob3J0In08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2Vsc2V9fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpcHNCdXR0b24gaXBzQnV0dG9uX21lZGl1bSI+PGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+IHtsYW5nPSJkb3dubG9hZF9ub19wZXJtaXNzaW9uIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VuZGlmfX0KICAgICAgICAgICAgICAgICAgICAgICAge3tlbHNlfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9J3t7aWYgc2V0dGluZ3MuaWRtX2FudGlsZWVjaCBBTkQgISRmaWxlLT5yZXF1aXJlc0Rvd25sb2FkQ29uZmlybWF0aW9uKCl9fXskZmlsZS0+dXJsKCdkb3dubG9hZCcpLT5jc3JmKCl9e3tlbHNlfX17JGZpbGUtPnVybCgnZG93bmxvYWQnKX17e2VuZGlmfX0nIGNsYXNzPSdpcHNCdXR0b24gaXBzQnV0dG9uX2Z1bGxXaWR0aCBpcHNCdXR0b25fbGFyZ2UgaXBzQnV0dG9uX2ltcG9ydGFudCcge3tpZiAkZmlsZS0+cmVxdWlyZXNEb3dubG9hZENvbmZpcm1hdGlvbigpfX1kYXRhLWlwc0RpYWxvZ3t7ZW5kaWZ9fSBkYXRhLWRhdGFsYXllci1wb3N0ZmV0Y2ggPntsYW5nPSJkb3dubG9hZF9ub3cifTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAge3tlbmRpZn19CiAgICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAJCXt7ZWxzZX19CiAgICAgICAgCQkJPGEgaHJlZj0ne3VybD0iYXBwPWNvcmUmbW9kdWxlPXN5c3RlbSZjb250cm9sbGVyPXJlZ2lzdGVyIiBzZW9UZW1wbGF0ZT0icmVnaXN0ZXIifScgZGF0YS1pcHNEaWFsb2cgZGF0YS1pcHNEaWFsb2ctc2l6ZT0nbWVkaXVtJyBkYXRhLWlwc0RpYWxvZy1yZW1vdGVWZXJpZnk9J2ZhbHNlJyBjbGFzcz0naXBzQnV0dG9uIGlwc0J1dHRvbl9saW5rIGlwc0J1dHRvbl9tZWRpdW0gZmJ0X21hcmdpbic+PGkgY2xhc3M9ImZhIGZhLWluZm8tY2lyY2xlIj48L2k+IHtsYW5nPSJkb3dubG9hZF90ZWFzZXIifTwvYT4KICAgICAgICAJCXt7ZW5kaWZ9fQogICAgICAgIAl7e2VuZGlmfX0KICAgICAgICAJe3tpZiAoIGlzc2V0KCAkcHVyY2hhc2VzVG9SZW5ldyApIG9yICRwdXJjaGFzZXNUb1JlbmV3ID0gJGZpbGUtPnB1cmNoYXNlc1RvUmVuZXcoKSApIGFuZCBcY291bnQoICRwdXJjaGFzZXNUb1JlbmV3ICl9fQogICAgICAgIAkJPGxpIGNsYXNzPSdpcHNUb29sTGlzdF9wcmltYXJ5QWN0aW9uIGZidF9tYXJnaW4nPgogICAgICAgIAkJCXt7aWYgXGNvdW50KCAkcHVyY2hhc2VzVG9SZW5ldyApID09PSAxfX0KICAgICAgICAJCQkJe3tmb3JlYWNoICRwdXJjaGFzZXNUb1JlbmV3IGFzICRwdXJjaGFzZX19CiAgICAgICAgCQkJCQk8YSBocmVmPSd7JHB1cmNoYXNlLT51cmwoKS0+c2V0UXVlcnlTdHJpbmcoJ2RvJywgJ3JlbmV3JyktPmNzcmYoKX0nIGNsYXNzPSdpcHNCdXR0b24gaXBzQnV0dG9uX2Z1bGxXaWR0aCBpcHNCdXR0b25fbGFyZ2UgaXBzQnV0dG9uX2ltcG9ydGFudCc+PGkgY2xhc3M9J2ZhIGZhLXJlZnJlc2gnPjwvaT4gJm5ic3A7e2xhbmc9InB1cmNoYXNlX3JlbmV3X25vdyJ9IC0geyRwdXJjaGFzZS0+cmVuZXdhbHMtPmNvc3R9PC9hPgogICAgICAgIAkJCQl7e2VuZGZvcmVhY2h9fQogICAgICAgIAkJCXt7ZWxzZX19CiAgICAgICAgCQkJCTxhIGhyZWY9JyNlbEZpbGVSZW5ld19tZW51JyBpZD0nZWxGaWxlUmVuZXcnIGNsYXNzPSdpcHNCdXR0b24gaXBzQnV0dG9uX2Z1bGxXaWR0aCBpcHNCdXR0b25fbGFyZ2UgaXBzQnV0dG9uX2ltcG9ydGFudCcgZGF0YS1pcHNNZW51PjxpIGNsYXNzPSdmYSBmYS1yZWZyZXNoJz48L2k+ICZuYnNwO3tsYW5nPSJwdXJjaGFzZV9yZW5ld19ub3cifSA8aSBjbGFzcz0iZmEgZmEtY2FyZXQtZG93biI+PC9pPjwvYT4KICAgICAgICAJCQkJPHVsIGlkPSdlbEZpbGVSZW5ld19tZW51JyBjbGFzcz0naXBzTWVudSBpcHNNZW51X2F1dG8gaXBzSGlkZSc+CiAgICAgICAgCQkJCQl7e2ZvcmVhY2ggJHB1cmNoYXNlc1RvUmVuZXcgYXMgJHB1cmNoYXNlfX0KICAgICAgICAJCQkJCQk8bGkgY2xhc3M9J2lwc01lbnVfaXRlbSc+PGEgaHJlZj0ieyRwdXJjaGFzZS0+dXJsKCktPnNldFF1ZXJ5U3RyaW5nKCdkbycsICdyZW5ldycpLT5jc3JmKCl9Ij57JHB1cmNoYXNlLT5uYW1lfTxicj48c3BhbiBjbGFzcz0naXBzVHlwZV9saWdodCc+eyRwdXJjaGFzZS0+cmVuZXdhbHN9PC9zcGFuPjwvYT48L2xpPgogICAgICAgIAkJCQkJe3tlbmRmb3JlYWNofX0KICAgICAgICAJCQkJPC91bD4JCQogICAgICAgIAkJCXt7ZW5kaWZ9fQkJCQkJCQogICAgICAgIAkJPC9saT4KICAgICAgICAJe3tlbmRpZn19CiAgICAgICAge3tlbmRpZn19CiAgICAgICAge3tpZiBzZXR0aW5ncy5mYnRfdmlld319CiAgICAgICAgCTxsaSBjbGFzcz0naXBzVG9vbExpc3RfcHJpbWFyeUFjdGlvbnt7aWYgXElQU1xTZXR0aW5nczo6aSgpLT5mYnRfcG9zcX19IGZidF9wb3NpdGlvbnt7ZW5kaWZ9fSBmYnRfbWFyZ2luJz4KICAgICAgICAJCTxzcGFuPgogICAgICAgIAkJCTxhIGhyZWY9J3skZmlsZS0+dXJsKCl9JyByZWw9J25vZm9sbG93JyBjbGFzcz0naXBzQnV0dG9uIGlwc0J1dHRvbl9pbXBvcnRhbnQgaXBzQnV0dG9uX21lZGl1bSBpcHNCdXR0b25fZnVsbFdpZHRoJz57bGFuZz0idmlld19maWxlIn08L2E+CiAgICAgICAgCQk8L3NwYW4+CiAgICAgICAgCTwvbGk+CiAgICAJe3tlbmRpZn19CiAgICA8L3VsPgp7e2VuZGlmfX0</html></htmlFiles><cssFiles><css filename="fbt.css">QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNzY4cHgpIHsKICAgIC5mYnRfcG9zaXRpb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OwogICAgfQogICAgLmZidF9tYXJnaW4gewogICAgICAgIG1hcmdpbi1sZWZ0OiAwICFpbXBvcnRhbnQ7CgkJbWFyZ2luLXJpZ2h0OiB2YXIoLS1zcC0zKSAhaW1wb3J0YW50OwogICAgfQp9</css></cssFiles><jsFiles/><resourcesFiles/><lang><word key="fbt_view" js="0">Display the view button?</word><word key="fbt_download" js="0">Display the download button?</word></lang><versions><version long="11000" human="1.1.0"><![CDATA[//<?php

/* To prevent PHP errors (extending class does not exist) revealing path */
if ( !\defined( '\IPS\SUITE_UNIQUE_KEY' ) )
{
	header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' );
	exit;
}

/**
 * 1.1.0 Upgrade Code
 */
class ips_plugins_setup_upg_11000
{
	/**
	 * ...
	 *
	 * @return	array	If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops)
	 */
	public function step1()
	{
		return TRUE;
	}
	
	// You can create as many additional methods (step2, step3, etc.) as is necessary.
	// Each step will be executed in a new HTTP request
}]]></version></versions></plugin>
