<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.fogproject.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Hook_System</id>
		<title>Hook System - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.fogproject.org/wiki/index.php?action=history&amp;feed=atom&amp;title=Hook_System"/>
		<link rel="alternate" type="text/html" href="https://wiki.fogproject.org/wiki/index.php?title=Hook_System&amp;action=history"/>
		<updated>2026-04-30T03:57:48Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https://wiki.fogproject.org/wiki/index.php?title=Hook_System&amp;diff=4199&amp;oldid=prev</id>
		<title>Chad-bisd: Undo revision 4196 by Erscott (talk) ----- Spam added by user Erscott</title>
		<link rel="alternate" type="text/html" href="https://wiki.fogproject.org/wiki/index.php?title=Hook_System&amp;diff=4199&amp;oldid=prev"/>
				<updated>2011-10-02T22:41:35Z</updated>
		
		<summary type="html">&lt;p&gt;Undo revision 4196 by &lt;a href=&quot;/wiki/index.php?title=Special:Contributions/Erscott&quot; title=&quot;Special:Contributions/Erscott&quot;&gt;Erscott&lt;/a&gt; (&lt;a href=&quot;/wiki/index.php?title=User_talk:Erscott&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User talk:Erscott (page does not exist)&quot;&gt;talk&lt;/a&gt;) ----- Spam added by user Erscott&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Hook System Overview ==&lt;br /&gt;
From SVN version 741 (yet to be released as an official version) FOG has the ability to be &amp;quot;hooked&amp;quot; and extended using an Object Orientated approach.&lt;br /&gt;
&lt;br /&gt;
Events are called throughout FOG, allowing developers to hook into FOG at certain code points without editing FOG's base code. &lt;br /&gt;
&lt;br /&gt;
Right now the Event list gives you the ability modify Data and Styling on all Management Search &amp;amp; List pages.&lt;br /&gt;
&lt;br /&gt;
Keep in mind that this code is still experimental and may change at any time.&lt;br /&gt;
&lt;br /&gt;
== Critical Files ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lib/fog/Hook.class.php&lt;br /&gt;
lib/fog/HookManager.class.php&lt;br /&gt;
lib/hooks/*.hook.php&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hook Class Variables &amp;amp; Methods ==&lt;br /&gt;
'''Variables'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class ExampleHook extends Hook&lt;br /&gt;
{&lt;br /&gt;
	// Required&lt;br /&gt;
	var $name = 'string';&lt;br /&gt;
	var $description = 'string';&lt;br /&gt;
	var $author = 'string';&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Optional with defaults&lt;br /&gt;
	var $active = true;&lt;br /&gt;
	var $logLevel = 0;&lt;br /&gt;
	var $logToFile = false;&lt;br /&gt;
	var $logToBrowser = true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Inherited Methods'''&lt;br /&gt;
&lt;br /&gt;
Methods that are available within your Hook Class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Function: void log( string $txt [, int $level = 1] )&lt;br /&gt;
Example: $this-&amp;gt;log('Debug alert !! Run for the hills !!');&lt;br /&gt;
&lt;br /&gt;
Function: bool isAJAXRequest()&lt;br /&gt;
Example: if (!$this-&amp;gt;isAJAXRequest()) print_r($debug);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enabling / Disabling Hooks ==&lt;br /&gt;
Hooks can be enabled and disabled by changing the variable $active inside of the class you wish to enable / disable;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
'''To Enable''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var $active = true;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''To Disable''':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
var $active = false;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How to Hook Events ==&lt;br /&gt;
Hook Events are called in various parts of the FOG code. Hooking these Events is very simple.&lt;br /&gt;
&lt;br /&gt;
'''Example for Event: HostData'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ExampleHook = new ExampleHook();&lt;br /&gt;
$HookManager-&amp;gt;register('HostData', array($ExampleHook, 'HostData'));  // This will call the function HostData( array $arguments ) in $ExampleHook&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''A full list of Events can be found here: http://www.fogproject.org/wiki/index.php?title=Hook_System#Events''&lt;br /&gt;
&lt;br /&gt;
== Function Arguments ==&lt;br /&gt;
When an Event Hook is fired, various arguments are passed to the function specified. These arguments may vary.&lt;br /&gt;
&lt;br /&gt;
'''Returned argument indexes'''&lt;br /&gt;
&lt;br /&gt;
'event'		: Always returned. Returns the name of the event fired to get here&lt;br /&gt;
&lt;br /&gt;
'data'		: Contains data variables used to replace %name% strings in 'templates'&lt;br /&gt;
&lt;br /&gt;
'templates'	: Each index will become a new column. Using %name% variables will be converted to the matching key index in 'data'&lt;br /&gt;
&lt;br /&gt;
'attributes'	: Array of attributes to apply to each column wrapper. i.e. class, width, height, style&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
Here is an example showing the data passed from the HostData Event&lt;br /&gt;
&lt;br /&gt;
''Code''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function run($arguments)&lt;br /&gt;
{&lt;br /&gt;
	$this-&amp;gt;log(print_r($arguments, 1));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Output''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
	[event] =&amp;gt; 'HostData'&lt;br /&gt;
	[data] =&amp;gt; Array&lt;br /&gt;
	(&lt;br /&gt;
		[0] =&amp;gt; Array&lt;br /&gt;
		(&lt;br /&gt;
			[id] =&amp;gt; '968'&lt;br /&gt;
			[hostname] =&amp;gt; '12583-M780'&lt;br /&gt;
			[mac] =&amp;gt; '00:23:18:ef:b4:8d'&lt;br /&gt;
		)&lt;br /&gt;
		[1] =&amp;gt; Array&lt;br /&gt;
		(&lt;br /&gt;
			[id] =&amp;gt; '966'&lt;br /&gt;
			[hostname] =&amp;gt; '12700-M780'&lt;br /&gt;
			[mac] =&amp;gt; '00:23:18:72:50:8d'&lt;br /&gt;
		) &lt;br /&gt;
		[2] =&amp;gt; Array&lt;br /&gt;
		(&lt;br /&gt;
			[id] =&amp;gt; '1011'&lt;br /&gt;
			[hostname] =&amp;gt; '12703-M780'&lt;br /&gt;
			[mac] =&amp;gt; '00:23:18:97:a8:8d'&lt;br /&gt;
		)&lt;br /&gt;
		[3] =&amp;gt; Array&lt;br /&gt;
		(&lt;br /&gt;
			[id] =&amp;gt; '1251'&lt;br /&gt;
			[hostname] =&amp;gt; '12705-M780'&lt;br /&gt;
			[mac] =&amp;gt; '00:23:18:60:26:96'&lt;br /&gt;
		)&lt;br /&gt;
	)&lt;br /&gt;
	[templates] =&amp;gt; Array&lt;br /&gt;
	(&lt;br /&gt;
		[0] =&amp;gt; '&amp;lt;input type=&amp;quot;checkbox&amp;quot; name=&amp;quot;HID%id%&amp;quot; checked=&amp;quot;checked&amp;quot; /&amp;gt;'&lt;br /&gt;
		[1] =&amp;gt; '&amp;lt;span class=&amp;quot;icon ping&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;'&lt;br /&gt;
		[2] =&amp;gt; '&amp;lt;a href=&amp;quot;?node=host&amp;amp;sub=edit&amp;amp;id=%id%&amp;quot; title=&amp;quot;Edit&amp;quot;&amp;gt;%hostname%&amp;lt;/a&amp;gt;'&lt;br /&gt;
		[3] =&amp;gt; '%mac%'&lt;br /&gt;
		[4] =&amp;gt; '%ip%'&lt;br /&gt;
		[5] =&amp;gt; '&amp;lt;a href=&amp;quot;?node=host&amp;amp;sub=edit&amp;amp;id=%id%&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;icon icon-edit&amp;quot; title=&amp;quot;Edit: %hostname%&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;'&lt;br /&gt;
	)&lt;br /&gt;
	[attributes] =&amp;gt; Array&lt;br /&gt;
	(&lt;br /&gt;
		[0] =&amp;gt; Array ( )&lt;br /&gt;
		[1] =&amp;gt; Array ( )&lt;br /&gt;
		[2] =&amp;gt; Array ( )&lt;br /&gt;
		[3] =&amp;gt; Array ( )&lt;br /&gt;
		[4] =&amp;gt; Array ( )&lt;br /&gt;
		[5] =&amp;gt; Array ( ['class'] =&amp;gt; 'c' )&lt;br /&gt;
	)&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hook Template ==&lt;br /&gt;
This is the most basic hook template&amp;lt;br /&amp;gt;&lt;br /&gt;
Your hook MUST extend the FOG Hook Class 'Hook' otherwise HookManager will fail to Hook the Event&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Location: '''lib/hooks/Template.hook.php'''&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/****************************************************&lt;br /&gt;
 * FOG Hook: Template&lt;br /&gt;
 *	Author:		Blackout&lt;br /&gt;
 *	Created:	8:57 AM 31/08/2011&lt;br /&gt;
 *	Revision:	$Revision: 743 $&lt;br /&gt;
 *	Last Update:	$LastChangedDate: 2011-09-04 11:50:55 +1000 (Sun, 04 Sep 2011) $&lt;br /&gt;
 ***/&lt;br /&gt;
&lt;br /&gt;
// Hook Template&lt;br /&gt;
class HookTemplate extends Hook&lt;br /&gt;
{&lt;br /&gt;
	var $name = 'Hook Name';&lt;br /&gt;
	var $description = 'Hook Description';&lt;br /&gt;
	var $author = 'Hook Author';&lt;br /&gt;
	&lt;br /&gt;
	var $active = false;&lt;br /&gt;
	&lt;br /&gt;
	function HostData($arguments)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;log(print_r($arguments, 1));&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Init class&lt;br /&gt;
$HookTemplate = new HookTemplate();&lt;br /&gt;
&lt;br /&gt;
// Hook Event&lt;br /&gt;
$HookManager-&amp;gt;register('HostData', array($HookTemplate, 'HostData'));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Events ==&lt;br /&gt;
Hook Events allow you to jump into the FOG code at a certain point. When an event is fired, data and styling information related to that event can be made available to the Hook Developer for modification.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Adding hooking points can be a time consuming process as the HTML, Data and Styling needs to be (re-)written in a particular way to allow hooking.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
More events will be added. If you require a particular hooking point, please contact Blackout with where the Hook needs to be made and any code you have developed :)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Global&lt;br /&gt;
CSS&lt;br /&gt;
JavaScript&lt;br /&gt;
MainMenuData				// data =&amp;gt; array&lt;br /&gt;
SubMenuData				// FOGSubMenu =&amp;gt; FOGSubMenu Object&lt;br /&gt;
MessageBox				// data =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
// Host Management&lt;br /&gt;
// List / Search&lt;br /&gt;
HostTableHeader&lt;br /&gt;
HostData&lt;br /&gt;
HostAfterTable&lt;br /&gt;
// Edit&lt;br /&gt;
HostEditUpdate				// host =&amp;gt; Host Object&lt;br /&gt;
HostEditUpdateSuccess			// host =&amp;gt; Host Object&lt;br /&gt;
HostEditUpdateFail			// host =&amp;gt; Host Object&lt;br /&gt;
HostEditConfirmMACUpdate		// host =&amp;gt; Host Object&lt;br /&gt;
HostEditConfirmMACUpdateSuccess		// host =&amp;gt; Host Object, mac = MACAddress Object&lt;br /&gt;
HostEditConfirmMACUpdateFail		// host =&amp;gt; Host Object, mac = MACAddress Object&lt;br /&gt;
HostEditADUpdate&lt;br /&gt;
HostEditADUpdateSuccess&lt;br /&gt;
HostEditADUpdateFail&lt;br /&gt;
HostEditAddSnapinUpdate&lt;br /&gt;
HostEditAddSnapinUpdateSuccess&lt;br /&gt;
HostEditAddSnapinUpdateFail&lt;br /&gt;
HostEditRemoveSnapinUpdate&lt;br /&gt;
HostEditRemoveSnapinUpdateSuccess&lt;br /&gt;
HostEditRemoveSnapinUpdateFail&lt;br /&gt;
&lt;br /&gt;
// Group Management&lt;br /&gt;
GroupTableHeader&lt;br /&gt;
GroupData&lt;br /&gt;
GroupAfterTable&lt;br /&gt;
&lt;br /&gt;
// Image Management&lt;br /&gt;
ImageTableHeader&lt;br /&gt;
ImageData&lt;br /&gt;
ImageAfterTable&lt;br /&gt;
&lt;br /&gt;
// Storage Node Management&lt;br /&gt;
// All Storage Nodes&lt;br /&gt;
StorageGroupTableHeader&lt;br /&gt;
StorageGroupData&lt;br /&gt;
StorageGroupAfterTable&lt;br /&gt;
// All Storage Groups&lt;br /&gt;
StorageNodeTableHeader&lt;br /&gt;
StorageNodeData&lt;br /&gt;
StorageNodeAfterTable&lt;br /&gt;
&lt;br /&gt;
// Snapin Management&lt;br /&gt;
SnapinTableHeader&lt;br /&gt;
SnapinData&lt;br /&gt;
SnapinAfterTable&lt;br /&gt;
&lt;br /&gt;
// Printer Management&lt;br /&gt;
PrinterTableHeader&lt;br /&gt;
PrinterData&lt;br /&gt;
PrinterAfterTable&lt;br /&gt;
&lt;br /&gt;
// Task Management&lt;br /&gt;
// Active Tasks&lt;br /&gt;
TasksActiveTableHeader&lt;br /&gt;
TasksActiveData&lt;br /&gt;
TasksActiveAfterTable&lt;br /&gt;
TasksActiveRemove&lt;br /&gt;
TasksActiveRemoveSuccess&lt;br /&gt;
TasksActiveRemoveFail&lt;br /&gt;
TasksActiveForce&lt;br /&gt;
TasksActiveForceSuccess&lt;br /&gt;
TasksActiveForceFail&lt;br /&gt;
// Search&lt;br /&gt;
TaskData&lt;br /&gt;
TasksSearchTableHeader&lt;br /&gt;
// List Hosts&lt;br /&gt;
TasksListHostTableHeader&lt;br /&gt;
TasksListHostData&lt;br /&gt;
TasksListHostAfterTable&lt;br /&gt;
// List Group&lt;br /&gt;
TasksListGroupTableHeader&lt;br /&gt;
TasksListGroupData&lt;br /&gt;
TasksListGroupAfterTable&lt;br /&gt;
// Scheduled Tasks&lt;br /&gt;
TasksScheduledTableHeader&lt;br /&gt;
TasksScheduledData&lt;br /&gt;
TasksScheduledAfterTable&lt;br /&gt;
TasksScheduledRemove&lt;br /&gt;
TasksScheduledRemoveSuccess&lt;br /&gt;
TasksScheduledRemoveFail&lt;br /&gt;
// Active Multicast Tasks&lt;br /&gt;
TasksActiveMulticastTableHeader&lt;br /&gt;
TasksActiveMulticastData&lt;br /&gt;
TasksActiveMulticastAfterTable&lt;br /&gt;
// Active Snapins&lt;br /&gt;
TasksActiveSnapinsTableHeader&lt;br /&gt;
TasksActiveSnapinsData&lt;br /&gt;
TasksActiveSnapinsAfterTable&lt;br /&gt;
TasksActiveSnapinsRemove			// id =&amp;gt; snapinID, hostID =&amp;gt; hostID&lt;br /&gt;
TasksActiveSnapinsRemoveSuccess			// id =&amp;gt; snapinID, hostID =&amp;gt; hostID&lt;br /&gt;
TasksActiveSnapinsRemoveFail			// id =&amp;gt; snapinID, hostID =&amp;gt; hostID&lt;br /&gt;
&lt;br /&gt;
// Login&lt;br /&gt;
Login						// username =&amp;gt; string, password =&amp;gt; string&lt;br /&gt;
LoginSuccess					// username =&amp;gt; string, password =&amp;gt; string, user =&amp;gt; User Object&lt;br /&gt;
LoginFail					// username =&amp;gt; string, password =&amp;gt; string&lt;br /&gt;
&lt;br /&gt;
// Logout&lt;br /&gt;
Logout&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
''Up to date as of SVN r759''&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
'''HostVNCLink'''&lt;br /&gt;
&lt;br /&gt;
Adds a &amp;quot;VNC&amp;quot; link to the Host Lists&lt;br /&gt;
&lt;br /&gt;
Location: '''lib/hooks/HostVNCLink.hook.php'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/****************************************************&lt;br /&gt;
 * FOG Hook: HostVNCLink&lt;br /&gt;
 *	Author:		Blackout&lt;br /&gt;
 *	Created:	9:26 AM 3/09/2011&lt;br /&gt;
 *	Revision:	$Revision: 743 $&lt;br /&gt;
 *	Last Update:	$LastChangedDate: 2011-09-04 11:50:55 +1000 (Sun, 04 Sep 2011) $&lt;br /&gt;
 ***/&lt;br /&gt;
&lt;br /&gt;
// HostVNCLink - custom hook class&lt;br /&gt;
class HostVNCLink extends Hook&lt;br /&gt;
{&lt;br /&gt;
	// Class variables&lt;br /&gt;
	var $name = 'HostVNCLink';&lt;br /&gt;
	var $description = 'Adds a &amp;quot;VNC&amp;quot; link to the Host Lists';&lt;br /&gt;
	var $author = 'Blackout';&lt;br /&gt;
	&lt;br /&gt;
	var $active = false;&lt;br /&gt;
	&lt;br /&gt;
	// Custom variable&lt;br /&gt;
	var $port = 5800;&lt;br /&gt;
	&lt;br /&gt;
	function HostData($arguments)&lt;br /&gt;
	{&lt;br /&gt;
		// Add column template into 'templates' array&lt;br /&gt;
		$arguments['templates'][] = sprintf('&amp;lt;a href=&amp;quot;http://%s:%d&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;gt;VNC&amp;lt;/a&amp;gt;', '%hostname%', $this-&amp;gt;port);&lt;br /&gt;
		// Add these HTML attributes to that column&lt;br /&gt;
		$arguments['attributes'][] = array('class' =&amp;gt; 'c');&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function HostTableHeader($arguments)&lt;br /&gt;
	{&lt;br /&gt;
		// Add new Header column with the content 'VNC'&lt;br /&gt;
		$arguments['templates'][] = 'VNC';&lt;br /&gt;
		// Add these HTML attributes to that column&lt;br /&gt;
		$arguments['attributes'][] = array('width' =&amp;gt; '40', 'class' =&amp;gt; 'c');&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Init&lt;br /&gt;
$HostVNCLink = new HostVNCLink();&lt;br /&gt;
&lt;br /&gt;
// Register hooks with HookManager on desired events&lt;br /&gt;
$HookManager-&amp;gt;register('HostData', array($HostVNCLink, 'HostData'));&lt;br /&gt;
$HookManager-&amp;gt;register('HostTableHeader', array($HostVNCLink, 'HostTableHeader'));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''RemoveIPAddressColumn'''&lt;br /&gt;
&lt;br /&gt;
Removes the &amp;quot;IP Address&amp;quot; column from Host Lists&lt;br /&gt;
&lt;br /&gt;
Location: '''lib/hooks/RemoveIPAddressColumn.hook.php'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/****************************************************&lt;br /&gt;
 * FOG Hook: Remove 'IP Address' column&lt;br /&gt;
 *	Author:		Blackout&lt;br /&gt;
 *	Created:	1:52 PM 3/09/2011&lt;br /&gt;
 *	Revision:	$Revision: 743 $&lt;br /&gt;
 *	Last Update:	$LastChangedDate: 2011-09-04 11:50:55 +1000 (Sun, 04 Sep 2011) $&lt;br /&gt;
 ***/&lt;br /&gt;
&lt;br /&gt;
// RemoveIPAddressColumn class&lt;br /&gt;
class RemoveIPAddressColumn extends Hook&lt;br /&gt;
{&lt;br /&gt;
	var $name = 'RemoveIPAddressColumn';&lt;br /&gt;
	var $description = 'Removes the &amp;quot;IP Address&amp;quot; column from Host Lists';&lt;br /&gt;
	var $author = 'Blackout';&lt;br /&gt;
	&lt;br /&gt;
	var $active = false;&lt;br /&gt;
	&lt;br /&gt;
	function HostTableHeader($arguments)&lt;br /&gt;
	{&lt;br /&gt;
		// Remove IP Address column by removing its column template&lt;br /&gt;
		unset($arguments['templates'][4]);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	function HostData($arguments)&lt;br /&gt;
	{&lt;br /&gt;
		// Remove IP Address column by removing its column template&lt;br /&gt;
		unset($arguments['templates'][4]);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Init&lt;br /&gt;
$RemoveIPAddressColumn = new RemoveIPAddressColumn();&lt;br /&gt;
&lt;br /&gt;
// Register hooks&lt;br /&gt;
$HookManager-&amp;gt;register('HostTableHeader', array($RemoveIPAddressColumn, 'HostTableHeader'));&lt;br /&gt;
$HookManager-&amp;gt;register('HostData', array($RemoveIPAddressColumn, 'HostData'));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Example.ChangeTableHeader'''&lt;br /&gt;
&lt;br /&gt;
Remove &amp;amp; add table header columns&lt;br /&gt;
&lt;br /&gt;
Location: '''lib/hooks/Example.ChangeTableHeader.hook.php'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/****************************************************&lt;br /&gt;
 * FOG Hook: Example Change Table Header&lt;br /&gt;
 *	Author:		Blackout&lt;br /&gt;
 *	Created:	8:57 AM 31/08/2011&lt;br /&gt;
 *	Revision:	$Revision: 743 $&lt;br /&gt;
 *	Last Update:	$LastChangedDate: 2011-09-04 11:50:55 +1000 (Sun, 04 Sep 2011) $&lt;br /&gt;
 ***/&lt;br /&gt;
&lt;br /&gt;
// Example class&lt;br /&gt;
class TestHookChangeTableHeader extends Hook&lt;br /&gt;
{&lt;br /&gt;
	var $name = 'ChangeTableHeader';&lt;br /&gt;
	var $description = 'Remove &amp;amp; add table header columns';&lt;br /&gt;
	var $author = 'Blackout';&lt;br /&gt;
	&lt;br /&gt;
	var $active = false;&lt;br /&gt;
	&lt;br /&gt;
	function HostTableHeader($arguments)&lt;br /&gt;
	{&lt;br /&gt;
		// DEBUG output&lt;br /&gt;
		foreach ($arguments['templates'] AS $i =&amp;gt; $data)&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;log(sprintf('Table Rows: i: %s Data: %s', $i, print_r($data, 1)));&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		// Rename column 'Host Name' -&amp;gt; 'Chicken Sandwiches'&lt;br /&gt;
		$arguments['templates'][2] = 'Chicken Sandwiches';&lt;br /&gt;
		&lt;br /&gt;
		// Override column values &amp;amp; attributes&lt;br /&gt;
		$arguments['templates'][5] = 'Edit Me !!';&lt;br /&gt;
		$arguments['attributes'][5] = array('width' =&amp;gt; '40', 'class' =&amp;gt; 'c');&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Example: Change Table Header and Data&lt;br /&gt;
$HookManager-&amp;gt;register('HostTableHeader', array(new TestHookChangeTableHeader(), 'HostTableHeader'));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Example.ChangeData'''&lt;br /&gt;
&lt;br /&gt;
Appends &amp;quot;Chicken-&amp;quot; to all hostnames&lt;br /&gt;
&lt;br /&gt;
Location: '''lib/hooks/Example.ChangeData.hook.php'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/****************************************************&lt;br /&gt;
 * FOG Hook: Example Change Hostname&lt;br /&gt;
 *	Author:		Blackout&lt;br /&gt;
 *	Created:	8:57 AM 31/08/2011&lt;br /&gt;
 *	Revision:	$Revision: 743 $&lt;br /&gt;
 *	Last Update:	$LastChangedDate: 2011-09-04 11:50:55 +1000 (Sun, 04 Sep 2011) $&lt;br /&gt;
 ***/&lt;br /&gt;
&lt;br /&gt;
// Example class&lt;br /&gt;
class TestHookChangeHostname extends Hook&lt;br /&gt;
{&lt;br /&gt;
	var $name = 'ChangeHostname';&lt;br /&gt;
	var $description = 'Appends &amp;quot;Chicken-&amp;quot; to all hostnames ';&lt;br /&gt;
	var $author = 'Blackout';&lt;br /&gt;
	&lt;br /&gt;
	var $active = false;&lt;br /&gt;
	&lt;br /&gt;
	function HostData($arguments)&lt;br /&gt;
	{&lt;br /&gt;
		foreach ($arguments['data'] AS $i =&amp;gt; $data)&lt;br /&gt;
		{&lt;br /&gt;
			// DEBUG&lt;br /&gt;
			//$this-&amp;gt;log(sprintf('Renaming Host: i: %s Data: %s', $i, print_r($data, 1)));&lt;br /&gt;
			&lt;br /&gt;
			// Rename host&lt;br /&gt;
			$arguments['data'][$i]['hostname'] = 'Chicken-' . $data['hostname'];&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Example: Test by changing all hostnames in Host Management&lt;br /&gt;
$HookManager-&amp;gt;register('HostData', array(new TestHookChangeHostname(), 'HostData'));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Example.SideMenuChange'''&lt;br /&gt;
&lt;br /&gt;
Example showing how to manipulate SubMenu Data. Adds Menu items under &amp;quot;Host Management&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Location: '''lib/hooks/Example.SideMenuChange.hook.php'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/****************************************************&lt;br /&gt;
 * FOG Hook: Example.SideMenuChange&lt;br /&gt;
 *	Author:		Blackout&lt;br /&gt;
 *	Created:	12:10 PM 4/09/2011&lt;br /&gt;
 *	Revision:	$Revision: 743 $&lt;br /&gt;
 *	Last Update:	$LastChangedDate: 2011-09-04 11:50:55 +1000 (Sun, 04 Sep 2011) $&lt;br /&gt;
 ***/&lt;br /&gt;
&lt;br /&gt;
// Hook Template&lt;br /&gt;
class HookSubMenuData extends Hook&lt;br /&gt;
{&lt;br /&gt;
	var $name = 'SubMenuData';&lt;br /&gt;
	var $description = 'Example showing how to manipulate SubMenu Data. Adds Menu items under &amp;quot;Host Management&amp;quot;';&lt;br /&gt;
	var $author = 'Blackout';&lt;br /&gt;
	&lt;br /&gt;
	var $active = false;&lt;br /&gt;
	&lt;br /&gt;
	function SubMenuData($arguments)&lt;br /&gt;
	{&lt;br /&gt;
		if ($GLOBALS['node'] == 'host')&lt;br /&gt;
		{&lt;br /&gt;
			// Add a new item under 'Host Management'&lt;br /&gt;
			$arguments['FOGSubMenu']-&amp;gt;addItems('host', array(_('New Hook Item') =&amp;gt; 'http://www.google.com', _('New Hook Item 2') =&amp;gt; &amp;quot;newhookitem2&amp;quot;));&lt;br /&gt;
			&lt;br /&gt;
			if ($GLOBALS['id'])&lt;br /&gt;
			{&lt;br /&gt;
				// Add a new item under 'Host Management' per Host&lt;br /&gt;
				$arguments['FOGSubMenu']-&amp;gt;addItems('host', array(_('New Hook Item') =&amp;gt; &amp;quot;http://www.google.com&amp;quot;, _('New Hook Item 2') =&amp;gt; &amp;quot;newhookitem2&amp;quot;), 'id', $GLOBALS['hostname']);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Init class&lt;br /&gt;
$HookSubMenuData = new HookSubMenuData();&lt;br /&gt;
&lt;br /&gt;
// Hook Event&lt;br /&gt;
$HookManager-&amp;gt;register('SubMenuData', array($HookSubMenuData, 'SubMenuData'));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Debugging ==&lt;br /&gt;
&lt;br /&gt;
Using the 'Hook Debugger' hook, you can debug all hook events to browser and/or log file&lt;br /&gt;
&lt;br /&gt;
Location: '''lib/hooks/HookDebugger.hook.php'''&lt;br /&gt;
&lt;br /&gt;
'''You must enable this hook''' ''See: http://www.fogproject.org/wiki/index.php?title=Hook_System#Enabling_.2F_Disabling_Hooks''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/****************************************************&lt;br /&gt;
 * FOG Hook: HookDebugger&lt;br /&gt;
 *	Author:		Blackout&lt;br /&gt;
 *	Created:	8:57 AM 31/08/2011&lt;br /&gt;
 *	Revision:	$Revision: 744 $&lt;br /&gt;
 *	Last Update:	$LastChangedDate: 2011-09-04 12:02:48 +1000 (Sun, 04 Sep 2011) $&lt;br /&gt;
 ***/&lt;br /&gt;
&lt;br /&gt;
// HookDebugger class&lt;br /&gt;
class HookDebugger extends Hook&lt;br /&gt;
{&lt;br /&gt;
	var $name = 'HookDebugger';&lt;br /&gt;
	var $description = 'Prints all Hook data to the web page and/or file when a hook is encountered';&lt;br /&gt;
	var $author = 'Blackout';&lt;br /&gt;
	&lt;br /&gt;
	var $active = false;&lt;br /&gt;
	&lt;br /&gt;
	var $logLevel = 9;&lt;br /&gt;
	var $logToFile = false;		// Logs to: lib/hooks/HookDebugger.log&lt;br /&gt;
	var $logToBrowser = true;&lt;br /&gt;
	&lt;br /&gt;
	function run($arguments)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;log(print_r($arguments, 1));&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Debug all events&lt;br /&gt;
$HookDebugger = new HookDebugger();&lt;br /&gt;
foreach ($HookManager-&amp;gt;events AS $event)&lt;br /&gt;
{&lt;br /&gt;
	$HookManager-&amp;gt;register($event, array($HookDebugger, 'run'));&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Chad-bisd</name></author>	</entry>

	</feed>